I am testing out a Stochastic Strategy on TradingView using Pine Editor. I have the code execute a long entry whenever the K line crosses over the D line and when K < 20. It should exit the long trade when the K line crosses under the D line. It should enter a short trade when the K line crosses under the D line and K > 80. It should exit the short trade when the K line crosses over the D line.
The issue: there are times when it should be exiting the trade but it doesn't. For example, it will enter a short trade when the K line crosses under the D line and K > 80, but several bars later the K line will cross back over the D line, but the short trade will not close. I saw another post here where they suggested using: close_entries_rule="ANY". However, this caused an issue with a lot of orders opening and closing immediately.
Here is the entire code, any help is appreciated in figuring out the issue!
//@version=4
strategy("Stochastic Strategy", overlay=false, default_qty_value=100, initial_capital=5000)//, close_entries_rule="ANY")
//strategy.risk.max_drawdown(value=10, type=strategy.percent_of_equity)
exit_all_trades = false
//current_hour = hour
//current_minute = minute
//plot(current_hour)
//plot(current_minute)
//if (current_hour = 15 and current_minute = 58.00)
// exit_all_trades = true
periodK = input(14, title="K", minval=1)
periodD = input(3, title="D", minval=1)
smoothK = input(3, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
plot(k, title="%K", color=color.blue)
plot(d, title="%D", color=color.red)
h0 = hline(80, "Upper Band", color=#606060)
h1 = hline(20, "Lower Band", color=#606060)
fill(h0, h1, color=#9915FF, transp=80, title="Background")
isLongEntry() => crossover(k, d) and k < 20
//isLongExit() => k < d
isLongExit() => crossunder(k, d)
isShortEntry() => crossunder(k, d) and k > 80
//isShortExit() => k > d
isShortExit() => crossover(k, d)
t = time(timeframe.period, "0830-1500")
session_open = na(t) ? false : true
//if (session_open)
strategy.entry("Long", strategy.long,100, when = isLongEntry())
//if (session_open)
strategy.entry("Short", strategy.short,100, when = isShortEntry())
//Close out position before the end of the session.
if not (session_open)
strategy.close("Long")
strategy.close("Short")
//intraday_sess = "0830-1500"
//t = time(timeframe.period, intraday_sess)
//sess_over = not na(t[1]) and na(t)
//strategy.close_all(when = sess_over)
//strategy.close_all(when=(hour==14 and minute==30),comment="force exit")
plotshape(isLongEntry(), style=shape.arrowup, color=color.green, location=location.bottom)
plotshape(isShortEntry(), style=shape.arrowdown, color=color.red, location=location.top)
Ignoring the commented lines - you coded to close the trades only when the session is over -
if not (session_open)
strategy.close("Long")
strategy.close("Short")
crossover
, crossunder
)isLongEntry
and isShortEntry
to variables instead of a function and added strategy.close
with the isLongExit
and isShortExit
arguments.//@version=4
strategy("Stochastic Strategy", overlay=false, default_qty_value=100, initial_capital=5000)//, close_entries_rule="ANY")
exit_all_trades = false
periodK = input(14, title="K", minval=1)
periodD = input(3, title="D", minval=1)
smoothK = input(3, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
plot(k, title="%K", color=color.blue)
plot(d, title="%D", color=color.red)
h0 = hline(80, "Upper Band", color=#606060)
h1 = hline(20, "Lower Band", color=#606060)
fill(h0, h1, color=#9915FF, transp=80, title="Background")
crossOver = crossover(k, d)
crossUnder = crossunder(k, d)
isLongEntry = crossOver and k < 20
isLongExit = crossUnder
isShortEntry = crossUnder and k > 80
isShortExit = crossOver
t = time(timeframe.period, "0830-1500")
session_open = na(t) ? false : true
if (session_open)
strategy.entry("Long", strategy.long,100, when = isLongEntry)
strategy.entry("Short", strategy.short,100, when = isShortEntry)
strategy.close("Long", when = isLongExit)
strategy.close("Short", when = isShortExit)
else
strategy.close_all()
bgcolor(session_open ? color.green : na)
plotshape(isLongEntry, style=shape.arrowup, color=color.green, location=location.bottom)
plotshape(isShortEntry, style=shape.arrowdown, color=color.red, location=location.top)