#pine-script #strategy-pattern
Вопрос:
Я пытаюсь решить проблему, чтобы сделать ее совершенной в долгосрочной перспективе, а не повторяться при достижении цели или остановки. Например, я открываю короткую сделку и не хочу, чтобы сделка открывалась снова при достижении тейк-профита (так как все условия для торговли выполнены), вместо этого я хочу, чтобы скрипт ждал следующего сигнала в противоположном направлении.
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © DavydovEV //@version=5 strategy("My Strategy", overlay=true, margin_long=100, margin_short=100) // Input settings SLfixed = input.float(0.5, "Stop loss", minval=0.1, maxval=100, step=0.1) TPfixed = input.float(1, "Take profit", minval=0.1, maxval=100,step=0.1) // Long/short condition longCondition = ta.sma(close, 14) gt; ta.sma(close, 28) if (longCondition) strategy.entry("My Long Entry Id", strategy.long) shortCondition = ta.sma(close, 14) lt; ta.sma(close, 28) if (shortCondition) strategy.entry("My Short Entry Id", strategy.short) longStop = strategy.position_avg_price*(100-SLfixed)/100 longProfit = strategy.position_avg_price*(100 TPfixed)/100 shortStop = strategy.position_avg_price*(100 SLfixed)/100 shortProfit = strategy.position_avg_price*(100-TPfixed)/100 strategy.exit("Exit","My Long Entry Id", stop=longStop, limit=longProfit, when=strategy.position_sizegt;0) strategy.exit("Exit","My Short Entry Id", stop=shortStop, limit=shortProfit, when=strategy.position_sizegt;0) // @AndreyD solution getLastPosSign() =gt; strategy.closedtrades gt; 0 ? math.sign(strategy.closedtrades.size(strategy.closedtrades-1)) : na plot(ta.sma(close, 14), color=color.green) plot(ta.sma(close, 28), color=color.red) plot( getLastPosSign(), style = plot.style_linebr )
Я уже задавал этот вопрос, и @AndreyD предложил следующее решение
getLastPosSign() =gt; strategy.closedtrades gt; 0 ? math.sign(strategy.closedtrades.size(strategy.closedtrades-1)) : na
К сожалению, мне не удалось прикрепить эту функцию к моему сценарию. В этом решении значение изменяется от -1 до 1 при изменении направления сделки. В этом случае я должен написать условия, что ЕСЛИ прошлая стоимость совпадает с текущей, то нет необходимости открывать сделку.
Я действительно не понимаю, подходит ли мне это решение или нет, поэтому я не смог реализовать его в своем сценарии.
Комментарии:
1. Можете ли вы поделиться информацией о тикере, бирже, временном кадре, дате диаграммы на своем скриншоте?
2. БР1! MOEX 5 минут 3 декабря, в прошлую пятницу.
Ответ №1:
Вам нужно использовать getLastPosSign()
результат с longCondition
и shortCondition
:
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © DavydovEV //@version=5 strategy("My Strategy", overlay=true, margin_long=100, margin_short=100) // Input settings SLfixed = input.float(0.5, "Stop loss", minval=0.1, maxval=100, step=0.1) TPfixed = input.float(1, "Take profit", minval=0.1, maxval=100,step=0.1) // @AndreyD solution getLastPosSign() =gt; strategy.closedtrades gt; 0 ? math.sign(strategy.closedtrades.size(strategy.closedtrades-1)) : na lastPos = getLastPosSign() canEnterLong = nz(lastPos) lt;= 0 canEnterShort = nz(lastPos) gt;= 0 // Long/short conditio longCondition = ta.sma(close, 14) gt; ta.sma(close, 28) if (longCondition and canEnterLong) strategy.entry("My Long Entry Id", strategy.long) shortCondition = ta.sma(close, 14) lt; ta.sma(close, 28) if (shortCondition and canEnterShort) strategy.entry("My Short Entry Id", strategy.short) longStop = strategy.position_avg_price*(100-SLfixed)/100 longProfit = strategy.position_avg_price*(100 TPfixed)/100 shortStop = strategy.position_avg_price*(100 SLfixed)/100 shortProfit = strategy.position_avg_price*(100-TPfixed)/100 strategy.exit("Exit","My Long Entry Id", stop=longStop, limit=longProfit) strategy.exit("Exit","My Short Entry Id", stop=shortStop, limit=shortProfit) plot(ta.sma(close, 14), color=color.green) plot(ta.sma(close, 28), color=color.red) plot( lastPos, style = plot.style_linebr )