OnBarOPEN 和TimeDiffV2
// 简称: ZS39_2 // 名称: OPEN触发时间 // 类别: 公式应用 // 类型: 用户应用 // 输出: Void //------------------------------------------------------------------------ Vars Global Numeric StartTime; Series<Numeric> BAR0(0); // BAR索引 Global BOOL TimeCond;//实时行情 //Tick My_Tick1; //Tick My_Tick2; //Global Numeric TickTime(0);//图层2/Tick时间 //Global String Ticksymbol;//图层1/Tick时间 Global Array<Integer> OrderId;//单号 Defs//自定义函数 Integer LogFile(StringRef str)//日志函数 { IF (StrategyMode()==1) FileAppend("D:\\"+FormulaName()+"\\"+DATA2.Symbol()+".txt","["+Text(SystemDateTime())+"] "+ str+"/"+StrategyModeName); Return 0; } Events OnInit()//策略执行前的初始化事件,只运行一次。/可以订阅数据,数据准备等操作。 { SubscribeBar(Data0.Symbol,"5M",Data0.BeginDateTime);//图层1 SubscribeBar(relativesymbol,"1M",Data0.BeginDateTime);//图层2 } OnReady() { StartTime=SystemDateTime; //返回值为YYYYMMDD.HHMMSS LogFile("Ready时间="+TEXT(SystemDateTime())+"/图层0="+SymbolName+"/图层1="+Data1.Symbol+"/图层2="+Data2.Symbol); PrintClear; } OnBarOPEN(ArrayRef<Integer> indexs) { TimeCond=IsTradingTime(Symbol,SystemDateTime) AND QuoteStatus==Enum_QuoteStatus_RealTime; IF (!TimeCond) Return; If(ArrayFind(indexs,1)) { BAR0=CurrentBar(); Commentary("BAR0="+Text(BAR0)); Tick My_Tick1; GetTick(DATA1.symbol,My_tick1); //Numeric TickTime1=My_tick1.dateTime-DATE; TimeStamp TickTime1=My_tick1.dateTime; String Ticksymbol1=My_tick1.symbol; Numeric Diff1=TimeDiffV2(DATA1.Time,TickTime1);//时差1 LogFile("图层1/"+ticksymbol1+"/Time="+Text(DATA1.Time,9)+"/TickTime="+Text(TickTime1,9)+"/时差="+Text(Diff1,9)+"/BAR="+TEXT(BAR0)); IF (Diff1<0) LogFile("*******TickTime1提前/时差="+Text(Diff1,9)); } //Range[2:2] If(ArrayFind(indexs,2)) { BAR0=CurrentBar(); Commentary("BAR0="+Text(BAR0)); Tick My_Tick2; GetTick(DATA2.symbol,My_tick2); //Numeric TickTime2=My_tick2.dateTime-DATE; TimeStamp TickTime2=My_tick2.dateTime; String Ticksymbol2=My_tick2.symbol; Numeric Diff2=TimeDiffV2(DATA2.Time,TickTime2);//时差2 LogFile("图层2/"+ticksymbol2+"/Time="+Text(DATA2.Time,9)+"/TickTime="+Text(TickTime2,9)+"/时差="+Text(Diff2,9)+"/BAR="+TEXT(BAR0)); IF (Diff2<0) LogFile("TickTime2提前/时差="+Text(Diff2,9)); } IF (1==2) A_Buy(symbol,1,Q_AskPrice,OrderId );//不发单 IF (1==2) A_Sell(symbol,1,Q_BidPrice,OrderId );//不发单 } 之前的贴子回复太多了,重发一贴再次完善了测试代码如上TimeStamp TickTime1=My_tick1.dateTime; TimeStamp TickTime2=My_tick2.dateTime; 测试日志如下 图,问题仍然存在1、日志第10行,时差=0有问题(Diff22明明应该等于-2)。TimeDiffV2函数的准确性有问题吗?还是我的计算过程有误?如我有误请指出错误并给出正确计算方法2、日志第10行,触发时间点是在本BAR的TIME之前,尽管只提前了2毫秒,也是与OnBarOPEN域的定义不符?麻烦老师再次验证!!!