Один из моих сценариев редактора Pine, похоже, не совершает сделок

#pine-script #pine-script-v4

Вопрос:

Я тестирую торговые стратегии на tradingview и использую редактор pine для их программирования (с помощью примеров и видео на YouTube). До сих пор я сделал несколько таких, которые работают с точки зрения правильных входов и выходов и т. Д. Каждый раз, когда я привожу его в порядок, я стараюсь сделать его немного сложнее.

Последний, над которым я работаю, похоже, ничего не делает. На экране «Тестер стратегий» вообще нет сделок. Я снова и снова просматривал код, но не могу понять, почему.

Вот что я нахожу странным:

  1. У меня есть несколько графиков в конце для «Цены остановки торговли» и «Целевой цены торговли», и они строятся каждый раз, когда у меня есть правильная настройка для входа. Таким образом, он распознает записи.
  2. Я не менял части strategy.entry или strategy.exit, которые я перенял у предыдущей стратегии, которая действительно работала

Надеюсь, кто-нибудь сможет мне помочь? Заранее благодарю вас!

(Кроме того, если вы видите что-то, что заставляет вас сказать «вау, это глупо», не стесняйтесь комментировать)

Корова

 // Previously 3 or more strong HA candles in same direction // Closed last HA with body between 40 and 60 percent of wick   //@version=4 strategy("Heikin Ashi Indecisive after strong move", overlay = true, initial_capital = 1000, default_qty_value = 2, default_qty_type = strategy.percent_of_equity)  // input from user stopMultiplier = input(title="Stop Loss ATR", type=input.float, defval=1.0, tooltip="Stop loss multiplier (x ATR)") rr = input(title="Risk:Reward", type=input.float, defval=1.0, step=0.5, tooltip="Risk:Reward profile")  // defined variables start = timestamp(2021, 10, 28, 0, 0) end = timestamp(2021, 11, 28, 0, 0) symbol = syminfo.tickerid period = "5" lookback = 2  // calculate atr atr = atr(14)  // get Heikin Ashi values heikinashiOpen = security(heikinashi(symbol), period, open) heikinashiClose = security(heikinashi(symbol), period, close) heikinashiHigh = security(heikinashi(symbol), period, high) heikinashiLow = security(heikinashi(symbol), period, low)  // define a green (rising) and red (falling) Heikin Ashi candle rising = heikinashiClose gt; heikinashiOpen falling = heikinashiClose lt; heikinashiOpen  // calculate candle- wick- and bodysizes candleSize = heikinashiHigh - heikinashiLow bodySize = heikinashiOpen gt; heikinashiClose ? heikinashiOpen - heikinashiClose : heikinashiClose - heikinashiOpen upperWick = heikinashiOpen gt; heikinashiClose ? heikinashiHigh - heikinashiOpen : heikinashiHigh - heikinashiClose lowerWick = heikinashiOpen gt; heikinashiClose ? heikinashiClose - heikinashiLow : heikinashiOpen - heikinashiLow  // define a Heikin Ashi with hard push in one direction hardRise = rising and (heikinashiLow == heikinashiOpen) hardFall = falling and (heikinashiHigh == heikinashiOpen)  // define HA end of move candle indecisiveCandle = upperWick gt; candleSize * 0.35 and lowerWick gt; candleSize * 0.35  // determine if we have a valid setup switchLongComing = (indecisiveCandle or rising) and hardFall[1] and hardFall[2] and hardFall[3] and not na(atr) switchShortComing = (indecisiveCandle or falling) and hardRise[1] and hardRise[2] and hardRise[3] and not na(atr)  // check if we have confirmation for a trade validLong = switchLongComing and strategy.position_size == 0 and barstate.isconfirmed validShort = switchShortComing and strategy.position_size == 0 and barstate.isconfirmed  // calculate stops and targets stopSize = atr * stopMultiplier lowestLow = lowest(low, lookback) longStopPrice = lowestLow - stopSize longStopDistance = close - longStopPrice longTargetPrice = close   (longStopDistance * rr) highestHigh = highest(high, lookback) shortStopPrice = highestHigh   stopSize shortStopDistance = shortStopPrice - close shortTargetPrice = close - (longStopDistance * rr)  // save stops and targets for trade var tradeStopPrice = 0.0 var tradeTargetPrice = 0.0 if validLong  tradeStopPrice := longStopPrice  tradeTargetPrice := longTargetPrice if validShort  tradeStopPrice := shortStopPrice  tradeTargetPrice := shortTargetPrice  // enter trades when a valid entry is found if time gt;= start and time lt;= end  strategy.entry(id="Long", long=strategy.long, when=validLong)  strategy.entry(id="Short", long=strategy.short, when=validShort)  // exit trades whenever a stop or target is hit strategy.exit("Long Exit", from_entry = "Long", limit = tradeTargetPrice, stop = tradeStopPrice, when = strategy.position_size gt; 0) strategy.exit("Short Exit", from_entry = "Short", limit = tradeTargetPrice, stop = tradeStopPrice, when = strategy.position_size lt; 0)  // graphical information plot(strategy.position_size != 0 or validLong or validShort ? tradeStopPrice : na, title = "Trade Stop Price", color = color.red, style = plot.style_linebr) plot(strategy.position_size != 0 or validLong or validShort ? tradeTargetPrice : na, title = "Trade Target Price", color = color.green, style = plot.style_linebr) inLongTrade = strategy.position_size gt; 0 inShortTrade = strategy.position_size lt; 0 notInTrade = strategy.position_size == 0 bgcolor(notInTrade == false ? inLongTrade ? color.green : color.red : color.white)  

Редактировать: После еще некоторого тестирования я обнаружил, что эта проблема не открытия позиций возникает на некоторых графиках, а не на других. Скрипт будет заключать сделки, например, на валютных парах, но не на большинстве фьючерсов или акций. До сих пор не понимаю, почему…

Ответ №1:

Попробуй:

 if validLong  tradeStopPrice := longStopPrice  tradeTargetPrice := longTargetPrice  strategy.entry(id="Long", long=strategy.long)   if validShort  tradeStopPrice := shortStopPrice  tradeTargetPrice := shortTargetPrice  strategy.entry(id="Short", short=strategy.short)  

И эм… Я вижу, что вы пропустили изменение «длинный» на «короткий» в части вашей логики входа; «длинный=стратегия.короткие»

 if time gt;= start and time lt;= end  strategy.entry(id="Long", long=strategy.long, when=validLong)  strategy.entry(id="Short", long=strategy.short, when=validShort)  

Дайте мне знать, если это поможет. Я только бегло просмотрел ваш код.

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

1. Привет, спасибо, что ответили! Я попробовал ваше решение, но сначала получил ошибку, из-за которой «короткая» метка не была распознана. Я думаю, что длинная в «длинной=стратегии. короткий» — это логическое значение для проверки направления входа, поэтому больше похоже на long=true или long=false. Изменение его обратно на долгосрочную стратегию=. коротко в разделе «Попробуйте»: часть вашего поста дала тот же результат, что и раньше. С уважением, Корова