0% found this document useful (0 votes)
51 views5 pages

Message

Uploaded by

nourchip95
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
51 views5 pages

Message

Uploaded by

nourchip95
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

// This source code is subject to the terms of the Mozilla Public License 2.

0 at
https://mozilla.org/MPL/2.0/
// © Matb09

//@version=5
strategy('Opening Range & Daily and Weekly Pivots - Strategy - pineconnector - V2',
shorttitle='ORB + Pivots - MT5 - V2', overlay=true)

/////////////// Strategy Inputs


pine_id = input.string('', title="pineconnector License ID")
pine_pct = input.float(defval = 1, title = "Balance % risk at every trade (1 means
1%)")

close_end_day = input.bool(title="Close trade at the end of the day", defval=true,


group = "Strategy settings")
threshold = input.float(defval=2, title="% max ORB", group = "Strategy settings")
use_trailing = input.bool(defval=false, title="Use trailing SL", group = "Strategy
settings")
use_ema_filter = input.bool(defval=false, title="Use EMA as filter", group =
"Strategy settings")
// use_dailybias_filter = input.bool(defval=false, title="Use ICT Daily Bias as
filter", group = "Strategy settings")
plot_ema_filter = input.bool(defval=false, title="Plot EMA as filter", group =
"Strategy settings")
ema_length = input.int(defval=50, title="EMA filter length", group = "Strategy
settings")
rr = input.float(defval=3.0, title="R:R", group = "Strategy settings")
risk_pct = input.float(defval=1.0, title="Risk %", group = "Strategy settings") /
100
ny = input(title="Time Filter", defval="0900-1300", tooltip="After this time it
won't open even if there is a breakout.")

// Strategy Logic //
KZNY = time("D", ny)
kzny_session = na(KZNY) ? na : color.green
bgcolor(kzny_session, transp=80)

ema = ta.ema(close, ema_length)


plot(plot_ema_filter ? ema : na, color=color.yellow)

// Flat Market //
FMfilter = input.bool(defval=false, title='Enable Flat Market Filter?', group="Flat
Market filter")
invert_FMfilter = input.bool(defval=false, title='Inverse Flat Market Filter?',
group="Flat Market filter")
PlotFMfilter = input.bool(defval=false, title='Plot Flat Market Filter?',
group="Flat Market filter")
FMBBlength = 20
FMBBsrc = close
FMBBmult = 2 //input.float(2.0, minval=0.001, maxval=50, title="StdDev")
FMBBbasis = ta.sma(FMBBsrc, FMBBlength)
FMBBdev = FMBBmult * ta.stdev(FMBBsrc, FMBBlength)
FMBBThreshold_Width = input.float(0.8, minval=0, maxval=10, step=0.05, title="BB
Threshold Width %", tooltip='Wont enter trades if BB width less than this %',
group="Flat Market filter")
//BBThreshold_Width = FMBBThreshold_Width / 1000

//Bollinger Bands & Width calcul


FMBBupper = FMBBbasis + FMBBdev
FMBBlower = FMBBbasis - FMBBdev
//FMbbw = (FMBBupper-FMBBlower)/FMBBbasis
FMWperc = math.abs((FMBBupper-FMBBlower)/FMBBbasis) * 100
//Flat Zone color change
FMBBcolor = FMWperc > FMBBThreshold_Width ? color.lime : color.red
FMBackBBcolor = FMWperc > FMBBThreshold_Width ? color.rgb(33, 250, 243, 90) :
color.rgb(250, 5, 10, 90)

//Display Indicator
plot(PlotFMfilter ? FMBBbasis:na, title="Basis", color=#FF6D00)
BBp1 = plot(PlotFMfilter ?FMBBupper :na, "Upper", color=FMBBcolor)
BBp2 = plot(PlotFMfilter ?FMBBlower:na, "Lower", color=FMBBcolor)
fill(BBp1, BBp2, title = "Background", color=FMBackBBcolor)

//Alerts
AlertFlatflag = FMBBThreshold_Width > FMWperc ? true : false
AlertNotFlatflag = FMBBThreshold_Width > FMWperc ? false : true
//// End Flat Makert ////

/// Daily Bias ICT ///


// YesterdayClose = request.security(syminfo.tickerid, 'D', close[1],
lookahead=barmerge.lookahead_on)
// YesterdayHigh_2 = request.security(syminfo.tickerid, 'D', high[2],
lookahead=barmerge.lookahead_on)
// YesterdayLow_2 = request.security(syminfo.tickerid, 'D', low[2],
lookahead=barmerge.lookahead_on)
// YesterdayClose_2 = request.security(syminfo.tickerid, 'D', close[2],
lookahead=barmerge.lookahead_on)
// YesterdayOpen_2 = request.security(syminfo.tickerid, 'D', open[2],
lookahead=barmerge.lookahead_on)

