Проблема с моей стратегией покупки, но не продажи в редакторе сосны

Я использую редактор pine для создания стратегии, которая покупает, когда линия D (зеленая линия) пересекает уровень 17,5, а затем продает, когда линия D пересекает уровень 78. Как вы можете видеть на графике, который я разместил, он должен покупать и продавать пару раз, но покупает только один раз и больше ничего не делает. Кажется, я не могу понять, чего мне не хватает. Нижняя часть кода — это то место, где я говорю, что нужно покупать и продавать в стратегии. Спасибо

strategy("stochastic")
length = input(21, minval=1, title="length")  
rsilength = input(21, minval=1, title="rsi length")  
smoothk = input(4, minval=1, title="smoothk")
smoothd = input(10, minval=1, title="smoothd")
rsi = rsi(close, rsilength)

sto = stoch(close,highest(length),lowest(length), length)
K = sma(sto,smoothk)
D = sma(K,smoothd)

//plot(rsi, title="rsi", color=color.black)
plot(D, title="%D",color=color.green)
plot(K, title="%K",color=color.red)

hline(78,title="upper limit", color=color.red)
hline(17, title="lower limit",color=color.blue)
//plot(sto, title = "sto",color=color.black)


// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 5, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 9, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === EXECUTION ===
shares = 10000/close
buy = crossunder(D,17.5)
sell = crossover(D,78)

strategy.entry("buy", shares, when = window() and buy)  // buy long when "within window of time" AND crossover
strategy.close("sell", when = window() and sell)                // sell long when "within window of time" AND crossunder         

Это должно покупать и продавать пару раз, как показано на картинке. https://ibb.co/37L0wSK Это ссылка, извините, у меня недостаточно представителей для публикации изображений .


person ColtonMSU    schedule 03.09.2019    source источник


Ответы (1)


В вашем вызове strategy.close() не использовался тот же идентификатор заказа, что и в вызове strategy.entry(). Я добавил маркеры в последние 3 строки (вы можете отключить их с помощью входных данных), чтобы показать, где выполняются ваши условия.

Примечание: убедитесь, что вы включили первую строку в скрипт при переносе скриптов Pine. Это директива компилятора, которая указывает, какую версию Pine использует код, поэтому это важно.

//@version=4
strategy("stochastic")
length = input(21, minval=1, title="length")  
rsilength = input(21, minval=1, title="rsi length")  
smoothk = input(4, minval=1, title="smoothk")
smoothd = input(10, minval=1, title="smoothd")
showMarkers = input(true, "Show Markers")

rsi = rsi(close, rsilength)

sto = stoch(close,highest(length),lowest(length), length)
K = sma(sto,smoothk)
D = sma(K,smoothd)

//plot(rsi, title="rsi", color=color.black)
plot(D, title="%D",color=color.green)
plot(K, title="%K",color=color.red)

hline(78,title="upper limit", color=color.red)
hline(17, title="lower limit",color=color.blue)
//plot(sto, title = "sto",color=color.black)


// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 5, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 9, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === EXECUTION ===
shares = 10000/close
buy = crossunder(D,17.5)
sell = crossover(D,78)

strategy.entry("buy", shares, when = window() and buy)  // buy long when "within window of time" AND crossover
strategy.close("buy", when = window() and sell)         // sell long when "within window of time" AND crossunder

plotshape(showMarkers and buy, "buy", shape.triangleup, location.bottom, color.green, 0, text = "buy", size = size.tiny)
plotshape(showMarkers and sell, "sell", shape.triangledown, location.top, color.maroon, 0, text = "sell", size = size.tiny)
bgcolor(showMarkers ? window() ? color.green : color.maroon : na)

введите здесь описание изображения

person PineCoders-LucF    schedule 03.09.2019
comment
Потрясающе, спасибо - person ColtonMSU; 03.09.2019