I want to use the Session Criteria for limiting the Strategy in her active time.
As I know it should be working with the Session function, but something with my logic is not right.
i_Handelszeit = input.session(title="Haupthandelszeit", defval = "0700-2000")
// Check filter(s)
isInSession(_sess) => not na(time(timeframe.period, i_Handelszeit))
f_dateFilter = time >= i_startTime and time <= i_endTime and isInSession(i_Handelszeit)
// Check buy/sell conditions
buyCondition = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter
----------------------------------
Here the full code ... not my proberty.
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ZenAndTheArtOfTrading / www.PineScriptMastery.com
// @version=5
strategy("Simple Pullback Strategy",
overlay=true,
initial_capital=50000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100, // 100% of balance invested on each trade
commission_type=strategy.commission.cash_per_contract,
commission_value=0.005) // Interactive Brokers rate
// Get user input
i_ma1 = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2 = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime = input.time(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime = input.time(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")
i_Handelszeit = input.session(title="Haupthandelszeit", defval = "0700-2000")
// Get indicator values
ma1 = ta.sma(close, i_ma1)
ma2 = ta.sma(close, i_ma2)
// Check filter(s)
isInSession(_sess) => not na(time(timeframe.period, i_Handelszeit))
f_dateFilter = time >= i_startTime and time <= i_endTime and isInSession(i_Handelszeit)
// Check buy/sell conditions
var float buyPrice = 0
buyCondition = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter
sellCondition = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1])
stopDistance = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition = strategy.position_size > 0 and stopDistance > i_stopPercent
// Enter positions
if buyCondition
strategy.entry(id="Long", direction=strategy.long)
if buyCondition[1]
buyPrice := open
// Exit positions
if sellCondition or stopCondition
strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
buyPrice := na
// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)
This code is working but is not limiting the strategy.
enter image description here
In the Image you can see that the Strategy is still working between 20 o’clock and 7 o’clock in the morning.
It is ignored.
>Solution :
It works fine. However, it will work based on your exchange’s timezone and not your local timezone.
I added a bgcolor() to see what’s happening.
If you want to use a custom timezone, you can use the third argument of time() which is timezone.
time(timeframe, session, timezone) → series int
timezone (series string) Timezone of the
sessionargument. Can only
be used when asessionis specified. Optional. The default is
syminfo.timezone. Can be specified in GMT notation (e.g. "GMT-5") or
as an IANA time zone database name (e.g. "America/New_York").
