我正在尝试创建一个非常简单的 MA 交叉策略(仅限多头),我想在固定止损水平或满足我的退出条件时退出交易。出于这个原因,我使用 strategy.order 函数退出我的交易。但是,显然有些问题是错误的,因为还发起了一些空头交易......在这里您可以找到代码中最重要的部分:
//strategy conditions & variables
ordersize=floor(strategy.equity/close)
trendfilter = RSI_w > i_RSI_TH ? 1 : 0
longCondition = crossover(shortMA,longMA)
exitCondition = crossover(longMA,shortMA)
stopLoss = float(na)
stopLoss := strategy.position_size[0]>strategy.position_size[1] ? strategy.position_avg_price - (i_atr_mult * atr) : strategy.position_size>0 ? stopLoss[1] : na
// strategy entry & exits
strategy.entry(id="going long", long=true, qty=ordersize, when=longCondition and TimeWindow and trendfilter>0)
strategy.order(id="stop loss", long=false, stop=stopLoss, oca_name='L', oca_type=strategy.oca.cancel, qty=strategy.position_size, when=strategy.position_size > 0 and TimeWindow)
strategy.order(id="exit long", long=false, oca_name='L', oca_type=strategy.oca.cancel, qty=strategy.position_size, when= exitCondition and strategy.position_size > 0 and TimeWindow)
所以在我的逻辑中,第一个 strategy.order 函数只能在 strategy.position_size > 0 时打开交易。这应该避免做空订单,但显然不是。当价格触及 SL 水平时,即使未进行未平仓交易,也会发起空头交易……有人可以解释一下这是为什么吗???甚至更好的是,我如何调整我的代码以避免这些短条目?这对我有很大帮助!!
回顾一下:负责这些简短条目的代码行是:
strategy.order(id="stop loss", long=false, stop=stopLoss, oca_name='L', oca_type=strategy.oca.cancel, qty=strategy.position_size, when=strategy.position_size > 0 and TimeWindow)