我试图在我的策略中有两个出口,一个是部分获利,另一个是止损损失。我在互联网上发现了一些代码,我试图把它们组合在一起,但是跟踪停止损失是不起作用的。它的接缝与代码的顺序有关。如果我把执行后止损放在部分获利之前,尾随止损有效,但部分TP不起作用,我希望能得到一些帮助。谢谢。
//@version=5
strategy("BASE", overlay=true, initial_capital = 1000)
//######################################################################################## TIME RANGE ######################################################################################
FromDay=input.int(defval=18,title="FromDay",minval=1,maxval=31)
FromMonth=input.int(defval=8,title="FromMonth",minval=1,maxval=12)
FromYear=input.int(defval=2021,title="FromYear",minval=2016)
dateCond = (time >= timestamp('GMT+10', FromYear,FromMonth, FromDay, 00, 00))
//######################################################################################## TIME RANGE ######################################################################################
//######################################################################################## STRATEGY ########################################################################################
// 3 rsi strategy , when all of them are overbought we sell, and vice versa
if ta.crossover(ta.ema(close,20),ta.ema(close,100)) and dateCond
strategy.entry("BUY", strategy.long)
if ta.crossunder(ta.ema(close,20),ta.ema(close,100)) and dateCond
strategy.entry("SELL", strategy.short)
//######################################################################################## STRATEGY ########################################################################################
//######################################################################################## TRAILING STOP AND TAKE PROFIT #################################################################
//Trailing Stop
longTrailPerc = input.float(title='Trailing Long Loss (%)', minval=0.0, step=0.1, defval=1) * 0.01
shortTrailPerc = input.float(title='Trailing Short Loss (%)', minval=0.0, step=0.1, defval=1) * 0.01
longStopPrice = 0.0
shortStopPrice = 0.0
longStopPrice := if strategy.position_size > 0
stopValue = close * (1 - longTrailPerc)
math.max(stopValue, longStopPrice[1])
else
0
shortStopPrice := if strategy.position_size < 0
stopValue = close * (1 + shortTrailPerc)
math.min(stopValue, shortStopPrice[1])
else
999999
//################################################################### Partial Take Profit ############################
percentAsPoints(pcnt) =>
strategy.position_size != 0 ? math.round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
lossPnt = percentAsPoints(2)
strategy.exit("x1", qty_percent = 50, profit = percentAsPoints(5), comment = "Loss")//, loss = lossPnt)
strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(20), comment = "Loss")//, loss = lossPnt)
strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(30), comment = "Loss")//, loss = lossPnt)
strategy.exit("x4", profit = percentAsPoints(4), comment = "Loss")//, loss = lossPnt)
profitPercent(price) =>
posSign = strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0
(price - strategy.position_avg_price) / strategy.position_avg_price * posSign * 100
p1 = plot(profitPercent(high), style=plot.style_linebr, title = "open profit % upper bound")
p2 = plot(profitPercent(low), style=plot.style_linebr, title = "open profit % lower bound")
fill(p1, p2, color = color.red)
//####################################################################### Execution ################################
if strategy.position_size > 0
strategy.exit(id='Trailing', stop=longStopPrice, alert_message="close BTCUSDT a=usdm")
if strategy.position_size < 0
strategy.exit(id='Trailing', stop=shortStopPrice, alert_message="close BTCUSDT a=usdm")发布于 2022-09-23 06:31:22
尾随的SL代码看起来是正确的
您编写了相同的strategy.exit ID
if strategy.position_size > 0
strategy.exit(id='Trailing Long', stop=longStopPrice, alert_message="close BTCUSDT a=usdm")
if strategy.position_size < 0
strategy.exit(id='Trailing Short', stop=shortStopPrice, alert_message="close BTCUSDT a=usdm")2/在以下情况下,将不会执行x4出口,因为x1关闭了初始位置的50%,x2关闭了初始位置的25%,x3关闭了初始位置的25%。所以..。x4没有什么可以关闭的了
strategy.exit("x1", qty_percent = 50, profit = percentAsPoints(5), comment = "Loss")//, loss = lossPnt)
strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(20), comment = "Loss")//, loss = lossPnt)
strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(30), comment = "Loss")//, loss = lossPnt)
strategy.exit("x4", profit = percentAsPoints(4), comment = "Loss")//, loss = lossPnt)https://stackoverflow.com/questions/73823250
复制相似问题