entryprice取数问题
我有个公式,data0是5分钟,data1是日线。 我发现开仓是显示正常显示在5分钟图了,平仓条件就是close-entryprice>100,发现总是立刻平仓。 打印出来发现是entryprice=0.这个问题是多数据源导致的吗? 但是我只是在代码开头取日线数据使用data1,后面都是使用默认不加前缀的data0
我有个公式,data0是5分钟,data1是日线。 我发现开仓是显示正常显示在5分钟图了,平仓条件就是close-entryprice>100,发现总是立刻平仓。 打印出来发现是entryprice=0.这个问题是多数据源导致的吗? 但是我只是在代码开头取日线数据使用data1,后面都是使用默认不加前缀的data0
查看了你的代码运行情况 第一 你说开仓以后马上就平仓,这个在图上反应出来了,基本上第二根bar就会马上平仓。如果这个情况不属于你的策略意图,诊断你的平仓条件为什么会在不该满足的地方满足了。 第二,entry price的值。代码中,你commentary enryprice的位置放在了平仓后,既然已经执行完了平仓命令,自然entryprice就为0了。你试试在平仓命令前放置commentary entryprice的命令,那肯定就不是0了。 其他并没有发生什么有问题的东西,比如下图信号 在开仓第三根bar上entryprice显示正常,后面一根因为平仓了所以就显示为0了
我仅仅是想重现dual thrust的指标,由于需要取前N天的最高最低价格,所以data0设为5分钟,data1设为日线,就只有在代码最前面需要调用data1的前几个K线来取最高最低价格 其余代码都是按照只在data0上操作的。 看了老师提示,想会不会是data1上也会执行这个代码,导致平仓了。 然后我尝试把整个onbar里面的代码都加入了range[0:0],发现问题依旧,我也不知道是哪里把仓位平掉了
Params Numeric K1(0.1); Numeric May_D(2); Numeric lots(1); Vars Numeric BuysellRange(0);//声明数值变量BuyRange,初值为0,即上轨幅度。// Numeric BuyTrig(0);//声明数值变量BuyTrig,初值为0.// Numeric SellTrig(0);//声明数值变量SellTrig,初值为0.// Numeric HH;//声明数值变量HH。// Numeric LL;//声明数值变量LL。// Numeric HC;//声明数值变量HC。// Numeric LC;//声明数值变量LC。// Numeric BuyPosition;//声明数值变量BuyPosition,即买入价格。// Numeric SellPosition;//声明数值变量SellPosition,即卖出价格。// series<Numeric> middle; Series<Numeric> HighAfterEntry; Series<Numeric> LowAfterEntry; Series<Numeric> Day_N; Events onBar(ArrayRef<Integer> indexs) { range[0:0] { if(TrueDate(0)<>TrueDate(1)) { Day_N=Day_N[1]+1; } if(Day_N<May_D)Return; data1.HH=data1.highest(data1.high[1],May_D); data1.LL=data1.lowest(data1.low[1],May_D); data1.HC=data1.highest(data1.close[1],May_D); data1.LC=data1.lowest(data1.close[1],May_D); data0.HH= Data1.HH; data0.LL = data1.LL; data0.HC = data1.HC; data0.LC = data1.LC; /*PlotNumeric("HH",data0.HH); PlotNumeric("LL",data0.LL); PlotNumeric("HC",data0.HC); PlotNumeric("LC",data0.LC);*/ Commentary("marketposition = "+text(MarketPosition)); if (MarketPosition==0){ If((HH - LC) >= (HC - LL)) { BuysellRange = HH - LC; } Else { BuysellRange = HC - LL; } commentary("buysellrange="+text(BuysellRange)); BuyTrig = K1*BuysellRange;//计算幅度 Commentary("buytrig="+Text(BuyTrig)); SellTrig = K1*BuysellRange;//计算幅度 BuyPosition = data1.open+BuyTrig;//上轨,即开盘价 + BuyTrig。 SellPosition = data1.open-SellTrig;//下轨,即开盘价 - SellTrig。 PlotNumeric("BuyPosition",BuyPosition);//画线上轨。 PlotNumeric("SellPosition",SellPosition);//画线下轨。 middle = data1.open; If (close>=BuyPosition and close[1]<BuyPosition )//假如当前高价 >= 上轨。// { Buy(lots,close); //开仓买1手,价格为取开盘价与上轨对比的较大值,再加上设置的滑点数了。// LowAfterEntry = EntryPrice;//保存多头开仓价格; Return;//返回 } If(close<=SellPosition and close[1]>SellPosition) //假如当前低价 <= 下轨。// { SellShort(lots,close);//开仓卖出1手,价格为取开盘价与下轨对比的较小值,再加上设置的滑点数了。// HighAfterEntry = EntryPrice;//保存空头开仓价格; Return;//返回 } }else if(MarketPosition>0 and BarsSinceEntry>0){ middle = middle[1]; if (low<middle){ Sell(0,low); Commentary("low<middle"); }Else if ((close - EntryPrice)> BuysellRange) { Sell(0,Close); Commentary("close-entryprice,entryprice="+text(Entryprice)); } }else if (MarketPosition<0 and BarsSinceEntry>0){ middle = middle[1]; if (high<middle){ BuyToCover(0,High); }else if ((EntryPrice-close)>BuysellRange){ BuyToCover(0,close); } } Commentary("middle="+text(middle)); Commentary("entryprice="+text(Entryprice)); } }
第一 函数分图层 第二 变成0 一定是执行过平仓语句 建议你先把单图层情况下的entryprice搞清楚再研究多图层
但也不是entryprice立刻就变成0,也有经过1~4根后再变成0 的,在1~4根内entryprice还是正常计算的。不知道这个是什么原因?
回复:没看到代码,盲猜你是不是把entryprice放在某个条件语句里了。