0% found this document useful (0 votes)
38 views

xxxxxxxxxxx

The document contains a source code for the Gann Swing Chart version 3.0, designed for the MT5 platform. It includes various inputs for customizing the display of inside and outside bars, as well as multiple Exponential Moving Averages (EMAs). The code also features functions for calculating and plotting significant price levels and conditions based on historical price data.

Uploaded by

Mxh Mr
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)
38 views

xxxxxxxxxxx

The document contains a source code for the Gann Swing Chart version 3.0, designed for the MT5 platform. It includes various inputs for customizing the display of inside and outside bars, as well as multiple Exponential Moving Averages (EMAs). The code also features functions for calculating and plotting significant price levels and conditions based on historical price data.

Uploaded by

Mxh Mr
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/ 8

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

0 at
https://mozilla.org/MPL/2.0/
// © meomeo105
// Gann Swing Chart version 3.0
// MT5 version : www.mql5.com/en/market/product/112401
//@version=5
indicator('Gann Swing [Multi Layer]', shorttitle='Swing + 5EMA', overlay=true,
max_lines_count=500, max_boxes_count = 500, max_labels_count = 500)

//IOSB
IOSB = "TLPInOutSideBarSetting"
ISB = input(true,group =IOSB, title="showISB")
colorISB = input.color(color.rgb(250, 171, 0), inline = "ISB")
OSB = input(true,group =IOSB, title="showOSB")
colorOSB = input.color(color.rgb(56, 219, 255), inline = "OSB")

ZoneColor = input(defval = color.new(color.orange, 90),group =IOSB, title =


"Background Color")
BorderColor = input(defval = color.new(color.orange, 100),group =IOSB, title =
"Border Color")

/////////////////
var aCZ = array.new_float(0)

float highest = high[1]


float lowest = low[1]

if (array.size(aCZ) > 0)
highest := array.get(aCZ, 0)
lowest := array.get(aCZ, 1)

insideBarCondtion = low >= lowest and low <= highest and high >= lowest and high <=
highest

if ( insideBarCondtion == true )
array.push(aCZ, high[1])
array.push(aCZ, low[1])

if( array.size(aCZ) >= 2 and insideBarCondtion == false )


float maxCZ = array.max(aCZ)
float minCZ = array.min(aCZ)
box.new(bar_index - (array.size(aCZ) / 2) - 1, maxCZ, bar_index - 1, minCZ,
bgcolor = ZoneColor, border_color = BorderColor)
array.clear(aCZ)

//Inside Bars - Outside Bars


insideBar() => ISB and high <= high[1] and low >= low[1] ? 1 : 0
outsideBar() => OSB and (high > high[1] and low < low[1]) ? 1 : 0

//Inside and Outside Bars


barcolor(insideBar() ? color.new(colorISB,0) : na )
barcolor(outsideBar() ? color.new(colorOSB,0) : na )

//LCCM
// higherTf = timeframe.isminutes and timeframe.multiplier == 30 ? '240' :
timeframe.isminutes and timeframe.multiplier == 240 ? 'D' : 'D'
selectedTf = input.timeframe('D', title="Extra Timeframe")
// Khang cu + Ho tro
resistance = input(defval= 7, title="Số nến kiểm tra")
highlen = ta.pivothigh(high, resistance, resistance)
lowlen = ta.pivotlow(low, resistance, resistance)

high1 = ta.valuewhen(highlen, high[resistance], 0)


low1 = ta.valuewhen(lowlen,low[resistance], 0)

//res = plot(high1, color=high1 != high1[1] ? na : #00ced1, offset = -resistance)


