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域的定义不符?

麻烦老师再次验证!!!

onbarclose和onbaropen功能bug反馈
ONBAROPEN
onbaropen和onbarclose为什么不执行呢?
OnBaropen
关于OnBarOpen
关于onbaropen 是否会有闪烁
OnBarOpen调仓的问题
关于OnBarOpen的问题
困惑中!onbaropen 和 onbarclose 不能订阅 BAR数据?
连续合约、主力合约、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);//老师要求

按照老师要求作了如上修改,出来的时间格式不对啊 (见下图)

消失的眼球

十三