// daily_bias_long = use_dailybias_filter ? ((YesterdayClose_2 < YesterdayOpen_2


and YesterdayClose > YesterdayLow_2) or (YesterdayClose_2 > YesterdayOpen_2 and
YesterdayClose > YesterdayHigh_2)) : true
// daily_bias_short = use_dailybias_filter ? ((YesterdayClose_2 < YesterdayOpen_2
and YesterdayClose < YesterdayLow_2) or (YesterdayClose_2 > YesterdayOpen_2 and
YesterdayClose < YesterdayHigh_2)) : true

/// End Daily Bias ICT ///

// OBR Logic //
sessionInput = input.session("0930-1000", title="ORB Timeframe", group="OBR
settings")
t = time(timeframe.period, sessionInput)

in_session = not na(t)


is_first = in_session and not in_session[1]

var float orb_high = 0.0


var float orb_low = 0.0
var bool ema_filter_long = na
var bool ema_filter_short = na
var bool flat_market = na

if is_first
orb_high := high
orb_low := low
ema_filter_long := use_ema_filter ? open > ema : true
ema_filter_short := use_ema_filter ? open < ema : true
flat_market := FMfilter ? (invert_FMfilter ? FMWperc > FMBBThreshold_Width :
FMWperc < FMBBThreshold_Width) : true
else
orb_high := orb_high[1]
orb_low := orb_low[1]
if high > orb_high and in_session
orb_high := high
if low < orb_low and in_session
orb_low := low

plot(orb_high, style=plot.style_circles, color = close > orb_high ? color.rgb(168,


255, 17) : color.blue, title = "ORB High", linewidth = 1)
plot(orb_low, style=plot.style_circles, color = close < orb_low ? color.rgb(199,
55, 125) : color.white, title = "ORB Low", linewidth = 1)
/////////////////////////////////////

///////////// ATR
atrPeriod = input.int(title='ATR Period', defval=14, minval=1, group = "ATR
Inputs")
srcAtr = input(title='Source Upper', defval=close, group = "ATR Inputs")
atrMultiplier = input.float(title='ATR Multiplier Upper', defval=2.2, group = "ATR
Inputs")
atr = ta.atr(atrPeriod)
atr_low = srcAtr - atr * atrMultiplier
atr_up = srcAtr + atr * atrMultiplier

var stop_value = 0.0


var tp_value = 0.0
var starting_balance = 100000.0

is_in_session = time(timeframe.period, ny + ":1234567")

// Define input checkboxes for each day of the week


var bool mon = input(true, title="Monday", group="Day Filters")
var bool tue = input(true, title="Tuesday", group="Day Filters")
var bool wed = input(true, title="Wednesday", group="Day Filters")
var bool thu = input(true, title="Thursday", group="Day Filters")
var bool fri = input(true, title="Friday", group="Day Filters")

in_days = (dayofweek == dayofweek.monday ? mon : false) or (dayofweek ==


dayofweek.tuesday ? tue : false) or (dayofweek == dayofweek.wednesday ? wed :
false) or (dayofweek == dayofweek.thursday ? thu : false) or (dayofweek ==
dayofweek.friday ? fri : false)

isNewDay = ta.change(dayofmonth)

max_orb = ((orb_high - orb_low) * 100) / close < threshold

BarsSinceLastclose() =>
bar_index - strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1)

buy_sig = close > orb_high and strategy.position_size == 0 and is_in_session and


ema_filter_long and (ta.barssince(isNewDay) < BarsSinceLastclose() or
strategy.closedtrades == 0) and in_days and max_orb and flat_market
sell_sig = close < orb_low and strategy.position_size == 0 and is_in_session and
ema_filter_short and (ta.barssince(isNewDay) < BarsSinceLastclose() or
strategy.closedtrades == 0) and in_days and max_orb and flat_market

if buy_sig and atr_low


stop_value := atr_low
tp_value := close + ((close - stop_value) * rr)
position_size = ((starting_balance * risk_pct) / (close - stop_value)) / 1
strategy.entry("Long", strategy.long, qty=position_size)
strategy.exit("Long", stop = stop_value, limit = tp_value)
alert(str.tostring(pine_id)+ ',buy,' +syminfo.ticker+ ',sl='
+str.tostring(stop_value)+ ',tp=' +str.tostring(tp_value)+ ',risk=' +
str.tostring(pine_pct), alert.freq_once_per_bar_close)

if sell_sig and atr_up


stop_value := atr_up
tp_value := close - ((stop_value - close) * rr)
position_size = ((starting_balance * risk_pct) / (stop_value - close)) / 1
strategy.entry("Short", strategy.short, qty=position_size)
strategy.exit("Short", stop = stop_value, limit = tp_value)
alert(str.tostring(pine_id)+',sell,' +syminfo.ticker+ ',sl='
+str.tostring(stop_value)+ ',tp=' +str.tostring(tp_value)+
',risk='+str.tostring(pine_pct), alert.freq_once_per_bar_close)

is21h = time("D", "1430-1500")

if is21h and close_end_day


strategy.close_all()
alert(str.tostring(pine_id)+',closeall,' +syminfo.ticker,
alert.freq_once_per_bar_close)

if use_trailing
if strategy.position_size > 0 and atr_low > stop_value
stop_value := atr_low
strategy.exit("Long", stop = stop_value, limit = tp_value)
alert(str.tostring(pine_id)+',newsltplong,' +syminfo.ticker+ ',sl='
+str.tostring(stop_value), alert.freq_once_per_bar_close)
if strategy.position_size < 0 and atr_up < stop_value
stop_value := atr_up
strategy.exit("Short", stop = stop_value, limit = tp_value)
alert(str.tostring(pine_id)+',newsltpshort,' +syminfo.ticker+ ',sl='
+str.tostring(stop_value), alert.freq_once_per_bar_close)

plot(strategy.position_size != 0 ? strategy.position_avg_price : na, title="Entry",


color=color.white, style=plot.style_linebr)
plot(strategy.position_size != 0 ? stop_value : na, title="Stop", color=color.red,
style=plot.style_linebr)
plot(strategy.position_size != 0 ? tp_value : na, title="TP 1", color=color.green,
style=plot.style_linebr)

// stuff to keep useless //


// YesterdayHigh = request.security(syminfo.tickerid, 'D', high[1],
lookahead=barmerge.lookahead_on)
// YesterdayLow = request.security(syminfo.tickerid, 'D', low[1],
lookahead=barmerge.lookahead_on)
// LastWeekHigh = request.security(syminfo.tickerid, 'W', high[1],
lookahead=barmerge.lookahead_on)
// LastWeekLow = request.security(syminfo.tickerid, 'W', low[1],
lookahead=barmerge.lookahead_on)

You might also like