//------------------------------------------------------------------------
// 简称: 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简单的讲,就是第一根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线,一个在策略单元