Как совершить одну сделку в одном направлении тренда?

#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 )