xxxxxxxxxxx
xxxxxxxxxxx
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")
/////////////////
var aCZ = array.new_float(0)
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])
//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)
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)
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]