//sup = plot(low1, color=low1 != low1[1] ? na : #dc143c, offset = -resistance)
plot(high1, color= #00ced1 ,style=plot.style_circles,offset = -resistance)
plot(low1, color= #dc143c, style=plot.style_cross,offset= -resistance)

// Input for EMAs and MAs


len1 = input(21, "EMA 1")
len2 = input(34, "EMA 2")
len3 = input(34, "EMA 3")
len4 = input(34, "EMA 4")
len5 = input(200, "EMA 5")
//len6 = input(400, "EMA 6")
//len7 = input(11, "MA 1")
//len8 = input(23, "MA 2")
//len9 = input(25, "MA 3")
//len10 = input(39, "MA 4")
//len11 = input(200, "MA 5")

src1 = input(close, "EMA 1 Source")


src2 = input(close, "EMA 2 Source")
src3 = input(close, "EMA 3 Source")
src4 = input(close, "EMA 4 Source")
src5 = input(close, "EMA 5 Source")
//src6 = input(close, "EMA 6 Source")
//src7 = input(close, "MA 1 Source")
//src8 = input(close, "MA 2 Source")
//src9 = input(close, "MA 3 Source")
//src10 = input(close, "MA 4 Source")
//src11 = input(close, "MA 5 Source")

// Calculate EMAs and MAs


ema1 = ta.ema(src1, len1)
ema2 = ta.ema(src2, len2)
ema3 = ta.ema(src3, len3)
ema4 = ta.ema(src4, len4)
ema5 = ta.ema(src5, len5)
//ema6 = ta.ema(src6, len6)
//ma1 = ta.sma(src7, len7)
//ma2 = ta.sma(src8, len8)
//ma3 = ta.sma(src9, len9)
//ma4 = ta.sma(src10, len10)
//ma5 = ta.sma(src11, len11)

// Plot EMAs and MAs


//olorEMA1 = input.color(color.aqua, '', inline = "EMA1")
plot(ema1, color=input.color(color.aqua, '', inline = "EMA 1"), linewidth=2,
title="EMA 1")
plot(ema2, color=input.color(color.aqua, '', inline = "EMA 2"), linewidth=1,
title="EMA 2")
plot(ema3, color=input.color(color.aqua, '', inline = "EMA 3"), linewidth=1,
title="EMA 3")
plot(ema4, color=input.color(color.aqua, '', inline = "EMA 4"), linewidth=1,
title="EMA 4")
plot(ema5, color=input.color(color.aqua, '', inline = "EMA 5"), linewidth=2,
title="EMA 5")
//plot(ema6, color=color.purple, linewidth=2, title="EMA 6")
//plot(ma1, color=color.orange, linewidth=2, title="MA 1")
//plot(ma2, color=color.purple, linewidth=2, title="MA 2")
//plot(ma3, color=color.green, linewidth=2, title="MA 3")
//plot(ma4, color=color.red, linewidth=2, title="MA 4")
//plot(ma5, color=color.yellow, linewidth=2, title="MA 5")

DefaultGannMLSetting = "[Gann][SGann][Color][ChoCh Gann][ChoCh SGann]"


showF1GannML = input.bool(true,"", group = DefaultGannMLSetting,inline =
"showF1GannML")
showSF1GannML = input.bool(true,"F1", group = DefaultGannMLSetting,inline =
"showF1GannML")
colorF1GannML = input.color(color.aqua, '', group = DefaultGannMLSetting,inline =
"showF1GannML")
showChoChF1GannML = input.bool(false,"", group = DefaultGannMLSetting,inline =
"showF1GannML")
showChoChSF1GannML = input.bool(true,"", group = DefaultGannMLSetting,inline =
"showF1GannML")

showF2GannML = input.bool(true,"", group = DefaultGannMLSetting,inline =


"showF2GannML")
showSF2GannML = input.bool(true,"F2", group = DefaultGannMLSetting,inline =
"showF2GannML")
colorF2GannML = input.color(color.yellow, '', group = DefaultGannMLSetting,inline =
"showF2GannML")
showChoChF2GannML = input.bool(true,"", group = DefaultGannMLSetting,inline =
"showF2GannML")
showChoChSF2GannML = input.bool(true,"", group = DefaultGannMLSetting,inline =
"showF2GannML")

showF3GannML = input.bool(true,"", group = DefaultGannMLSetting,inline =


"showF3GannML")
showSF3GannML = input.bool(true,"F3", group = DefaultGannMLSetting,inline =
"showF3GannML")
colorF3GannML = input.color(color.purple, '', group = DefaultGannMLSetting,inline =
"showF3GannML")
showChoChF3GannML = input.bool(true,"", group = DefaultGannMLSetting,inline =
"showF3GannML")
showChoChSF3GannML = input.bool(true,"", group = DefaultGannMLSetting,inline =
"showF3GannML")

f_CalculateF0(_pointX,_pointY,arrayX0,arrayY0)=>
array.unshift(arrayX0,_pointX)
array.unshift(arrayY0,_pointY)
[1]

f_CalculateFn1(_pointX,_pointY,arrayXn,arrayYn,arrayXFn1,arrayYFn1)=>
//_resultdraw 2:Tiếp tục 1:Đảo chiều
int _resultdraw = 0
//OSB pha dinh/day
if((array.get(arrayYFn1,0) >= array.get(arrayYFn1,1) and array.get(arrayYn,0)
< array.get(arrayYFn1,1)) or (array.get(arrayYFn1,0) <= array.get(arrayYFn1,1) and
array.get(arrayYn,0) > array.get(arrayYFn1,1)))
array.unshift(arrayXFn1,_pointX)
array.unshift(arrayYFn1,_pointY)
_resultdraw := 1
//Dao chieu sang giam
else if(array.get(arrayYFn1,0) >= array.get(arrayYFn1,1) and
(array.get(arrayYn,0) < array.get(arrayYn,1) and array.get(arrayYn,0) <
array.get(arrayYn,2) and array.get(arrayYn,1) < array.get(arrayYn,3)) and
array.get(arrayYn,2) < array.get(arrayYn,3))
array.unshift(arrayXFn1,_pointX)
array.unshift(arrayYFn1,_pointY)
_resultdraw := 1
//Dao chieu sang tang
else if(array.get(arrayYFn1,0) <= array.get(arrayYFn1,1) and
(array.get(arrayYn,0) > array.get(arrayYn,1) and array.get(arrayYn,0) >
array.get(arrayYn,2) and array.get(arrayYn,1) > array.get(arrayYn,3)) and
array.get(arrayYn,2) > array.get(arrayYn,3))
array.unshift(arrayXFn1,_pointX)
array.unshift(arrayYFn1,_pointY)
_resultdraw := 1
else if(array.get(arrayYFn1,0) >= array.get(arrayYFn1,1) and _pointY >=
array.get(arrayYFn1,0) and (_pointY >= array.get(arrayYFn1,0) or
(array.get(arrayYn,0) > array.get(arrayYn,2) and array.get(arrayYn,2) >
array.get(arrayYn,1)) or (array.get(arrayYn,0) > array.get(arrayYn,1) and
array.get(arrayYn,1) > array.get(arrayYn,2) and array.get(arrayYn,2) >
array.get(arrayYn,3))))
array.set(arrayXFn1, 0, _pointX)
array.set(arrayYFn1, 0, _pointY)
_resultdraw := 2
else if(array.get(arrayYFn1,0) <= array.get(arrayYFn1,1) and _pointY <=
array.get(arrayYFn1,0) and (_pointY <= array.get(arrayYFn1,0) or
(array.get(arrayYn,0) < array.get(arrayYn,2) and array.get(arrayYn,2) <
array.get(arrayYn,1)) or (array.get(arrayYn,0) < array.get(arrayYn,1) and
array.get(arrayYn,1) < array.get(arrayYn,2) and array.get(arrayYn,2) <
array.get(arrayYn,3))))
array.set(arrayXFn1, 0, _pointX)
array.set(arrayYFn1, 0, _pointY)
_resultdraw := 2
[_resultdraw]

f_CalculateSFn1(_pointX,_pointY,_arrayMark,_mIdxMark,arraySXFn1,arraySYFn1)=>
int _resultdraw = 0
if(array.get(_arrayMark,_mIdxMark) == 0)
if((array.get(arraySYFn1,0) >= array.get(arraySYFn1,1) and _pointY >=
array.get(arraySYFn1,0)) or (array.get(arraySYFn1,0) <= array.get(arraySYFn1,1) and
_pointY <= array.get(arraySYFn1,0)))
array.set(arraySXFn1, 0, _pointX)
array.set(arraySYFn1, 0, _pointY)
_resultdraw := 2
else if((array.get(arraySYFn1,0) >= array.get(arraySYFn1,1) and _pointY
< array.get(arraySYFn1,1)) or (array.get(arraySYFn1,0) <= array.get(arraySYFn1,1)
and _pointY > array.get(arraySYFn1,1)))
array.unshift(arraySXFn1,_pointX)
array.unshift(arraySYFn1,_pointY)
_resultdraw := 1
else if((array.get(arraySYFn1,0) >= array.get(arraySYFn1,1) and _pointY
< array.get(arraySYFn1,0) and _pointY > array.get(arraySYFn1,1)) or
(array.get(arraySYFn1,0) <= array.get(arraySYFn1,1) and _pointY >
array.get(arraySYFn1,0) and _pointY < array.get(arraySYFn1,1)))
array.unshift(arraySXFn1,_pointX)
array.unshift(arraySYFn1,_pointY)
array.set(_arrayMark,_mIdxMark,_pointY)
_resultdraw := 1
else if(array.get(_arrayMark,_mIdxMark) > 0)
if((array.get(arraySYFn1,0) >= array.get(arraySYFn1,1) and _pointY <
array.get(arraySYFn1,1)) or (array.get(arraySYFn1,0) <= array.get(arraySYFn1,1) and
_pointY > array.get(arraySYFn1,1)))
array.unshift(arraySXFn1,_pointX)
array.unshift(arraySYFn1,_pointY)
array.set(_arrayMark,_mIdxMark,0)
_resultdraw := 1
else if((array.get(arraySYFn1,0) >= array.get(arraySYFn1,1) and _pointY
> array.get(arraySYFn1,2)) or (array.get(arraySYFn1,0) <= array.get(arraySYFn1,1)
and _pointY < array.get(arraySYFn1,2)))
array.set(arraySXFn1, 0, _pointX)
array.set(arraySYFn1, 0, _pointY)
array.set(_arrayMark,_mIdxMark,0)
_resultdraw := 2
else if((array.get(arraySYFn1,0) >= array.get(arraySYFn1,1) and _pointY
<= array.get(arraySYFn1,2) and _pointY >= array.get(arraySYFn1,0)) or
(array.get(arraySYFn1,0) <= array.get(arraySYFn1,1) and _pointY >=
array.get(arraySYFn1,2) and _pointY <= array.get(arraySYFn1,0)))
array.set(arraySXFn1, 0, _pointX)
array.set(arraySYFn1, 0, _pointY)
array.set(_arrayMark,_mIdxMark,_pointY)
_resultdraw := 2

[_resultdraw]

f_CalculateRemoveDuplicateLine(arrayLine,arraySLine)=>
if(array.size(arraySLine) > 1 and array.size(arrayLine) >1)
if(line.get_y1(array.get(arraySLine,1)) ==
line.get_y1(array.get(arrayLine,1)) and line.get_y2(array.get(arraySLine,1)) ==
line.get_y2(array.get(arrayLine,1))and line.get_x1(array.get(arraySLine,1)) ==
line.get_x1(array.get(arrayLine,1)) and line.get_x2(array.get(arraySLine,1)) ==
line.get_x2(array.get(arrayLine,1)))
line.delete(array.get(arrayLine,1))
array.remove(arrayLine,1)

f_CalculateChoCh(arraySXFn1,arraySYFn1) =>
int _X = 0
float _Y = 0
// ChoCh Trường hợp chữ N ngược, chữ N
if((array.get(arraySYFn1,3) > array.get(arraySYFn1,2) and
array.get(arraySYFn1,3) < array.get(arraySYFn1,1) and array.get(arraySYFn1,0) <
array.get(arraySYFn1,2)) or (array.get(arraySYFn1,3) < array.get(arraySYFn1,2) and
array.get(arraySYFn1,3) > array.get(arraySYFn1,1) and array.get(arraySYFn1,0) >
array.get(arraySYFn1,2)))
_X := array.get(arraySXFn1,2)
_Y := array.get(arraySYFn1,2)
[_X,_Y]

f_CalculateDrawF(_drawF,_showSF,arrayLine,arrayX,arrayY,showChoCh,arrayMChoCh,idxCh
oCh,_color) =>
if(_drawF > 0)
if(_drawF == 1)

array.unshift(arrayLine,line.new(array.get(arrayX,1),array.get(arrayY,1),array.get(
arrayX,0),array.get(arrayY,0), color = _color,xloc = xloc.bar_time,width = 1,style
= line.style_dotted))
else if(_drawF == 2 and array.size(arrayLine) >0)

line.set_xy2(array.get(arrayLine,0),array.get(arrayX,0),array.get(arrayY,0))
[XChoCh,YChoCh] = f_CalculateChoCh(arrayX,arrayY)
if(showChoCh and YChoCh >0 and array.get(arrayMChoCh,idxChoCh) !=
YChoCh)
array.set(arrayMChoCh,idxChoCh,YChoCh)
line.new(XChoCh,YChoCh,time,YChoCh, color = _color,xloc =
xloc.bar_time,width = 1,style = line.style_dotted)

f_CalculateDrawSF(_drawSF,arrayLine,arraySLine,arraySX,arraySY,showChoCh,arrayMChoC
h,idxChoCh,_color) =>
if(_drawSF > 0)
if(_drawSF == 1)

array.unshift(arraySLine,line.new(array.get(arraySX,1),array.get(arraySY,1),array.g
et(arraySX,0),array.get(arraySY,0), color = _color,xloc = xloc.bar_time,width = 1))
else if(_drawSF == 2 and array.size(arraySLine) >0)

line.set_xy2(array.get(arraySLine,0),array.get(arraySX,0),array.get(arraySY,0))
f_CalculateRemoveDuplicateLine(arrayLine,arraySLine)
[XChoChS,YChoChS] = f_CalculateChoCh(arraySX,arraySY)
if(showChoCh and YChoChS >0 and array.get(arrayMChoCh,idxChoCh) !=
YChoChS)
array.set(arrayMChoCh,idxChoCh,YChoChS)
line.new(XChoChS,YChoChS,time,YChoChS, color = _color,xloc =
xloc.bar_time,width = 1,style = line.style_dashed)

var arrayMarkGannML = array.new_float(3,0)


var arrayMarkChoChGannML = array.new_float(6,0)
var arrayXF0GannML = array.new_int(10,time)
var arrayYF0GannML = array.new_float(10,close)
var arrayXF1GannML = array.new_int(10,time)
var arrayYF1GannML = array.new_float(10,close)
var arrayLineF1GannML = array.new_line()
var arraySXF1GannML = array.new_int(10,time)
var arraySYF1GannML = array.new_float(10,close)
var arraySLineF1GannML = array.new_line()
var arrayXF2GannML = array.new_int(10,time)
var arrayYF2GannML = array.new_float(10,close)
var arrayLineF2GannML = array.new_line()
var arraySXF2GannML = array.new_int(10,time)
var arraySYF2GannML = array.new_float(10,close)
var arraySLineF2GannML = array.new_line()
var arrayXF3GannML = array.new_int(10,time)
var arrayYF3GannML = array.new_float(10,close)
var arrayLineF3GannML = array.new_line()
var arraySXF3GannML = array.new_int(10,time)
var arraySYF3GannML = array.new_float(10,close)
var arraySLineF3GannML = array.new_line()
f_CalculateAndDrawFn1(_pointX,_pointY) =>
//F0 : Song cua nen
array.unshift(arrayXF0GannML,_pointX)
array.unshift(arrayYF0GannML,_pointY)
//F1,F2,...: Song cua song theo Gann
if(showF1GannML or showF2GannML or showF3GannML or showSF1GannML or
showSF2GannML or showSF3GannML)
[drawF1] =
f_CalculateFn1(_pointX,_pointY,arrayXF0GannML,arrayYF0GannML,arrayXF1GannML,arrayYF
1GannML)
f_CalculateDrawF(showF1GannML?
drawF1:0,showSF1GannML,arrayLineF1GannML,arrayXF1GannML,arrayYF1GannML,showChoChF1G
annML,arrayMarkChoChGannML,0,colorF1GannML)
if(drawF1 > 0 and (showF2GannML or showF3GannML or showSF1GannML or
showSF2GannML or showSF3GannML))
[drawSF1] =
f_CalculateSFn1(_pointX,_pointY,arrayMarkGannML,0,arraySXF1GannML,arraySYF1GannML)
f_CalculateDrawSF(showSF1GannML?
drawSF1:0,arrayLineF1GannML,arraySLineF1GannML,arraySXF1GannML,arraySYF1GannML,show
ChoChSF1GannML,arrayMarkChoChGannML,1,colorF1GannML)
if(drawSF1 > 0 and (showF2GannML or showF3GannML or showSF2GannML
or showSF3GannML))
[drawF2] =
f_CalculateFn1(_pointX,_pointY,arraySXF1GannML,arraySYF1GannML,arrayXF2GannML,array
YF2GannML)
f_CalculateDrawF(showF2GannML?
drawF2:0,showSF2GannML,arrayLineF2GannML,arrayXF2GannML,arrayYF2GannML,showChoChF2G
annML,arrayMarkChoChGannML,2,colorF2GannML)
if(drawF2 > 0 and (showF3GannML or showSF2GannML or
showSF3GannML))
[drawSF2] =
f_CalculateSFn1(_pointX,_pointY,arrayMarkGannML,1,arraySXF2GannML,arraySYF2GannML)
f_CalculateDrawSF(showSF2GannML?
drawSF2:0,arrayLineF2GannML,arraySLineF2GannML,arraySXF2GannML,arraySYF2GannML,show
ChoChSF2GannML,arrayMarkChoChGannML,3,colorF2GannML)
if(drawSF2 > 0 and (showF3GannML or showSF3GannML))
[drawF3] =
f_CalculateFn1(_pointX,_pointY,arraySXF2GannML,arraySYF2GannML,arrayXF3GannML,array
YF3GannML)
f_CalculateDrawF(showF3GannML?
drawF3:0,showSF3GannML,arrayLineF3GannML,arrayXF3GannML,arrayYF3GannML,showChoChF3G
annML,arrayMarkChoChGannML,4,colorF3GannML)
if(drawF3 > 0 and (showSF3GannML))
[drawSF3] =
f_CalculateSFn1(_pointX,_pointY,arrayMarkGannML,2,arraySXF3GannML,arraySYF3GannML)
f_CalculateDrawSF(showSF3GannML?
drawSF3:0,arrayLineF3GannML,arraySLineF3GannML,arraySXF3GannML,arraySYF3GannML,show
ChoChSF3GannML,arrayMarkChoChGannML,5,colorF3GannML)

f_CalculateAndDraw(_pointX,_pointY1,_pointY2) =>
if((array.get(arrayYF0GannML,0) > _pointY1 and array.get(arrayYF0GannML,0) >
_pointY2) or (array.get(arrayYF0GannML,0) < _pointY1 and
array.get(arrayYF0GannML,0) < _pointY2))
f_CalculateAndDrawFn1(time,array.get(arrayYF0GannML,1))
f_CalculateAndDrawFn1(time,_pointY1)
f_CalculateAndDrawFn1(time,_pointY2)

highPrev = high
lowPrev = low
if(barstate.isconfirmed)
if(high > highPrev[1] and low > lowPrev[1])
f_CalculateAndDraw(time,low,high)
else if(high < highPrev[1] and low < lowPrev[1])
f_CalculateAndDraw(time,high,low)
else if((high >= highPrev[1] and low < lowPrev[1]) or (high > highPrev[1] and
low <= lowPrev[1]))
if(close > open)
f_CalculateAndDraw(time,low,high)
else
f_CalculateAndDraw(time,high,low)
else if(high[0] <= highPrev[1] and low[0] >= lowPrev[1])
highPrev := highPrev[1]
lowPrev := lowPrev[1]

You might also like