Сценарий Pine — попытка добавить стоп-лосс со значением, основанным на вычислении

#pine-script

#сценарий pine

Вопрос:

Я пытаюсь добавить стоп-лосс к вычисленному значению. Значение стоп-лосса должно быть вычисленным значением «вверх». Если я использую приведенный ниже код, мой стоп-лосс будет выше моего длинного входа, и я не уверен, что это правильное значение.

 Periods = input(title="ATR Period", type=input.integer, defval=10)

src = input(hl2, title="Source")

Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)

changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)

showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)

highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)

//////

atr2 = sma(tr, Periods)

atr= changeATR ? atr(Periods) : atr2

up=src-(Multiplier*atr)

up1 = nz(up[1],up)

up := close[1] > up1 ? max(up,up1) : up

trend = 1

trend := nz(trend[1], trend)

trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)

buySignal = trend == 1 and trend[1] == -1

//// Stop loss calculation

Stoplosspercent = if buySignal
    (strategy.position_avg_price - up)/strategy.position_avg_price

/// Exit long

strategy.exit("long exit", "long", profit = strategy.position_avg_price*5/100/syminfo.mintick, loss = strategy.position_avg_price*Stoplosspercent/100/syminfo.mintick)
 

Ответ №1:

Очень жаль, что многие пользователи не читают официальную ссылку на pine:

  • потеря (ряд int / float) Необязательный параметр. Стоп-лосс (указывается в тиках).
  • стоп (ряд int / float) Необязательный параметр. Стоп-лосс (требует определенной цены).
  • прибыль (ряд int / float) Необязательный параметр. Цель прибыли (указывается в тиках).
  • limit (ряд int / float) Необязательный параметр. Цель прибыли (требуется определенная цена).

В вашем случае вам нужно настроить limit stop параметры amp; вместо profit amp; loss соответственно.

Комментарии:

1. Спасибо за помощь, я ценю. Пожалуйста, потерпите меня, поскольку я только вчера начал кодировать. Я внес изменения, которые вы рекомендовали, и это устраняет половину проблем. Спасибо.

2. Оставшаяся проблема заключается в том, что, поскольку для каждого бара выполняется постоянный расчет, если я изменю exit на stop = up, тогда стоп-лосс перемещается вверх с каждой свечой, где он должен оставаться постоянным. Как я могу это исправить?

3. Пожалуйста, добавьте свой последний фактический исходный код скрипта и отформатируйте его как code (вкладки не будут «съедены»). Короче говоря: вам нужно создать var float Stoplosspercent и изменить его при некоторых необходимых вам условиях: if positionOpenedOrSomethingElse ntStoplosspercent :- ...

4. Спасибо, мне удалось исправить это с помощью: значение = закрыть, если buySignal и закрыть> значение ema2: = еще больше, если sellSignal и закрыть < значение ema2: = dn значение else: = nz(значение [1]) profitbuy = закрыть, если buySignal и закрыть > ema2 profitbuy := ((закрыть -значение) * 2) закрыть else profitbuy:= nz(profitbuy[1]) profitsell = закрыть, если sellSignal и закрыть <ema2 profitsell:= закрыть — ((значение -закрыть) * 2) else profitsell:= nz(profitsell[1])