TradingView脚本语言-Pine

pine语言官方介绍

pine语法说明

练习编写第一个指标

//@version=5                        ------这是一个包含编译器指令的注释,告诉编译器脚本将使用 Pine Script™ 版本 5   
indicator("MACD #1")                ------图表上的脚本名称定义为“MACD”             
fast = 12
slow = 26
fastMA = ta.ema(close, fast)        -----以收盘价计算EMA(指数移动平均),计算时间跨度为fast(26)
slowMA = ta.ema(close, slow)
macd = fastMA - slowMA
signal = ta.ema(macd, 9)            ------以长度为9的ema算法平滑macd指标
plot(macd, color = color.blue)      ---------画线,为macd指标,使用蓝线输出变量
plot(signal, color = color.orange)

改进代码为

//@version=5
indicator("MACD #2")
fastInput = input(12, "Fast lengthhhh")    ----参数为:  value, key
slowInput = input(26, "Slow lengthhhh")
[macdLine, signalLine, histLine] = ta.macd(close, fastInput, slowInput, 9)
plot(macdLine, color = color.blue)
plot(signalLine, color = color.orange)

内置方法的入参数写在小括号中,出参数写在中括号中。如例子中的ta.macd方法。

此时双击图表中的指标线,多了“输入”标签,可以对输入的两个参数进行图形化的编辑: 

几点说明

“指标”和“策略” 

“指标”计算不需要“经纪商模拟器”,所以计算耗费资源更少,计算速度更快。

两者都可以在叠加模式(在价格图表上)或独立窗格模式(在图表下方或上方的单独部分中)运行。

两者都可以在各自的空间中绘制信息,并且都可以生成警报事件

脚本的执行

脚本运行时已经结束的k线叫做“历史k线”(historical bars)

最新的还没结束的K线叫做“实时K线”(realtime bar)

当脚本在历史K线上执行时,close内置变量保存该柱的收盘价。

当脚本在实时K线上执行时,close返回交易品种的当前价格,直到这个K线的时间结束。

用运算符“[]”引用时间序列的过去值。例如,close[1]指的是脚本正在执行的K线前一个K线的close值。

语法

运行模型

脚本执行方式:从左到右,一个K线柱一个K线柱依次执行,每个K线柱执行一次脚本。

OHLCV: 在K线上执行脚本之前,内置变量(如 openhighlowclosevolume)被设置。计算每移动到一个新的K线柱上,这些内置变量的值就会随之更新成当前柱对应的值。

实时k线的计算:策略默认是只在实时k线结束的时候计算一次,但是可以将策略的calc_on_every_tick参数设置为true在每次当前实时K线数据更新的时候计算。

用户自定义的变量在每个K线上的重新赋值不会被带到下一个K线中。

免费用户能看大约5k个k线,pro/pro+用户能看1w个k线,高级用户能看2w个k线。

函数块内的函数脚本和上下文的执行,不调用就不刷新(有的条件执行的语句确实不能每次都强制执行),因此要注意函数块内的是不是每次都需要更新。需要的话需要放到函数块外。

脚本结构

注释://

代码块要空4格或者tab

脚本类型声明:每个脚本必须声明脚本是什么类型:indicator()/strategy()/library()即指标/策略/库

“指标”类型必须有至少一个输出函数,例如plot()

“策略”必须至少一个strategy.*()调用

“库”至少包含一个库函数声明

自定义变量

常量用大写的SNAKE_CASE

运算符

=给新变量赋值

:=给定义过的变量赋值(与go语言相反)

运算符及优先级

 条件语句

某些 Pine Script™ 内置函数无法在条件结构的执行语句中调用。它们是: alertcondition() , barcolor() , fill() , hline() , indicator() , library() , plot() , plotbar() , plotcandle() , plotchar() , plotshape() , strategy()

无括号、无冒号、无花括号

if xxx
    xxxx
else if xxx
    xxxx
else
    xxxx
xxxx

循环语句

for

for offset = 0 to MA_LENGTH - 1
    sumOfCloses := sumOfCloses + close[offset]

while 

while i <= lookbackInput
    if high[i] > high
        higherBars += 1
    else if high[i] < high
        lowerBars += 1
        // Counter must be managed "manually".
    i += 1

类型系统

pine使用form-type对来描述所有的值

forms

form描述一个值何时得到,type描述一个值的性质。

form从弱到强:const < input < simple < series

  • “const”编译时已知
  • “input” 输入时知道
  • “simple”索引为0的k线时就已经知道的
  • “series”移动到当前k线才知道的值

要求强form的地方可以用更弱的form。

types

  • 基本类型 “int”, “float”, “bool”, “color” and “string”
  • 特殊类型“plot”, “hline”, “line”, “label”, “box”, “table”, “array”
  • “void”
  • tuples

特殊类型都包含一个指向对象的ID(指针)

内置函数/变量

同族的函数和变量共享命名空间,命名空间是用函数前缀表示的,如ta.sma()函数表示“技术分析”(technical analysis)。

有些变量也提供对应的函数,比如time和time(timeframe)。

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值