添加停靠点 Pine 脚本

Add Stops Pine Script

正在尝试为我的交易视图回测添加止损。
每次我添加止损时,它要么被忽略,要么被止损并立即重新进入该位置。我想添加百分比止损和添加随移动平均线移动的止损或固定止损值的选项。

// @version = 5
strategy("Pairs Trading Moving Average", shorttitle = "Pairs Trading MA", overlay = true, process_orders_on_close = true, backtest_fill_limits_assumption = 0)

//          Inputs

long_short = input.string(title = "Long/Short?", options = ["Long", "Short", "Both"], defval = "Both" )
LEVERAGE = input.float(title="Leverage", defval=1)

maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "VWAP", "EMA", "SMMA (RMA)", "WMA", "VWMA", "HMA", "DEMA", "TEMA", "ZLEMA", "THMA", "EHMA"], group="MA Settings")
len = input(30, title="Length")
multiplier = input.float(title = "Stdev Multiplier", defval = 2)
src = input(hlc3, title="Source")
off_s = input(title="Offset Plot", defval=1)

startDate = input.int(title="Start Date",
     defval=1)
startMonth = input.int(title="Start Month",
     defval=1)
startYear = input.int(title="Start Year",
     defval=2018)
endDate = input.int(title="End Date",
     defval=1)
endMonth = input.int(title="End Month",
     defval=1)
endYear = input.int(title="End Year",
     defval=2025)

//          Moving Averages

vwap(src, len) => math.sum((src * volume), len) / math.sum(volume, len)
dema(src, len) => 2 * ta.ema(src, len) - ta.ema(ta.ema(src, len), len)
tema(src, len) => 3 * (ta.ema(src, len) - ta.ema(ta.ema(src, len), len)) + ta.ema(ta.ema(ta.ema(src, len), len), len)
zlema(src, len) =>
    lag = math.round((len - 1) / 2)
    ema_data = src + (src - src[lag])
    zl= ta.ema(ema_data, len)
ehma(src, len) =>  ta.ema(2 * ta.ema(src, len / 2) - ta.ema(src, len), math.round(math.sqrt(len)))
thma(src, len) =>  ta.wma(ta.wma(src,len / 3) * 3 - ta.wma(src, len / 2) - ta.wma(src, len), len)

ma(src, len, type) =>
    switch type
        "EHMA" => ehma(src, len)
        "THMA" => thma(src, len)
        "ZLEMA" => zlema(src, len)
        "TEMA" => tema(src, len)
        "DEMA" => dema(src, len)
        "SMA" => ta.sma(src, len)
        "VWAP" => vwap(src, len)
        "EMA" => ta.ema(src, len)
        "SMMA (RMA)" => ta.rma(src, len)
        "WMA" => ta.wma(src, len)
        "VWMA" => ta.vwma(src, len)
        "HMA" => ta.hma(src, len)

//          Variables

out = ma(src, len, maTypeInput)
above = out + (ta.stdev(src, len) * multiplier)
below = out - (ta.stdev(src, len) * multiplier)

inDateRange = (time >= timestamp(syminfo.timezone, startYear,startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))

//          Plots

plot(out, offset=off_s)
plot(above, color = color.red, offset=off_s)
plot(below, color = color.green, offset=off_s)

//          Position Sizing

long_qty = math.floor(strategy.equity * LEVERAGE / below)
short_qty = math.floor(strategy.equity * LEVERAGE / above)

//          Order Execution

if inDateRange
    if long_short == "Long"
        strategy.cancel_all()
        strategy.entry("Bullish IB", strategy.long, qty=long_qty, limit=below)
        strategy.exit("Bullish Exit","Bullish IB", limit=out)
    if long_short == "Short"
        strategy.cancel_all()
        strategy.entry("Bearish IB", strategy.short, qty=short_qty, limit=above)
        strategy.exit("Bearish Exit","Bearish IB", limit=out)
    if long_short == "Both"
        strategy.cancel_all()
        strategy.entry("Bearish IB", strategy.short, qty=short_qty, limit=above)
        strategy.exit("Bearish Exit","Bearish IB", limit=out)
        strategy.entry("Bullish IB", strategy.long, qty=long_qty, limit=below)
        strategy.exit("Bullish Exit","Bullish IB", limit=out)

给你:

if strategy.position_size >  0
   strategy.exit("Long", limit = strategy.position_avg_price * 1.02, stop = 
   strategy.position_avg_price * 0.99, comment = 'Long Exit')