wh9 编写语法关键字列表及注意事项 [复制链接]

    autojiaoyi.com 发表于 ・2031 次阅读 库安 wh9 查看全部 使用道具 举报 回复

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

    功能关键字
    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)
    //条件语句,最后一笔未成交委托单是开仓,进行下面操作。
    热帖

    全部评论/0 条

    本版积分规则

    发布新内容
    加入收藏 我要分享
    分享到论坛或者博客

    复制
    热门指标策略
    快速回复 返回顶部 返回列表