// 简称: 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域的定义不符?
麻烦老师再次验证!!!

原帖子老师应该给你解释了,你现在是新问题还是老问题?

这能算是解释吗?
已请老马亲自来看了

原帖我是解释过了,正确的计算代码也截图发了,您觉得这不算解释,爱莫能助
Diff2=TimeDiffv2(TimeDiffV2(0,DATA2.Time),TickTime2);//时差你改了这一行代码,倒是标出来啊,我以为截图是我的原代码并告之错误原因
//TimeStamp TickTime2=My_tick2.dateTime;
Numeric TickTime2=DateTimeDiffv2(DATE,My_tick2.dateTime);//老师要求
String Ticksymbol2=My_tick2.symbol;
//Numeric Diff2=TimeDiffV2(DATA2.Time,TickTime2);
Numeric Diff2=TimeDiffv2(TimeDiffV2(0,DATA2.Time),TickTime2);//老师要求
按照老师要求作了如上修改,出来的时间格式不对啊 (见下图)


消失的眼球
十三