#pine-script #pine-script-v4
Вопрос:
Я тестирую торговые стратегии на tradingview и использую редактор pine для их программирования (с помощью примеров и видео на YouTube). До сих пор я сделал несколько таких, которые работают с точки зрения правильных входов и выходов и т. Д. Каждый раз, когда я привожу его в порядок, я стараюсь сделать его немного сложнее.
Последний, над которым я работаю, похоже, ничего не делает. На экране «Тестер стратегий» вообще нет сделок. Я снова и снова просматривал код, но не могу понять, почему.
Вот что я нахожу странным:
- У меня есть несколько графиков в конце для «Цены остановки торговли» и «Целевой цены торговли», и они строятся каждый раз, когда у меня есть правильная настройка для входа. Таким образом, он распознает записи.
- Я не менял части 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. Изменение его обратно на долгосрочную стратегию=. коротко в разделе «Попробуйте»: часть вашего поста дала тот же результат, что и раньше. С уважением, Корова