CurrentBar再次提问
//------------------------------------------------------------------------
// 简称: ZS40
// 名称: CurrentBar
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
Vars
	Global Array<Integer> OrderId;//单号
Defs//自定义函数
	Integer LogFile(StringRef str)//日志函数
	{
		IF (StrategyMode()==1)
		    FileAppend("D:\\"+FormulaName()+"\\"+DATA2.Symbol()+".txt","["+Text(SystemDateTime())+"] "+ str);
		Return 0;
	} 
	
Events
	 OnInit()//策略执行前的初始化事件,只运行一次。/可以订阅数据,数据准备等操作。
	{
		SubscribeBar(Data0.Symbol,"15M",Data0.BeginDateTime);//图层1
		SubscribeBar(relativesymbol,"1M",Data0.BeginDateTime);//图层2
	} 	
	OnReady()
	{
		LogFile("OnReady//"+SymbolName+"/时间="+TEXT(SystemDateTime()));
		PrintClear;
	}
	
	OnBarOpen(ArrayRef<Integer> indexs)
	{
      If(ArrayFind(indexs,0)) 
	  {
	  		LogFile("日/BAR0="+TEXT(DATA0.CurrentBar())+"/时间"+TEXT(DATA0.DATE)+StrategyModeName());
	  }
	  If(ArrayFind(indexs,1)) 
	  {
	  	    LogFile("15M/BAR0="+TEXT(DATA1.CurrentBar())+"/时间"+TEXT(DATA1.DATE+DATA1.Time)+StrategyModeName());
	  }
      If(ArrayFind(indexs,2)) 
	  {	
		LogFile("1M/BAR0="+TEXT(DATA2.CurrentBar())+"/时间"+TEXT(DATA2.DATE+DATA2.Time)+StrategyModeName());
	  }
	  
	}//OnBarOpen
	OnBar(ArrayRef<Integer> indexs)
	{
		Range[0:2]
		{
			commentary( "BAR=" + TEXT(CurrentBar()));
		}
		IF (1==2)	  A_Buy(symbol,1,Q_AskPrice,OrderId );//不发单
	    IF (1==2)   A_Sell(symbol,1,Q_BidPrice,OrderId );//不发单
	}	
	

上面是测试代码,下面是测试日志,再下面是策略K线打开的截图

日志中图层1(15M)的起点是20210823.09,此时BAR索引为0

截图中图层1(15M)的起点是20210707.00,此时BAR索引为0

上述两个索引不应该保持一致吗?是什么原因导致这个差异化呢?

收盘对比日志与K线图时发现,最后1根BAR(20250819.150000)的索引,日志与截图不一样

多周期问题,补充提问
CurrentBar输出问题
知道CurrentBar后,取值问题
关于CurrentBar实时取值
关于High的提问
CurrentBar 编译时 系统提示无法识别的字符串
提问关于交易信号的标识问题
网站视频暂停一段时间后不能再次播放
if(currentbar%10 == 5)这句怎么理解
昨天的情况再次出现

没看懂你是什么意思

currentbar简单的讲,就是第一根K线是0,从左往右就是0 1 2 3 4 5 6.....

commentary( "BAR=" + TEXT(CurrentBar()));

LogFile("15M/BAR0="+TEXT(DATA1.CurrentBar())

这两个CurrentBar值,不一样

commentary( "BAR=" + TEXT(CurrentBar()));

LogFile("15M/BAR0="+TEXT(DATA1.CurrentBar())

这两个CurrentBar值,不一样

你把这2个放一起。。。你上面也没这么写啊。

针对你这个内容,为什么会一样呢?我看你data0,data1周期都不相同

data0的curbar就是从data0的左边开始数

data1就是从data1的开始数

这2个怎么会一样?


然后针对你主贴的内容,你onbaropen里的写法几个图层对应关系你理得清楚吗,输出出发都是基于data0的

收盘核对如下

日志15M的BAR索引=29528

K线图15M的BAR索引=30555

难道又是我没说清楚问题?我再明确下问题:

图层0是日线(1000根BAR),图层1的CurrentBar值在不同环境下读取时存在错位(如下)

日志中图层1(15M)第一根BAR(CurrentBar=0)的时间是20210823.09

K线图中图层1(15M)第一根BAR(CurrentBar=0)的时间是20210707.00

请老师回答如下问题?

1、我所说的问题是否可以复现?

2、如果可以复现,那么问题产生的原因是什么?

3、如果问题的原因是测试代码有书写错误或逻辑不当,请指明并修正以便我再次测试。

谢谢!!!

我不是怀疑CurrentBar的准确性

我想问的是,为什么输出时会有不同结果?

我不知道怎么复现你上面的内容,看上去运行挺正常。

你log的位置和你图表是一样的吗

你图上和执行上到底有多少K线看得清楚吗?

你这种情况不如加载10根K线算一算。

日志中应该都是两次记录(一次图表交易、一次策略运行)你看的是图表交易,是与K线图一致的,但是你再看策略运行的记录,就与图表交易(K线图)不一致了

这样看比较清楚

我把日线设为10根也不行

看日志最后两行,索引数值也不等

图表交易的数字与K线图数字是一致的

是不是别的地方什么没处理对。。

你不会有2个单元同时在写一个文件吧


你这里标注了两种,一个图表交易 一个策略运行

说明有2个程序 一个在K线,一个在策略单元