#pine-script
Вопрос:
видео —> >https://imgur.com/UQi9HDN
Вопрос
Приведенный ниже код выдаст следующую ошибку: Неперехваченная ошибка: Значение равно null.
Это происходит, когда вход и закрытие происходят на одном и том же баре и только в режиме реального времени. Это на графике 1м.
Согласно фотографии, на свечах 1 и 2, как только произошел выход, эти ошибки начали происходить, и график стал пустым. Все, что я видел, — это свечи. Через минуту или на следующем баре все вернулось.
Ожидаемое Поведение
Чтобы иметь возможность покупать и продавать на одном и том же баре без проблем.
Код
//@version=4
strategy(title="Real-time set up", overlay=true, calc_on_every_tick=true, pyramiding=0, currency="USD", initial_capital=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// helpers
convertToTicks(num) => num / syminfo.mintick
convertTicksToClose(num) => num * syminfo.mintick
getProfitAndLossTargets(p, l) =>
pt = p / 100
lt = l / 100
testProfitTargetTicks = convertToTicks(close * (1 pt))
testProfitTarget = convertTicksToClose(testProfitTargetTicks)
testLossTargetTicks = convertToTicks(close * (1 - lt))
testLossTarget = convertTicksToClose(testLossTargetTicks)
[testProfitTarget, testLossTarget]
inDateRange = (time >= timestamp(syminfo.timezone, 2021, 6, 8, 0, 0))
isAnOpenTrade = strategy.opentrades == 0 ? false : true
varip profitTarget = 0.0
varip stopTarget = 0.0
varip int posCloseTime = time
bars_elapsed = 2 * 60000 // 2 bars
if inDateRange and (time - posCloseTime) > bars_elapsed
if isAnOpenTrade == false
[profit, stop] = getProfitAndLossTargets(.1, .1) // 1 equals 1%
profitTarget := profit
stopTarget := stop
strategy.entry("xx", strategy.long, comment="Test Entry")
else if isAnOpenTrade and close >= profitTarget
posCloseTime := time
strategy.close("xx", strategy.long, comment="Test Profit")
else if isAnOpenTrade and close <= stopTarget
posCloseTime := time
strategy.close("xx", strategy.long, comment="Test Stop Loss")
plot(profitTarget, title="profit", color=color.green)
plot(stopTarget, title="loss", color=color.red)
Ответ №1:
Это должно дать вам ту прохладу, которую вы хотите. Сохраните время, когда вы выходите, и оцените его как условие следующей записи.
var int posCloseTime = time
if inDateRange and time - posCloseTime >= 900000
if isAnOpenTrade == false
strategy.entry("xx", strategy.long, comment="Test Entry")
else if isAnOpenTrade and close >= close[10]
posCloseTime := time
strategy.close("xx", strategy.long, comment="Test Profit")
else if isAnOpenTrade and close <= close[10]
posCloseTime := time
strategy.close("xx", strategy.long, comment="Test Stop Loss")
Комментарии:
1. Привет, спасибо за отзыв. Похоже, ваш подход к охлаждению действительно работает. Я обновил исходный пост фотографией, обновил пример кода и описание ошибки, которая не исчезла. Пожалуйста, имейте в виду, что это происходит в режиме реального времени (calc_on_ever_tick=true). Поэтому, как только произойдет покупка, если на том же баре произойдет продажа, вы увидите ошибку в консоли, и график как бы взорвется. Не знаю почему… Есть какие-нибудь идеи?
2. Извините, к сожалению, похоже, что это известная ошибка, и исправление находится в стадии разработки