代码显示不能订阅K线是什么问题
//------------------------------------------------------------------------ // 简称: 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公式修改和重写的权利 //------------------------------------------------------------------------