网格如何修改间隔为动态间隔
请问如果要 让网格的间隔动态调整,比如上涨1%内 间隔都是5,连续上涨时,网格的间隔按等比间隔去开平,需要如何修改GridStep ?划线红体位置为自己修改上去 实盘模拟发单错误需要修改,其他部分为蔡老师编写的网格-名称: 示例--两小段代码轻松搞定网格交易法 //------------------------------------------------------------------------// 简称: fe_gridTrade2// 名称: 示例--两小段代码轻松搞定网格交易法// 类别: 公式应用// 类型: 用户应用// 输出: Void//------------------------------------------------------------------------// TBQ新版增加流控后,改写了一下。Params String sym(\"SA305.CZCE\"); // 交易的品种 Integer Lots(1); // 交易手数 //Integer GridStep(5); // 网格的大小 Integer GridLength(10); // 网格格数 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; // 网格挂单计数器 Global Integer N; // 幂指数 Global Integer GridStep; // 网格的大小 Numeric GridStartPrice; // 网格起始价格Defs //log输出 Integer LogFile(String str) { FileAppend(FormulaName()+\".txt\",\"[\"+Text(SystemDateTime())+\"] \"+ str); Return 0; }Events //初始化事件函数,策略运行期间,首先运行且只有一次 OnInit() { LogFile(\"【OnInit】\"+sym); SubscribeBar(sym,\"5m\",SystemDateTime()); SubscribeBar(sym,\"tick\",SystemDateTime()); 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; n = 1 ; flag = 1; } } } OnTimer(Integer id,Integer millsecs) { if(id==timeID1) { // 网格布单 if(gridCnt<=GridLength) { GridStartPrice = Q_Last; GridStep = Open[0] * 0.005*Power(1.2,N-1); 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; N = N + 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)); } }