表达式、声明 (Expressions, declarations and statements)
:=
表达式
|
|
if statement
大致形势是这样的:
运算符
总的来说和Python以及JavaScript的语法都有些类似,我这里之说下不一样的。
三元条件运算符 Ternary conditional operator.
|
|
For循环
To have access to and use the for statement, one should specify the version >= 2 of Pine Script language in the very first line of code, for example: //@version=4
var_declarationX = for counter = from_num to to_num [by step_num]
var_decl0
var_decl1
…
continue
…
break
…
var_declN
return_expression
where:
counter - a variable, loop counter.
from_num - start value of the counter
to_num - end value of the counter. When the counter becomes greater than to_num (or less than to_num in case from_num > to_num) the loop is broken.
step_num - loop step. Can be omitted (in the case loop step = 1).
If from_num is greater than to_num loop step will change direction automatically, no need to specify negative numbers.
var_decl0, … var_declN, return_expression - body of the loop. It must be shifted by 4 spaces or 1 tab.
return_expression - returning value. When a loop is finished or broken, the returning value is given to the var_declarationX.
continue - a keyword. Can be used only in loops. It switches the loop to next iteration.
break - a keyword. Can be used only in loops. It breaks the loop.
var
var是用在赋值和一次性初始化变量的关键字
通常,一个不包括var关键字的变量赋值语法会导致变量值被一次更新都会被重写。相反,用var关键字赋值的话就可以保留状态
内置variable
bar_index
就是bar的序号。比如上市第一天为1,第二天的为2.
close
当前收盘价
high
最高价
strategy.equity
当前资产
strategy.position_size
当前仓位信息, 该变量等于0.0,说明空仓,大于0.0多头仓位,小于0.0空头仓位。
内置方法
array.new_float
The function creates a new array object of float type elements.
方法创建一个float类型的数组
array.pop
|
|
array.push
|
|
array.range
The function returns the difference between the min and max values from a given array.
方法返回数组中最大和最小数值的差值
array.sort
|
|
offset
Shifts series x on the y bars to the right.
ARGUMENTS
source (series) Series of values to process.
offset (integer) Number of bars to offset, must be a positive number. Negative offsets are not supported.
rsi
Relative strength index
crossover
黄金交叉
crossunder
死亡交叉
input
给你的代码指标添加输入。Script input和内置的技术分析指标input完全式样的。
当我们策略写好之后,需要调试一些参数,那么就需要让这些参数暴露出来,这样我们就可以直接在配置里面改参数,然后查看对应的策略回测数据。
- 参数解析123456789101112131415161718192021222324defval,类型必须符合type参数定义的类型defval决定了在scripts里"settings/inputs"标签里的input变量title 标题,没啥好说的type (const string) Input type.可能选项是input.bool, input.integer, input.float, input.string, input.symbol, input.resolution, input.session, input.source, input.color, input.time.minval (const integer, float)input变量最小的可能值。这个参数只有在input 类型为input.integer or input.float.才有效maxval (const integer, float)input变量最大的可能值。这个参数只有在input 类型为input.integer or input.float.才有效confirm (const bool)如果true,用户在指标在添加到图表之前会被询问确认。默认为false。step (const integer, float)Step value to use for incrementing/decrementing input from format dialog. Default value is 1. This argument is used only for input types input.integer and input.float.用于增量或减量input,只在input type为input.integer and input.float.时候有效。默认为1
|
|
security
Request another symbol/resolution
strategy
strategy是关于策略的方法,这个是非常重要的,一定要学会
The function sets a number of strategy properties.
参数解析:
strategy.entry
这是进入市场的命令。
如果具有相同ID的订单已经挂起,则可修改订单。 如果没有指定ID的订单,则会发出新的订单。
要停用进场指令,应使用命令strategy.cancel或strategy.cancel_all。 与函数strategy.order相比,strategy.entry功能受金字塔影响,可以正确反转市场位置。
如果“Limit”和“stop”参数均为“NaN”,则订单类型为市场订单。
strategy.exit
这是一个退出指定进场或整个市场地位的命令。如果函数strategy.exit被调用一次,则只会退出一次。 如果要退出多次,应该多次调用命令strategy.exit。
参数
id (series[string]) 必要参数。 订单标识符。 可以通过引用其标识来取消或修改订单。
from_entry (series[string]) 可选参数。以指定进场指令标识符退出。 要退出所有头寸,应使用空字符串。 默认值为空字符串。
qty (float) 可选参数。退出交易的合约/股数/手数/单位的数量。默认值为’NaN’。
qty_percent (float) 可选参数。定义退出交易的已输入的合约/股数/手数/单位的百分比。当其值不是NaN时,其优先级高于’qty’参数。其值的范围可以从0到100。如果’qty’是NaN,则默认值’qty_percent’是100。
profit (float) 可选参数。 利润目标(以点表示)。 如果已指定,当达到指定的利润额(点)时,则以限价订单退出市场头寸。 默认值为“NaN”。
limit (float) 可选参数。 利润目标(需指定价格)。 若已指定,则以指定价格(或更好)退出市场头寸。 参数’limit’的优先级高于参数’profit’的优先级(若值非’NaN’,则’limit’取代’profit’)。 默认值为“NaN”。
loss (float) 可选参数。 止损(以点表示)。 如果已指定,当达到指定的亏损额(点)时,则以停损单退出市场头寸。 默认值为“NaN”。
stop (float) 可选参数。 止损(需指定价格)。 如果已指定,则将以指定价格(或更差)退出市场头寸。 参数’止损’的优先级高于参数’损失’的优先级(若值非’NaN’,则’止损’代替’损失’)。 默认值为“NaN”。
trail_price (float) 可选参数。跟踪止损激活水平(需指定价格)。如果已指定,当达到指定价格水平时,将放置跟踪止损单。在“trail_offset”参数中指定用于确定跟踪止损单初始价格的偏移量(以点计):X 点低于激活水平以退出多头; X点高于激活水平以退出空头。默认值为“NaN”。
trail_points (float) 可选参数。跟踪止损激活水平(利润以点表示)。如果已指定,当达到已计算价格水平(指定利润金额)时,将放置跟踪止损单。在“trail_offset”参数中指定用于确定跟踪止损单初始价格的偏移量(以点计):X 点低于激活水平以退出多头; X点高于激活水平以退出空头。默认值为“NaN”。
trail_offset (float) 可选参数。跟踪止损激活水平(以点表示)。以点计的偏移量用于确定跟踪止损单的初始价格:X 点低于’trail_price’ or ‘trail_points’以退出多头; X点高于 ‘trail_price’ or ‘trail_points’以退出空头。默认值为“NaN”。
oca_name (string) 可选参数。OCA group的名称 (oca_type = strategy.oca.reduce) 获利目标,止损/跟踪止损。如果未指定名称,将自动生成该名称。
comment (string) 可选参数。订单的其他说明。
when (bool) 可选参数。订单的状况。若为”true”,订单被放置。若为”false”,则没有任何事情发生(之前放置的相同 ID 的订单没有被撤销)。默认值为”true”。
alert_message (string) 当在“创建警报”对话框的“消息”字段中使用占位符时,一个可选参数。
strategy.close
退出entry
如果有多个entry 订单都是同一个ID的话,所有都会一次性退出。
如果没有open的带有指定ID的entry触发的话,这个命令将不会生效。
strategy.close_all
退出你的所有仓位。
strategy.order
加仓
问题与思考
strategy.close 与 strategy.exit的区别
- close
Is a command to exit from the entry with the specified ID.
退出某个ID的entry
If there were multiple entry orders with the same ID, all of them are exited at once.
如果有多个同样ID的订单,所有的订单都会一次性退出。
- exit
It is a command to exit either a specific entry or whole market position.
退出某个entry或者退出整个市场仓位
If an order with the same ID is already pending, it is possible to modify the order.
如果一个相同ID的订单是pending的话,有可能修改这个订单。