下面代码,两个输出结果居然不一样,可能是什么原因呢?
{
Print("BAR="+TEXT(CurrentBar));
LogFile("BAR="+TEXT(CurrentBar));
}
尽管是多图层多周期,在同一个花括号下,应该是一样的啊。
先请老师做一个大概的判断,实在不行我再编测试代码请教老师。
一个典型的展示型问题:
用户认为贴一部分代码就说明问题了,实际上什么都没有说明
发了一个不可能有问题的代码
需要去猜可能出现问题的逻辑
我也想知道为什么
俺也是
估计数据没对齐吧
之前有个帖子
我把整个流程给他梳理过
不知道他有没有仔细看看
其实就按贴出来的两行代码,我是不知道楼主是怎么能判断出来两边执行出来的结果不一样的
晕😭好在不影响交易,再想代码方案(只是想让过程监控更清晰)
如果这两行代码
没有出问题的可能
应该是数据对齐没处理
且代码并非如此
经过验证,问题原因是:日志会登记两次(图表模式、策略模式)但是图表模式和策略模式下的CurrentBar取数不同。
不同模式下的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,"5M",Data0.BeginDateTime);//图层1
SubscribeBar(Data0.symbol,"1M",Data0.BeginDateTime);//图层2
}
OnReady()
{
LogFile("OnReady//"+SymbolName+"/时间="+TEXT(SystemDateTime()));
PrintClear;
}
OnBarOpen(ArrayRef<Integer> indexs)
{
Range[2:2]
{
Bool ret = IsStartBar();
if(ret)
{
PlotBool("创建本单元时间点",ret,L);
}
//BAR0=CurrentBar();
commentary( "BAR=" + TEXT(CurrentBar()));
Print("BAR=" + TEXT(CurrentBar())+"/时间"+TEXT(SystemDateTime)+StrategyModeName());
LogFile("1M/BAR0="+TEXT(CurrentBar())+"/时间"+TEXT(SystemDateTime)+StrategyModeName());
}
}//OnBarOpen
OnBar(ArrayRef<Integer> indexs)
{
Range[2:2]
{
IF (H>DATA1.H[1] AND A_BuyPosition<1)
A_Buy(symbol,1,Q_AskPrice,OrderId );
IF (L<DATA1.L[1] AND A_BuyPosition>0)
A_Sell(symbol,1,Q_BidPrice,OrderId );
}
}
难道又是打开k线的问题么....你如果调试策略那就不要用策略单元直接用k线图不好吗...
我要把策略日志和K线图对照啊,我要知道在哪根K线下单的
所以不是说了让你直接用k线图么?不要再用策略单元然后打开k线图不就没这个问题了么
好的,我现试试