{
SellShort(1,Close);
}
If(MarketPosition == -1 && High > EntryPrice + 1* ATR)
{
BuyToCover(1,Close);
}
我用上面这个代码建空仓并设置了止损,今天出现了一个情况,前一根K线结束出现建空仓信号,当根K线开盘以最新对手价开了空仓,当根K线快速下跌以致K线的最高价减去最低价大于1个atr把空仓止损了。但是实际上当根K线的最高价就是开盘价,我的空仓建于当根K线开盘价位置。请教一下为什么会出现这个情况?
这个问题一般两种原因,1.数据的实时数据与历史数据存在细微差距导致的(数据是一个很复杂的存储),这个是几率很小,tb存在数据时会两者对比(这个要分清楚tb的运行机制,实时情况按tick运行,,历史数据逐bar运行),,2.策略有问题,比如不恰当的全局变量的使用,以及k线样本数对策略的影响等等,,,解决办法:这个问题可以用输出的办法解决,信号的机制是只要满足if里的条件判断就会出信号,只能用fileappend记录if判断里用到的变量,看看实时与历史对比哪个数据(变量)变了导致的信号实时与历史存在差异
https://www.tbquant.net/TrainDetail?id=464 //代码诊断
https://www.tbquant.net/TrainDetail?id=239 //信号闪烁产生的原因以及处理方法
https://www.tbquant.net/TrainDetail?id=371 //TB信号的运行原理
https://www.tbquant.net/TrainDetail?id=444 //避免未来数据的信号闪烁及偷价
A_SellAvgPrice 是实时A函数,只会使你的图表更混乱
我要解决实盘中的问题,这样能解决吗
算法不严谨
然后当根K线不要多个信号操作,也就是开仓操作当根K就禁止平仓了
不能开仓当根K线禁止平仓,因为如果方向反了还要止损平仓。我现在的问题是EntryPrice没有记录我的开仓价格,如果EntryPrice记录了我的开仓价格就不会出现止损平仓了,不知道为什么会这样?
图表系统不建议当根再操作,说明你交易的周期跟你的想法差距较大
EntryPrice好像都是K线的收盘价,我把 High > EntryPrice + 1* ATR中的EntryPrice改成A_SellAvgPrice,就是用High > A_SellAvgPrice + 1* ATR作为空头止损条件,这样在实盘中是不是就是以我的实际成交价为基准进行止损了?