全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
代码显示不能订阅K线是什么问题
2022-04-13 10:09

//------------------------------------------------------------------------
// 简称: fe_gridTrade2
// 名称: 示例--两小段代码轻松搞定网格交易法
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------

// TBQ新版增加流控后,改写了一下。

Params
    String sym("SA2209.SHFE");            // 交易的品种
    Numeric GridStartPrice(2930);        // 网格起始价格
    Integer Lots(1);                    // 交易手数
    Integer GridStep(10);                // 网格的大小
    Integer GridLength(20);                // 网格格数
    Integer BS(-1);                        // 交易方向,1-多,-1空

Vars
    Array<Integer> ordIds;                // 存放发单后的报单号
    Numeric CurGridPrice;                // 当前网格价格
    Numeric TPPrice;                    // 止盈价格
    Numeric REPrice;                    // 补挂单价格
    Integer i(0);
    Global Integer flag;                // 是否布网格的标志
    Global Integer timeID1;             // 定时器ID
    Global Integer gridCnt;                // 网格挂单计数器
    
Defs
    //log输出
    Integer LogFile(String str)
    {
        FileAppend(FormulaName()+".txt","["+Text(SystemDateTime())+"] "+ str);
        Return 0;
    }


Events
    //初始化事件函数,策略运行期间,首先运行且只有一次
    OnInit()
    {
        LogFile("【OnInit】"+sym);
        SubscribeBar(sym,"5m", 20201029, 20220501) ;
        SubscribeBar(sym,"tick",20201029, 20220501);
        flag = 0;
    }
    
    OnBar(ArrayRef<Integer> indexs)
    {
        If(AccountDataExist() && IsTradingTime(SystemDateTime) && BarStatus==2 && flag==0)
        {
            LogFile("网格交易启动,BarStatus="+Text(BarStatus));
        
            if(flag==0)
            {    
                timeID1 = CreateTimer(1000,0,GridLength);
                gridCnt = 1;
                flag = 1;
            }
            
        }
    }
    
    OnTimer(Integer id,Integer millsecs)
    {
        if(id==timeID1)
        {
            // 网格布单
            if(gridCnt<=GridLength)
            {
                CurGridPrice = GridStartPrice - (gridCnt-1) * GridStep * BS;
                if(A_SendOrderEx(sym,iif(BS==1,Enum_Buy,Enum_Sell),Enum_Entry,Lots,CurGridPrice,ordIds))
                {
                    LogFile("网格布单,第"+text(gridCnt)+"格....");
                    LogFile("CurGridPrice= "+text(CurGridPrice));
                    gridCnt = gridCnt + 1;
                }
            }
        }
    }

    //委托更新事件函数,参数ord表示更新的委托结构体
    OnOrder(OrderRef ord)
    {
        LogFile("【OnOrder】"+sym);
        If(ord.status == Enum_Declared)
        {
            LogFile("  挂单已报 !!");
            LogFile("    OrderId = "+Text(ord.orderId));
            LogFile("    price = "+Text(ord.price));
        }
        if(ord.status==3)
        {
            LogFile("  挂单被废 !!继续布单");
            LogFile("    price = "+Text(ord.price));
            A_SendOrderEx(ord.symbol,iif(BS==1,Enum_Buy,Enum_Sell),Enum_Entry,ord.volume,ord.price,ordIds);
        }
    }
    
    
    OnFill(FillRef ordFill)
    {
        LogFile("【OnFill】"+ordFill.symbol);
        LogFile("  委托成交!!"+Text(ordFill.fillVolume)+"手");
        LogFile("    OrderId = "+Text(ordFill.orderId));
        LogFile("    OrdPrice = "+Text(ordFill.price));
        LogFile("    FillPrice = "+Text(ordFill.fillPrice));

        
        // 如果开仓挂单成交了,则挂止盈单
        If(ordFill.combOffset==Enum_Entry)
        {
            TPPrice = ordFill.price + GridStep * BS;
            A_SendOrderEx(ordFill.symbol,iif(BS==1,Enum_Sell,Enum_Buy),Enum_Exit,Lots,TPPrice,ordIds);
            LogFile("-> 开仓挂单成交,挂止盈单。 理论网格价 = "+Text(ordFill.price)+", 止盈价格 = "+Text(TPPrice));
        }
        Else
        {
            REPrice = ordFill.price - GridStep * BS;
            A_SendOrderEx(ordFill.symbol,iif(BS==1,Enum_Buy,Enum_Sell),Enum_Entry,Lots,REPrice,ordIds);
            LogFile("-> 止盈单成交,继续按原网格价挂单。 理论网格价 = "+Text(REPrice));
        }
    }


//------------------------------------------------------------------------
// 编译版本    2021/12/01 214820
// 版权所有    tblaocai
// 更改声明    TradeBlazer Software保留对TradeBlazer平台
//            每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

kyover

纯碱代码是209,不是2209,而且交易所后缀不是SHFE,是郑商所的后缀。

想要获取正确的合约名,可以看数据中心里的属性信息,或者写一个公式 comentary(symbol)

2022-04-14 07:06
您未登录,请先 登录注册 后发表评论
顶部