wh9 编写语法关键字列表及注意事项

学习资料 08-07 15:45发布

功能关键字
Params定义参数,必须填写默认值
Vars定义变量,可以赋初值,不赋初值系统自动填充初值
Data定义数据区
Setting定义环境设置,实现多样化的策略
ImPort设置跨周期跨合约公式属性
Begin主程序开始
End主程序结束
If条件语句
Else条件语句
For用于循环处理
To用于循环处理
DownTo用于循环处理
While用于循环处理
Break结束循环体
Continue结束单次循环
True
False
And并且
Or或者
数据类型(分为数值型和字符串型)
Numeric数值型临时变量
NumericSeries数值型序列变量
NumericArray数值型数组
NumericRef数值型引用(仅用于编写自定义函数)
NumericArrayRef数值型数组引用(仅用于编写自定义函数)
Global_Numeric数值型广域变量
Global_NumericArray数值型广域数组
String字符串型临时变量
StringArray字符串型数组
StringRef字符串型引用(仅用于编写自定义函数)
StringArrayRef字符串型数组引用(仅用于编写自定义函数)
Global_String字符串型广域变量
Global_StringArray字符串型广域数组
枚举值
Enum_Buy返回买卖状态的买入枚举值
Enum_Sell返回买卖状态的卖出枚举值
Enum_Entry返回开平仓状态的开仓枚举值
Enum_Exit返回开平仓状态的平仓枚举值
Enum_ExitToday返回开平仓状态的平今仓枚举值
Enum_Declared返回委托状态的已申报枚举值
Enum_FillPart返回委托状态的部分成交枚举值
Enum_Filled返回委托状态的全部成交枚举值
Enum_Deleted返回委托状态的已废除枚举值
Enum_Declare返回委托状态的正在申报枚举值
Enum_Cancelin返回委托状态的正在撤单枚举值
Enum_Canceled返回委托状态的已撤单枚举值
Enum_AmericanOption返回美式期权的枚举值
Enum_EuropeanOption返回欧式期权的枚举值
num_CallOption返回看涨期权的枚举值
Enum_PutOption返回看跌期权的枚举值


注:
①数据类型的区分
A.临时变量:对临时变量的计算和赋值当次计算生效,如果不做赋值临时变量直接取变量的初始值。
具体在模型应用中,用k线数据回测那么当次计算指的是对某一根k线数据的计算过程,临时变量的赋值只对这一根k线数据的计算过程中生效;逐笔回测和盘中运行,当次计算指的是对某一笔数据的计算过程,临时变量只对一笔数据的计算过程生效。
写法举例:如果当根K线为阳线则yang为1,如果当根K线为阴线则yin为1


源码
Vars    
Numeric yang;    
Numeric yin;    
begin    
IF (Open < Close)    
{    
yang = 1;    
}    
IF (Open > Close)    
{    
yin = 1;    
}    
End


B.序列变量:
对一段k线数据回测,一根一根逐次计算过程中,如果当根K线计算对变量有赋值就取这个赋值结果,如果当根K线没有对变量进行赋值则取上一根k线的数值。
序列变量,意义在于一段k线数据的每一根k线都有对应一个数据存储,序列变量本质上是一组数值或字符串。序列变量和WH8、金字塔等软件的全局变量概念是一致的。
序列变量通常用于统计一段历史K线中满足某一条件的次数
例:统计截止当前历史K线中阳线的数量


源码
Vars    
NumericSeries UpNum;    
Begin    
If(Close > Open)    
{    
UpNum = UpNum+1;    
}    
PlotNumeric("阳线的数量",UpNum);    
End



C.广域变量:
广域变量和C语言的内部变量的概念是一致的,在一个公式的多次计算过程中,广域变量的计算是延续,这次计算是在上一次的结果基础上进行。
广域变量和临时变量的区别,在于一个公式的多次计算的整个过程中永久有效。
广域变量和序列变量的区别,在于广域变量和一根一根的k线没有对应关系,通常用于算法下单或逐笔数据统计。
例:广域变量控制下单流程,控制满足条件时只下单一次


源码
Setting    
SignalNoTrading:1;    
Vars    
Global_Numeric BuyFLG;//标识变量    
Global_Numeric SellFLG;//标识变量    
Begin    
If(Ma(Close,5) > Ma(Close,10))    
{    
BK;    
}    
If(Ma(Close,5) < Ma(Close,10))    
{    
SP;    
}    
If( F_CurrentSig == Sig_BK && BuyFLG == 0)//接管Buy信号    
{    
A_SendOrder(Enum_Buy,Enum_Entry,2,Price("New"));    
BuyFLG=1;//开仓标志变量赋值    
SellFLG=0;//平仓标志变量归0    
}    
If( F_CurrentSig == Sig_SP && SellFLG == 0)//接管Sell信号    
{    
A_SendOrder(Enum_Sell,Enum_Exit,2,Price("FallLimit"));    
BuyFLG=0;//开仓标志变量归0    
SellFLG=1;//平仓标志变量赋值    
}


②枚举值的用法
A.作为函数的参数
例:


源码
A_SendOrder(Enum_Sell,Enum_Exit,data0.F_BuyRemainPosition(),data0.Price("bid1"));


//对当前公式应用的交易账户对应合约发出卖平仓委托,以买一价平公式应用交易账户当前多头可用持仓。
B.与函数返回值做比对进行判断
例:


源码
If (F_OpenOrderEntryOrExit(0) == Enum_Entry)    
//条件语句,最后一笔未成交委托单是开仓,进行下面操作。
赞赏支持

免责声明:本站言论版权归原创作者所有,其原创性及文中陈述文字和内容仅代表作者个人观点,仅作参考;如果您对原创归属或转载有异议,请 举报文章 我们将补齐出处或者删除;转载本站内容请注明出处。