ICT KillZones Hunt [TradingFinder] 4 Sessions + OB + FVG (Imbalance) Alert

TradingFinder · study · 1454 行 · 点赞 3,097 · TradingView 原页

本页源码来自 TradingView 公开发布的开源脚本,版权归原作者所有, 请遵循其原始许可(Pine 脚本常见 CC BY-NC-SA / MPL-2.0 / MIT)。 本项目仅用于研究检索与许可范围内的移植。

Pine Script

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TFlab
//@version=5
indicator("ICT KillZones Hunt [TradingFinder] 4 Sessions + OB + FVG (Imbalance) Alert" ,"ICT KillZones TFlab" ,overlay = true, max_bars_back = 5000, max_boxes_count = 500,max_labels_count = 500, max_lines_count = 500 )
 
//import Libraries
    //import Order Block Refiner
import TFlab/OrderBlockRefiner_TradingFinder/2 as Refiner
    //import Order Block Drawing  Library
import TFlab/OrderBlockDrawing_TradingFinder/2 as Drawing
    //import FVG  Library
import TFlab/FVGDetectorLibrary/3 as FVG
    //import Alert Sender Library
import TFlab/AlertSenderLibrary_TradingFinder/1 as Alert
    ////import Session and KillZone Library
import TFlab/SessionAndKillZoneLibrary_TradingFinder/1 as Sess
    //import Tradingview Technical Analysis Library
import TradingView/ta/7
 
 
//Input
 
//Global Setting
ShowAllOB  = input.bool(true, 'Show All Order Block', group = 'Global Setting')
ShowAllFVG = input.bool(true, 'Show All FVG', group = 'Global Setting')
ShowMoreInfo = input.bool(false, 'Show More Info Session', inline = 'More' , group = 'Global Setting')
 
 
    //Pivot Period of Order Blocks Detector
PP = input.int(3, 'Pivot Period of Order Blocks Detector' , group = 'Logic Parameter' , minval = 1)
OBVaP = input.int(500, 'Order Block Validity Period (Bar)' , group = 'Logic Parameter' , maxval = 4998 , minval = 10,
 tooltip = 'You can set the validity period of each Order Block based on the number of candles that have passed since the origin of the Order Block.')
 
MLOB = input.string('50 % OB' , 'Mitigation Level Order Block', ['Proximal', '50 % OB', 'Distal'], 
 tooltip= 'Using this entry, you can determine which level the price reacts to in a Order Block.')
    //Display Order Blocks
 
ShowDmainCh = input.bool(true, 'Demand Order Block.', 
 'Using this button, you can control whether the' + 
 '"Demand Main Order Blocks" originating to "ChoCh" are displayed.' , group = 'Order Blocks Display', inline = 'OB 1')
 
ColorDmainCh = input.color(color.rgb(60, 176, 68, 65) , '' , group = 'Order Blocks Display', inline = 'OB 1')
 
 
 
ShowSmainCh = input.bool(true, 'Supply Order Block.', 
 'Using this button, you can control whether the' + 
 '"Supply Main Order Blocks" originating to "ChoCh" are displayed.' , group ='Order Blocks Display', inline = 'OB 4')
 
ColorSmainCh = input.color(color.rgb(191, 10, 48 , 75) , '' , group = 'Order Blocks Display', inline = 'OB 4')
 
 
 
    //Refinement Order Blocks, display and Method
 
RefineDmainCh = input.bool(true, 'Refine Demand OB', 
 'If you want this "Demand Main Order Block, ChoCh Origin" to be refined to display a optimal range,' +
 'you should select "On" and if you want to see the original' +
 'range of the block order, you should select "Off".' + 
 '\nAlso, if you are a risk taker, you can choose the "Aggressive" Refine method,' + 
 'and if you are risk averse, you can choose the "Defensive" Refine method.'
 , group ='Order Blocks Refinement ', inline = 'Refine 1')
 
RefineMeDmainCh = input.string('Defensive', '', ['Defensive', 'Aggressive'] , 
 group = 'Order Blocks Refinement ' , inline = 'Refine 1')
 
RefineSmainCh = input.bool(true, 'Refine Supply OB', 
 'If you want this "Supply Main Order Block, ChoCh Origin" to be refined to display a optimal range,' +
 'you should select "On" and if you want to see the original' +
 'range of the block order, you should select "Off".' + 
 '\nAlso, if you are a risk taker, you can choose the "Aggressive" Refine method,' + 
 'and if you are risk averse, you can choose the "Defensive" Refine method.' 
 , group ='Order Blocks Refinement ', inline = 'Refine 4')
 
RefineMeSmainCh = input.string('Defensive', '', ['Defensive', 'Aggressive'] , 
 group = 'Order Blocks Refinement ', inline = 'Refine 4')
 
    //FVG
FVGVaP = input.int(500, 'FVG Validity Period (Bar)' , group = 'FVG' , maxval = 4998 , minval = 10,
 tooltip = 'You can set the validity period of each FVG based on the number of candles that have passed since the origin of the FVG.')
 
MLFVG = input.string('50 % OB' , 'Mitigation Level FVG', ['Proximal', '50 % OB', 'Distal'], 
 tooltip= 'Using this entry, you can determine which level the price reacts to in a FVG.', group = 'FVG')
 
PShowDeFVG = input.bool(true, ' Show Demand FVG', group = 'FVG', inline = 'DFVG')
PShowSuFVG = input.bool(true, ' Show Supply FVG', group = 'FVG', inline = 'SFVG')
 
ColorDFVG = input.color(#04d9ff59 , '' , group = 'FVG', inline = 'DFVG')
ColorSFVG = input.color(color.rgb(253, 194, 2, 75) , '' , group = 'FVG', inline = 'SFVG')
 
PFVGFilter = input.bool(true, 'FVG Filter ......................................',  group = 'FVG' , inline = 'FVG Filter')
 
PFVGFilterType = input.string('Very Defensive', '', 
 ['Very Aggressive' , 'Aggressive' , 'Defensive' , 'Very Defensive'], group = 'FVG', inline = 'FVG Filter' ,
 tooltip = 'If it is "On", this filter will filter "FVGs" based on the width of the Zone.'  + 
 'From "Very Aggressive" to "Very Defensive" the width of the "FVG" decreases.')
 
 
//Session Asia
ColorMoreInfo = input.color(#0c3299, 'Show More Info Session Color', inline = 'More' , group = 'Session')
 
show_AsiaSess = input(true, 'Asia Session',inline = 'sesasia', group = 'Asia Session', tooltip = 'Sydney + Tokyo')
show_AsiaKill = input(true, 'Asia KillZone',  inline = 'sesasia',group = 'Asia Session')
Asia_color = input.color(#da6e0a, '', inline = 'sesasia', group = 'Asia Session')
Asia_SessTime = '2300-0600'
Asia_KillTime = '2300-0355'
 
//Session London
show_LondonSess = input(true, 'London Session',  inline = 'seslondon', group = ' London Session') 
show_LondonKill = input(true, 'London KillZone',inline = 'seslondon',  group = ' London Session')
London_color = input.color(#850244, '', inline = 'seslondon', group = ' London Session')
London_SessTime = '0700-1425'
London_KillTime = '0700-0955'
 
//Session AM NewYork
show_amNewyorkSess = input(true, 'Newyork am Session', inline = 'sesamNewyork', group = 'Newyork AM Session') 
show_amNewyorkKill = input(true, 'Newyork am KillZone', inline = 'sesamNewyork', group = 'Newyork AM Session')
amNewyork_color = input.color(#008b85, '', inline = 'sesamNewyork', group = 'Newyork AM Session') 
amNewyork_SessTime = '1430-1925'
amNewyork_KillTime = '1430-1655'
 
//Session AM NewYork
show_pmNewyorkSess = input(true, 'Newyork pm Session', inline = 'sespmNewyork', group = 'Newyork PM Session') 
show_pmNewyorkKill = input(true, 'Newyork pm KillZone',inline = 'sespmNewyork',  group = 'Newyork PM Session') 
pmNewyork_color = input.color(#750cff, '', inline = 'sespmNewyork', group = 'Newyork PM Session')
pmNewyork_SessTime = '1930-2255'
pmNewyork_KillTime = '1930-2055'
 
    //Alert
 
Alert = input.string('On' , 'Send Alert When Touched Session High & Low' , ['On', 'Off'], 'Receive an alert related to touching the kill zone' , group = 'Alert')
 
 
Alert_DMM = input.string('On' , 'Alert Demand OB Mitigation' , ['On', 'Off'], 'If you turn on the Alert Demand OB Mitigation,' + 
 'you can receive alerts and notifications after setting the "Alert".' , group = 'Alert')
 
 
Alert_SMM = input.string('On' , 'Alert Supply OB Mitigation', ['On', 'Off'], 'If you turn on the Alert Supply OB Mitigation,' +
 'you can receive alerts and notifications after setting the "Alert".' , group = 'Alert')
 
 
 
Alert_DFVGa = input.string('On' , 'Alert Demand FVG Mitigation' , ['On', 'Off'], 'If you turn on the Alert Demand FVG Mitigation,' + 
 'you can receive alerts and notifications after setting the "Alert".' , group = 'Alert')
 
 
 
Alert_SFVGa = input.string('On' , 'Alert Supply FVG Mitigation', ['On', 'Off'], 'If you turn on the Alert Supply FVG Mitigation,' +
 'you can receive alerts and notifications after setting the "Alert".' , group = 'Alert')
 
 
 
Frequncy = input.string('Once Per Bar' , 'Message Frequency' , ['All', 'Once Per Bar' , 'Per Bar Close'], 'The triggering frequency. Possible values are: All'+ 
 ' (all function calls trigger the alert), Once Per Bar (the first function call during the bar triggers the alert), ' +  
 ' Per Bar Close (the function call triggers the alert only when it occurs during the last script iteration of the real-time bar,' +  
 ' when it closes). The default is alert.freq_once_per_bar.)', group = 'Alert')
 
UTC = input.string('UTC' , 'Show Alert time by Time Zone', group = 'Alert')
 
MoreInfo = input.string('On', 'Display More Info', ['On', 'Off'], group = 'Alert')
 
 
 
 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
//Variables
 
    //ZigZag Data
Open = open
High = high
Low = low
Close = close 
Bar_Index = bar_index
ATR =ta.atr(55)
var ArrayType = array.new_string()
var ArrayValue = array.new_float()
var ArrayIndex =  array.new_int()
var ArrayTypeAdv  = array.new_string()
var ArrayValueAdv = array.new_float()
var ArrayIndexAdv =  array.new_int()  
var line ZZLine = na
var line Sline = na 
var line Rline = na 
var label Label  = na
PASS = 0
HighPivot = ta.pivothigh(PP,PP)
LowPivot = ta.pivotlow(PP,PP)
HighValue = ta.valuewhen(HighPivot ,High[PP], 0)
LowValue = ta.valuewhen(LowPivot ,Low[PP], 0)
HighIndex = ta.valuewhen(HighPivot ,Bar_Index[PP], 0)
LowIndex = ta.valuewhen(LowPivot ,Bar_Index[PP], 0)
Correct_HighPivot = 0.0
Correct_LowPivot =  0.0
 
    //Major Levels
var float Major_HighLevel = na
var float Major_LowLevel  = na
 
var int Major_HighIndex = na
var int Major_LowIndex = na
 
var string Major_HighType= na
var string Major_LowType = na
 
    //Minor Levels
var float Minor_HighLevel = na
var float Minor_LowLevel  = na
 
var int Minor_HighIndex   = na
var int Minor_LowIndex    = na
 
var string Minor_HighType = na
var string Minor_LowType  = na
 
var int LockDetecteM_MinorLvL = 0
 
    //
var bool Lock0 = true
var bool Lock1 = true
 
// Detecte Major & Minor Pivot
// Order Blocks Data
    //Major
var int LastMHH = 0
var int Last02MHH = 0
var int LastMLH = 0
 
var int LastMLL = 0
var int Last02MLL = 0
var int LastMHL = 0
    //Minor
var int LastmHH = 0
var int Last02mHH = 0
var int LastmLH = 0
 
var int LastmLL = 0
var int Last02mLL = 0
var int LastmHL = 0
 
/////////////////////////////
// Last Pivot First Point////
/////////////////////////////
var string LastPivotType = na
var int LastPivotIndex = 0
 
var string LastPivotType02 = na
var int LastPivotIndex02 = 0
 
    //Major 01
var float MajorHighValue01 = na
var int   MajorHighIndex01 = na
var string MajorHighType01 = ''
 
var float MajorLowValue01  = na
var int   MajorLowIndex01 =  na
var string MajorLowType01 =  ''
 
    //Minor 01
var float MinorHighValue01 = na
var int   MinorHighIndex01 = na
var string MinorHighType01 = ''
 
var float MinorLowValue01  = na
var int   MinorLowIndex01  = na
var string MinorLowType01 =  ''
 
/////////////////////////////////////
//One to the Last Pivot First Point//
/////////////////////////////////////
    //Major 02
var float MajorHighValue02 = na
var int   MajorHighIndex02 = na
var string MajorHighType02 = ''
 
var float MajorLowValue02  = na
var int   MajorLowIndex02 =  na
var string MajorLowType02 =  ''
 
    //Minor 02
var float MinorHighValue02 = na
var int   MinorHighIndex02 = na
var string MinorHighType02 = ''
 
var float MinorLowValue02  = na
var int   MinorLowIndex02  = na
var string MinorLowType02 =  ''
 
    //Major 02 Change Type Pivot
var float MajorHighValue02Ch = na
var int   MajorHighIndex02Ch = na
var string MajorHighType02Ch = ''
 
var float MajorLowValue02Ch  = na
var int   MajorLowIndex02Ch =  na
var string MajorLowType02Ch =  ''
 
    //Lines Data
var line MajorLine_ChoChBull   = na
var label MajorLabel_ChoChBull = na
 
var line MajorLine_ChoChBear   = na
var label MajorLabel_ChoChBear = na
 
var line MajorLine_BoSBull     = na
var label MajorLabel_BoSBull   = na
 
var line MajorLine_BoSBear     = na
var label MajorLabel_BoSBear   = na
 
var line MinorLine_ChoChBull   = na
var label MinorLabel_ChoChBull = na
 
var line MinorLine_ChoChBear   = na
var label MinorLabel_ChoChBear = na
 
var line MinorLine_BoSBull     = na
var label MinorLabel_BoSBull   = na
 
var line MinorLine_BoSBear     = na
var label MinorLabel_BoSBear   = na
 
    // BoS & ChoCh Data
        //Major
var bool Bullish_Major_ChoCh = false
var bool Bullish_Major_BoS = false
 
var bool Bearish_Major_ChoCh = false
var bool Bearish_Major_BoS = false
 
var BoS_MajorType  = array.new_string()
var BoS_MajorIndex = array.new_int()
 
var ChoCh_MajorType  = array.new_string()
var ChoCh_MajorIndex = array.new_int()
 
var int LockBreak_M = 0 
 
        //Minor
var bool Bullish_Minor_ChoCh = false
var bool Bullish_Minor_BoS = false
 
var bool Bearish_Minor_ChoCh = false
var bool Bearish_Minor_BoS = false
 
var BoS_MinorType  = array.new_string()
var BoS_MinorIndex = array.new_int()
 
var ChoCh_MinorType  = array.new_string()
var ChoCh_MinorIndex = array.new_int()
 
var int LockBreak_m = 0 
 
 
    //Support & Resistance Line
 
        //Major
var line Support_LineMajor = na 
var line Resistance_LineMajor = na 
        //Minor
var line Support_LineMinor = na
var line Resistance_LineMinor = na
 
    //Trend Data
 
var string ExternalTrend = 'No Trend'
var string InternalTrend = 'No Trend'
 
    //Order Blocks Data
 
        //Bullish Major ChoCh Main
var bool  BuMChMain_Trigger = false
var int   BuMChMain_Index     = 0
 
        //Bullish Major ChoCh Sub
var bool  BuMChSub_Trigger = false
var int   BuMChSub_Index     = 0
 
        //Bullish Major BoS
var bool  BuMBoS_Trigger = false
var int   BuMBoS_Index     = 0
 
        //Bearish Major ChoCh Main
var bool  BeMChMain_Trigger = false
var int   BeMChMain_Index     = 0
 
        //Bearish Major ChoCh Sub
var bool  BeMChSub_Trigger = false
var int   BeMChSub_Index     = 0
 
        //Bearish Major BoS
var bool  BeMBoS_Trigger = false
var int   BeMBoS_Index     = 0
 
    //Correction OB
        //Bullish Major ChoCh 
 
var float ChBuLowest = 0.0
var float ChBuLowestSub = 0.0
 
var int CorrectBuIndex = 0
var int CorrectBuIndexSub = 0
 
        //Bullish Major BoS
 
var float BoSBuLowest = 0.0
var float BoSBuLowest02 = 0.0
 
var int CorrectBuBoSIndex = 0
var int CorrectBuBoSIndex02 = 0
 
        //Bearish Major ChoCh 
 
var float ChBeHighest = 0.0
var float ChBeHighestSub = 0.0
 
var int CorrectBeIndex = 0
var int CorrectBeIndexSub = 0
 
        //Bearish Major BoS 
 
var float BoSBeHighest = 0.0
var float BoSBeHighest02 = 0.0
 
var int CorrectBeBoSIndex = 0
var int CorrectBeBoSIndex02 = 0
 
 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////Calculation/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
    //{Zig Zag}
if HighPivot  and  LowPivot
    if ArrayType.size() == 0
        PASS := 1
    else if ArrayType.size() >= 1
        if ((ArrayType.get(ArrayType.size() - 1)) == "L" or
             (ArrayType.get(ArrayType.size() - 1)) == "LL")
            if LowPivot < ArrayValue.get(ArrayType.size() - 1)
                array.remove(ArrayType,ArrayType.size() - 1)
                array.remove(ArrayValue,ArrayValue.size() - 1)
                array.remove(ArrayIndex,ArrayIndex.size() - 1) 
                array.push(ArrayType,ArrayType.size()>2? ArrayValue.get(ArrayType.size() - 2) < LowValue ? "HL" : "LL" : "L")///////////////////////////////Here
                array.push(ArrayValue, LowValue)
                array.push(ArrayIndex, LowIndex)
                Correct_LowPivot :=  LowValue
            else 
                array.push(ArrayType,ArrayType.size()>2? ArrayValue.get(ArrayType.size() - 2) < HighValue ? "HH" : "LH" : "H" ) ///////////////////////////////Here
                array.push(ArrayValue, HighValue)
                array.push(ArrayIndex, HighIndex)
            Correct_HighPivot := HighValue  
        else if (ArrayType.get(ArrayType.size() - 1)) == "H" or 
             (ArrayType.get(ArrayType.size() - 1)) == "HH"
            if HighPivot > ArrayValue.get(ArrayType.size() - 1)
                array.remove(ArrayType,ArrayType.size() - 1)
                array.remove(ArrayValue,ArrayValue.size() - 1)
                array.remove(ArrayIndex,ArrayIndex.size() - 1)
                array.push(ArrayType,ArrayType.size()>2? ArrayValue.get(ArrayType.size() - 2) < HighValue ? "HH" : "LH" : "H")///////////////////////////////Here
                array.push(ArrayValue, HighValue)
                array.push(ArrayIndex, HighIndex)
                Correct_HighPivot := HighValue  
            else 
                array.push(ArrayType,ArrayType.size()>2?  ArrayValue.get(ArrayType.size() - 2) < LowValue ? "HL" : "LL" : "L")///////////////////////////////Here
                array.push(ArrayValue, LowValue)
                array.push(ArrayIndex, LowIndex)
            Correct_LowPivot :=  LowValue    
        else if (ArrayType.get(ArrayType.size() - 1)) == "LH"
            if HighPivot < ArrayValue.get(ArrayType.size() - 1)
                array.push(ArrayType,ArrayType.size()>2?  ArrayValue.get(ArrayType.size() - 2) < LowValue ? "HL" : "LL" : "L")///////////////////////////////Here
                array.push(ArrayValue, LowValue)
                array.push(ArrayIndex, LowIndex)
                Correct_LowPivot :=  LowValue 
            else if HighPivot > ArrayValue.get(ArrayType.size() - 1)
                if close < ArrayValue.get(ArrayType.size() - 1)
                    array.remove(ArrayType,ArrayType.size() - 1)
                    array.remove(ArrayValue,ArrayValue.size() - 1)
                    array.remove(ArrayIndex,ArrayIndex.size() - 1)
                    array.push(ArrayType,ArrayType.size()>2? ArrayValue.get(ArrayType.size() - 2) < HighValue ? "HH" : "LH" : "H")///////////////////////////////Here
                    array.push(ArrayValue, HighValue)
                    array.push(ArrayIndex, HighIndex)
                    Correct_HighPivot := HighValue  
                else if close > ArrayValue.get(ArrayType.size() - 1)
                    array.push(ArrayType,ArrayType.size()>2? ArrayValue.get(ArrayType.size() - 2) < LowValue ? "HL" : "LL" : "L")///////////////////////////////Here
                    array.push(ArrayValue, LowValue)
                    array.push(ArrayIndex, LowIndex)
                    Correct_LowPivot :=  LowValue
        else if (ArrayType.get(ArrayType.size() - 1)) == "HL"
            if LowPivot > ArrayValue.get(ArrayType.size() - 1)
                array.push(ArrayType,ArrayType.size()>2? ArrayValue.get(ArrayType.size() - 2) < HighValue ? "HH" : "LH" : "H" ) ///////////////////////////////Here
                array.push(ArrayValue, HighValue)
                array.push(ArrayIndex, HighIndex)
                Correct_HighPivot := HighValue                       
            else if LowPivot < ArrayValue.get(ArrayType.size() - 1)
                if close > ArrayValue.get(ArrayType.size() - 1)
                    array.remove(ArrayType,ArrayType.size() - 1)
                    array.remove(ArrayValue,ArrayValue.size() - 1)
                    array.remove(ArrayIndex,ArrayIndex.size() - 1) 
                    array.push(ArrayType,ArrayType.size()>2? ArrayValue.get(ArrayType.size() - 2) < LowValue ? "HL" : "LL" : "L")///////////////////////////////Here
                    array.push(ArrayValue, LowValue)
                    array.push(ArrayIndex, LowIndex)
                    Correct_LowPivot :=  LowValue
                else if close < ArrayValue.get(ArrayType.size() - 1)
                    array.push(ArrayType,ArrayType.size()>2? ArrayValue.get(ArrayType.size() - 2) < HighValue ? "HH" : "LH" : "H")///////////////////////////////Here
                    array.push(ArrayValue, HighValue)
                    array.push(ArrayIndex, HighIndex)
                    Correct_HighPivot := HighValue                         
else if  HighPivot 
    if ArrayType.size() == 0
        array.insert(ArrayType, 0, "H")
        array.insert(ArrayValue, 0, HighValue)
        array.insert(ArrayIndex, 0, HighIndex)
        Correct_HighPivot := HighValue
    else if ArrayType.size() >= 1
        if ((ArrayType.get(ArrayType.size() - 1)) == "L" or
             (ArrayType.get(ArrayType.size() - 1)) == "HL" or
             (ArrayType.get(ArrayType.size() - 1)) == "LL")
            if HighPivot > ArrayValue.get(ArrayType.size() - 1)
                array.push(ArrayType,ArrayType.size()>2? ArrayValue.get(ArrayType.size() - 2) < HighValue ? "HH" : "LH" : "H" ) ///////////////////////////////Here
                array.push(ArrayValue, HighValue)
                array.push(ArrayIndex, HighIndex)
                Correct_HighPivot := HighValue
            else if  HighPivot < ArrayValue.get(ArrayType.size() - 1)
                array.remove(ArrayType,ArrayType.size() - 1)
                array.remove(ArrayValue,ArrayValue.size() - 1)
                array.remove(ArrayIndex,ArrayIndex.size() - 1) 
                array.push(ArrayType,ArrayType.size()>2? ArrayValue.get(ArrayType.size() - 2) < LowValue ? "HL" : "LL" : "L")///////////////////////////////Here
                array.push(ArrayValue, LowValue)
                array.push(ArrayIndex, LowIndex)
                Correct_LowPivot :=  LowValue                         
        else if (ArrayType.get(ArrayType.size() - 1)) == "H" or 
             (ArrayType.get(ArrayType.size() - 1)) == "HH" or 
             (ArrayType.get(ArrayType.size() - 1)) == "LH"
            if (ArrayValue.get(ArrayValue.size() - 1)) < HighValue
                array.remove(ArrayType,ArrayType.size() - 1)
                array.remove(ArrayValue,ArrayValue.size() - 1)
                array.remove(ArrayIndex,ArrayIndex.size() - 1)
                array.push(ArrayType,ArrayType.size()>2? ArrayValue.get(ArrayType.size() - 2) < HighValue ? "HH" : "LH" : "H")///////////////////////////////Here
                array.push(ArrayValue, HighValue)
                array.push(ArrayIndex, HighIndex)
                Correct_HighPivot := HighValue               
else if LowPivot 
    if ArrayType.size() == 0
        array.insert(ArrayType, 0, "L")
        array.insert(ArrayValue, 0, LowValue)
        array.insert(ArrayIndex, 0, LowIndex)
        Correct_LowPivot :=  LowValue
    else if ArrayType.size() >= 1
        if (ArrayType.get(ArrayType.size() - 1)) == "H" or 
             (ArrayType.get(ArrayType.size() - 1)) == "HH" or 
             (ArrayType.get(ArrayType.size() - 1)) == "LH"
            if LowPivot < ArrayValue.get(ArrayType.size() - 1)
                array.push(ArrayType,ArrayType.size()>2?  ArrayValue.get(ArrayType.size() - 2) < LowValue ? "HL" : "LL" : "L")///////////////////////////////Here
                array.push(ArrayValue, LowValue)
                array.push(ArrayIndex, LowIndex)
                Correct_LowPivot :=  LowValue
            else if LowPivot > ArrayValue.get(ArrayType.size() - 1)
                array.remove(ArrayType,ArrayType.size() - 1)
                array.remove(ArrayValue,ArrayValue.size() - 1)
                array.remove(ArrayIndex,ArrayIndex.size() - 1)
                array.push(ArrayType,ArrayType.size()>2? ArrayValue.get(ArrayType.size() - 2) < HighValue ? "HH" : "LH" : "H")///////////////////////////////Here
                array.push(ArrayValue, HighValue)
                array.push(ArrayIndex, HighIndex)
                Correct_HighPivot := HighValue                        
        else if (ArrayType.get(ArrayType.size() - 1)) == "L" or 
             (ArrayType.get(ArrayType.size() - 1)) == "HL" or 
             (ArrayType.get(ArrayType.size() - 1)) == "LL"
            if (ArrayValue.get(ArrayValue.size() - 1)) > LowValue
                array.remove(ArrayType,ArrayType.size() - 1)
                array.remove(ArrayValue,ArrayValue.size() - 1)
                array.remove(ArrayIndex,ArrayIndex.size() - 1) 
                array.push(ArrayType,ArrayType.size()>2? ArrayValue.get(ArrayType.size() - 2) < LowValue ? "HL" : "LL" : "L")///////////////////////////////Here
                array.push(ArrayValue, LowValue)
                array.push(ArrayIndex, LowIndex)
                Correct_LowPivot :=  LowValue
 
    //{Zig Zag Advance}
 
        //first Major & Minor Detector
if ArrayType.size() ==  2
    if ArrayType.get(0) == 'H'
        Major_HighLevel := ArrayValue.get(0)
        Major_LowLevel  := ArrayValue.get(1)
        Major_HighIndex := ArrayIndex.get(0)
        Major_LowIndex  := ArrayIndex.get(1)
        Major_HighType := ArrayType.get(0)
        Major_LowType  := ArrayType.get(1)
    else if ArrayType.get(0) == 'L'
        Major_HighLevel := ArrayValue.get(1)
        Major_LowLevel  := ArrayValue.get(0) 
        Major_HighIndex := ArrayIndex.get(1)
        Major_LowIndex  := ArrayIndex.get(0)
        Major_HighType := ArrayType.get(1)
        Major_LowType  := ArrayType.get(0)
 
        //Making Copies of Arrays
 
 
if  ArrayValue.size() == 1
    if Lock0
        array.insert(ArrayTypeAdv ,0 ,'M' +  ArrayType.get(0))
        array.insert(ArrayValueAdv,0 ,ArrayValue.get(0))
        array.insert(ArrayIndexAdv,0 ,ArrayIndex.get(0))   
        Lock0 := false
 
if  ArrayValue.size() == 2
    if Lock1
        array.insert(ArrayTypeAdv ,1 ,'M' +  ArrayType.get(1))
        array.insert(ArrayValueAdv,1 ,ArrayValue.get(1))
        array.insert(ArrayIndexAdv,1 ,ArrayIndex.get(1))   
        Lock1 := false
 
if ArrayValue.size() > 1
    if ArrayValue.get(ArrayValue.size()-1)[1] != ArrayValue.get(ArrayValue.size()-1)
        if str.substring(ArrayType.get(ArrayType.size()-1)[1], str.length(ArrayType.get(ArrayType.size()-1))-1) != 
             str.substring(ArrayType.get(ArrayType.size()-1), str.length(ArrayType.get(ArrayType.size()-1))-1)
            array.push(ArrayTypeAdv ,'m' +  ArrayType.get(ArrayType.size()   - 1))
            array.push(ArrayValueAdv, ArrayValue.get(ArrayValue.size() - 1))
            array.push(ArrayIndexAdv, ArrayIndex.get(ArrayIndex.size() - 1))
        else if str.substring(ArrayType.get(ArrayType.size()-1)[1], str.length(ArrayType.get(ArrayType.size()-1))-1) == 
             str.substring(ArrayType.get(ArrayType.size()-1), str.length(ArrayType.get(ArrayType.size()-1))-1)
            array.remove(ArrayValueAdv, ArrayValueAdv.size() - 1)
            array.remove(ArrayIndexAdv, ArrayIndexAdv.size() - 1)
            array.push(ArrayValueAdv, ArrayValue.get(ArrayValue.size() - 1))
            array.push(ArrayIndexAdv, ArrayIndex.get(ArrayIndex.size() - 1))
 
        //All Major & Minor Pivot Detector 
 
if ArrayValueAdv.size() > 1
            //High Major Detector
    if close > Major_HighLevel
        if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mL'
            ArrayTypeAdv.remove(ArrayTypeAdv.size() - 1)
            ArrayTypeAdv.push('ML')
            Major_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
            Major_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
            Major_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
        else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mHL'
            ArrayTypeAdv.remove(ArrayTypeAdv.size() - 1)
            ArrayTypeAdv.push('M' + ArrayType.get(ArrayType.size() - 1))      
            Major_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
            Major_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
            Major_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) 
        else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mLL'
            ArrayTypeAdv.remove(ArrayTypeAdv.size() - 1)
            ArrayTypeAdv.push('M'  + ArrayType.get(ArrayType.size() - 1)) 
            Major_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
            Major_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
            Major_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
        else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mLH' or ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mHH' or 
             ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'MLH' or ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'MHH' 
            if ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) == 'mHL'
                ArrayTypeAdv.remove(ArrayTypeAdv.size() - 2)
                ArrayTypeAdv.insert(ArrayValueAdv.size() - 2 , 'M' + ArrayType.get(ArrayType.size() - 2))      
                Major_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 2)
                Major_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 2)
                Major_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
            else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) == 'mLL'
                ArrayTypeAdv.remove(ArrayTypeAdv.size() - 2)
                ArrayTypeAdv.insert(ArrayValueAdv.size() - 2 , 'M' + ArrayType.get(ArrayType.size() - 2))
                Major_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 2)
                Major_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 2)
                Major_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
    if  ArrayValueAdv.get(ArrayValueAdv.size() - 1) > Major_HighLevel
        if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mH'
            ArrayTypeAdv.remove(ArrayTypeAdv.size() - 1)
            ArrayTypeAdv.push('MH')
            Major_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
            Major_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
            Major_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
        else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mLH'
            ArrayTypeAdv.remove(ArrayTypeAdv.size() - 1)
            ArrayTypeAdv.push('M' + ArrayType.get(ArrayType.size() - 1))  
            Major_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
            Major_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
            Major_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)     
        else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mHH' or ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'MHH'
            ArrayTypeAdv.remove(ArrayTypeAdv.size() - 1)
            ArrayTypeAdv.push('M' + ArrayType.get(ArrayType.size() - 1))
            Major_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
            Major_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
            Major_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
 
            //Low Major Detector
    if close < Major_LowLevel
        if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mH'
            ArrayTypeAdv.remove(ArrayTypeAdv.size() - 1)
            ArrayTypeAdv.push('MH')
            Major_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
            Major_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
            Major_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
        else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mLH'
            ArrayTypeAdv.remove(ArrayTypeAdv.size() - 1)
            ArrayTypeAdv.push('M' +  ArrayType.get(ArrayType.size() - 1))      
            Major_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
            Major_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
            Major_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
        else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mHH'
            ArrayTypeAdv.remove(ArrayTypeAdv.size() - 1)
            ArrayTypeAdv.push('M' + ArrayType.get(ArrayType.size() - 1))
            Major_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
            Major_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
            Major_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
        else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mHL' or ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mLL' or 
             ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'MHL' or ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'MLL'
            if ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) == 'mLH'
                ArrayTypeAdv.remove(ArrayTypeAdv.size() - 2)
                ArrayTypeAdv.insert(ArrayValueAdv.size() - 2 , 'M' + ArrayType.get(ArrayType.size() - 2))      
                Major_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 2)
                Major_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 2)
                Major_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
            else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) == 'mHH'
                ArrayTypeAdv.remove(ArrayTypeAdv.size() - 2)
                ArrayTypeAdv.insert(ArrayValueAdv.size() - 2 , 'M' + ArrayType.get(ArrayType.size() - 2))
                Major_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 2)
                Major_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 2)
                Major_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
    if ArrayValueAdv.get(ArrayValueAdv.size() - 1) < Major_LowLevel
        if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mL'
            ArrayTypeAdv.remove(ArrayTypeAdv.size() - 1)
            ArrayTypeAdv.push('ML')
            Major_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
            Major_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
            Major_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
 
        else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mHL'
            ArrayTypeAdv.remove(ArrayTypeAdv.size() - 1)
            ArrayTypeAdv.push('M' + ArrayType.get(ArrayType.size() - 1) ) 
            Major_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
            Major_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
            Major_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
        else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mLL' or ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'MLL'
            ArrayTypeAdv.remove(ArrayTypeAdv.size() - 1)
            ArrayTypeAdv.push('M' + ArrayType.get(ArrayType.size() - 1))
            Major_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
            Major_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
            Major_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
 
 
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
    //Get Pivot Data
        //Last Pivot Data
if ArrayTypeAdv.size() > 1
    LastPivotType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
    LastPivotIndex := ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
    LastPivotType02 := ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
    LastPivotIndex02 := ArrayIndexAdv.get(ArrayTypeAdv.size() - 2)
        //Major
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) ==  'MHH'
        MajorHighValue01   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 1)
        MajorHighIndex01   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
        MajorHighType01    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
        LastMHH            :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
 
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) ==  'MLH'
        MajorHighValue01   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 1)
        MajorHighIndex01   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
        MajorHighType01    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
        LastMLH            :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) ==  'MLL'
        MajorLowValue01   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 1)
        MajorLowIndex01   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
        MajorLowType01    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
        LastMLL            :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) ==  'MHL'
        MajorLowValue01   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 1)
        MajorLowIndex01   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
        MajorLowType01    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
        LastMHL            :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
    
        //Minor
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) ==  'mHH'
        MinorHighValue01   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 1)
        MinorHighIndex01   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
        MinorHighType01    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
        LastmHH            :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) ==  'mLH'
        MinorHighValue01   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 1)
        MinorHighIndex01   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
        MinorHighType01    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
        LastmLH            :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) ==  'mLL'
        MinorLowValue01   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 1)
        MinorLowIndex01   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
        MinorLowType01    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
        LastmLL           :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) ==  'mHL'
        MinorLowValue01   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 1)
        MinorLowIndex01   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
        MinorLowType01    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
        LastmHL           :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
 
    //One to the Last Pivot Data
if ArrayTypeAdv.size() > 1
        //Major
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) ==  'MHH'
        MajorHighValue02   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 2)
        MajorHighIndex02   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 2)
        MajorHighType02    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) ==  'MLH'
        MajorHighValue02   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 2)
        MajorHighIndex02   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 2)
        MajorHighType02    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) ==  'MLL'
        MajorLowValue02   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 2)
        MajorLowIndex02   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 2)
        MajorLowType02    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) ==  'MHL'
        MajorLowValue02   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 2)
        MajorLowIndex02   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 2)
        MajorLowType02    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
    
        //Minor
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) ==  'mHH'
        MinorHighValue02   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 2)
        MinorHighIndex02   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 2)
        MinorHighType02    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) ==  'mLH'
        MinorHighValue02   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 2)
        MinorHighIndex02   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 2)
        MinorHighType02    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) ==  'mLL'
        MinorLowValue02   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 2)
        MinorLowIndex02   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 2)
        MinorLowType02    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
    if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) ==  'mHL'
        MinorLowValue02   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 2)
        MinorLowIndex02   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 2)
        MinorLowType02    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
        // Change Pivot Type to Major
    if ArrayTypeAdv.get(ArrayTypeAdv.size()-2) != ArrayTypeAdv.get(ArrayTypeAdv.size()-2)[1] // Change Pivot Type to Major
        //Major
        if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) ==  'MHH'
            MajorHighValue02Ch   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 2)
            MajorHighIndex02Ch   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 2)
            MajorHighType02Ch    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
        if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) ==  'MLH'
            MajorHighValue02Ch   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 2)
            MajorHighIndex02Ch   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 2)
            MajorHighType02Ch    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
        if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) ==  'MLL'
            MajorLowValue02Ch   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 2)
            MajorLowIndex02Ch   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 2)
            MajorLowType02Ch    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
        if  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) ==  'MHL'
            MajorLowValue02Ch   :=  ArrayValueAdv.get(ArrayTypeAdv.size() - 2)
            MajorLowIndex02Ch   :=  ArrayIndexAdv.get(ArrayTypeAdv.size() - 2)
            MajorLowType02Ch    :=  ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
    // Detecte Minor level
 
if ArrayTypeAdv.size() > 2  
    LockDetecteM_MinorLvL := 1
    if str.pos(ArrayTypeAdv.get(ArrayTypeAdv.size() - 1),'m') == 0 and
     str.pos(ArrayTypeAdv.get(ArrayTypeAdv.size() - 2),'m') == 0   and
     str.pos(ArrayTypeAdv.get(ArrayTypeAdv.size() - 3),'M') == 0
        if str.pos(ArrayTypeAdv.get(ArrayTypeAdv.size() - 1),'H') == 2
            Minor_HighLevel := ArrayValueAdv.get(ArrayTypeAdv.size() - 1)
            Minor_LowLevel  := ArrayValueAdv.get(ArrayTypeAdv.size() - 2)
            Minor_HighIndex := ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
            Minor_LowIndex  := ArrayIndexAdv.get(ArrayTypeAdv.size() - 2)
            Minor_HighType  := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
            Minor_LowType   := ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
        else if str.pos(ArrayTypeAdv.get(ArrayTypeAdv.size() - 1),'L') == 2
            Minor_HighLevel := ArrayValueAdv.get(ArrayTypeAdv.size() - 2)
            Minor_LowLevel  := ArrayValueAdv.get(ArrayTypeAdv.size() - 1) 
            Minor_HighIndex := ArrayIndexAdv.get(ArrayTypeAdv.size() - 2)
            Minor_LowIndex  := ArrayIndexAdv.get(ArrayTypeAdv.size() - 1)
            Minor_HighType  := ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
            Minor_LowType   := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
    if LockDetecteM_MinorLvL == 1
        //High Minor Detector
        if close > Minor_HighLevel
 
            if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mHL'     
                Minor_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
                Minor_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
                Minor_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) 
            else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mLL'
                Minor_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
                Minor_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
                Minor_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
            else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mLH' or ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mHH'
                if ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) == 'mHL'     
                    Minor_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 2)
                    Minor_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 2)
                    Minor_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
                else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) == 'mLL'
                    Minor_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 2)
                    Minor_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 2)
                    Minor_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
                    
 
        if  ArrayValueAdv.get(ArrayValueAdv.size() - 1) > Minor_HighLevel
 
            if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mLH' 
                Minor_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
                Minor_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
                Minor_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) 
                Minor_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 2)
                Minor_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 2)
                Minor_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)                    
            else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mHH'
                Minor_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
                Minor_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
                Minor_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
                Minor_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 2)
                Minor_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 2)
                Minor_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
        //Low Minor Detector
        if close < Minor_LowLevel
 
            if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mLH'     
                Minor_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
                Minor_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
                Minor_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
            else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mHH'
                Minor_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
                Minor_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
                Minor_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
            else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mHL' or ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mLL'
                if ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) == 'mLH'     
                    Minor_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 2)
                    Minor_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 2)
                    Minor_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
                else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 2) == 'mHH'
                    Minor_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 2)
                    Minor_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 2)
                    Minor_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
        if ArrayValueAdv.get(ArrayValueAdv.size() - 1) < Minor_LowLevel
            if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mHL' 
                Minor_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
                Minor_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
                Minor_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
                Minor_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 2)
                Minor_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 2)
                Minor_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
            else if ArrayTypeAdv.get(ArrayTypeAdv.size() - 1) == 'mLL' 
                Minor_LowLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 1)
                Minor_LowIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 1)
                Minor_LowType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 1)
                Minor_HighLevel := ArrayValueAdv.get(ArrayValueAdv.size() - 2)
                Minor_HighIndex := ArrayIndexAdv.get(ArrayIndexAdv.size() - 2)
                Minor_HighType := ArrayTypeAdv.get(ArrayTypeAdv.size() - 2)
 
    //Reset Minor Levels
    if str.pos(ArrayTypeAdv.get(ArrayTypeAdv.size() - 1),'M') == 0
        LockDetecteM_MinorLvL := 0
        Minor_HighLevel := na
        Minor_LowLevel  := na
        Minor_HighIndex := na
        Minor_LowIndex  := na
        Minor_HighType  := na
        Minor_LowType   := na
        InternalTrend   := 'No Trend'
 
 
    //ChoCh and BoS Detector
        //Bos and ChoCh Line
            //Major
 
if  ta.crossover(close , Major_HighLevel) and  LockBreak_M != Major_HighIndex // Bullish BoS Detector
    if (ExternalTrend == 'No Trend' or ExternalTrend == 'Up Trend')
        Bullish_Major_BoS := true
        BoS_MajorType.push('Bull Major BoS')
        BoS_MajorIndex.push(bar_index)
        LockBreak_M := Major_HighIndex
        ExternalTrend := 'Up Trend'
    else if ExternalTrend == 'Down Trend' // Bullish ChoCh Detector
        Bullish_Major_ChoCh := true
        ChoCh_MajorType.push('Bull Major ChoCh')
        ChoCh_MajorIndex.push(bar_index)
        LockBreak_M := Major_HighIndex
        ExternalTrend := 'Up Trend'
else
    Bullish_Major_ChoCh := false
    Bullish_Major_BoS   := false 
 
 
if  ta.crossunder(close, Major_LowLevel) and  LockBreak_M!= Major_LowIndex // Bearish BoS Detector
    if ExternalTrend == 'No Trend' or ExternalTrend == 'Down Trend'
        Bearish_Major_BoS := true
        BoS_MajorType.push('Bear Major BoS')
        BoS_MajorIndex.push(bar_index)
        LockBreak_M := Major_LowIndex
        ExternalTrend := 'Down Trend'
    else if ExternalTrend == 'Up Trend' // Bearish ChoCh Detector
        Bearish_Major_ChoCh := true
        ChoCh_MajorType.push('Bear Major ChoCh')
        ChoCh_MajorIndex.push(bar_index)
        LockBreak_M := Major_LowIndex
        ExternalTrend := 'Down Trend'
else 
    Bearish_Major_ChoCh := false 
    Bearish_Major_BoS   := false 
 
 
            //Minor
 
if  Minor_HighLevel < close  and  LockBreak_m != Minor_HighIndex // Bullish BoS Detector
    if (InternalTrend == 'No Trend' or InternalTrend == 'Up Trend') 
        Bullish_Minor_BoS   := true
        BoS_MinorType.push('Bull Minor BoS')
        BoS_MinorIndex.push(bar_index)
        LockBreak_m := Minor_HighIndex
        InternalTrend := 'Up Trend'       
    else if InternalTrend == 'Down Trend' // Bullish ChoCh Detector
        Bullish_Minor_ChoCh := true
        ChoCh_MinorType.push('Bull Minor ChoCh')
        ChoCh_MinorIndex.push(bar_index)
        LockBreak_m := Minor_HighIndex
        InternalTrend := 'Up Trend'
else 
    Bullish_Minor_ChoCh := false
    Bullish_Minor_BoS   := false
 
 
if  Minor_LowLevel > close and  LockBreak_m!= Minor_LowIndex // Bearish BoS Detector
    if InternalTrend == 'No Trend' or InternalTrend == 'Down Trend'
        Bearish_Minor_BoS   := true
        BoS_MinorType.push('Bear Minor BoS')
        BoS_MinorIndex.push(bar_index)
        LockBreak_m := Minor_LowIndex
        InternalTrend := 'Down Trend'
    else if InternalTrend == 'Up Trend' // Bearish ChoCh Detector
        Bearish_Minor_ChoCh := true
        ChoCh_MinorType.push('Bear Minor ChoCh')
        ChoCh_MinorIndex.push(bar_index)
        LockBreak_m := Minor_LowIndex
        InternalTrend := 'Down Trend'
else
    Bearish_Minor_ChoCh := false
    Bearish_Minor_BoS   := false
    
 
//Order Block Data
    //Demand Major Main and Sub Order Blocks Data , ChoCh Origin
 
if ArrayIndexAdv.size() > 4 
    ChBuLowest := ta.lowest(bar_index - LastMLL)
    for i = 0 to  bar_index - LastMLL
        if low[i] > ChBuLowest
            CorrectBuIndex :=  CorrectBuIndex + 1
        else     
            CorrectBuIndex := 0 
 
    ChBuLowest := ta.lowest(bar_index - LastPivotIndex02)
    for i = 0 to bar_index - LastPivotIndex02
        if low[i] > ChBuLowest
            CorrectBuIndexSub :=  CorrectBuIndexSub + 1
        else     
            CorrectBuIndexSub := 0
 
if Bullish_Major_ChoCh and ArrayIndexAdv.size() > 2
    Last02MLL := LastMLL[1]
    if LastPivotType == 'MLL' and low[bar_index - LastMLL] <= ChBuLowest
        if LastPivotType == LastPivotType[1] 
            BuMChMain_Trigger := true
            BuMChMain_Index     := LastMLL
 
        else if LastPivotType != LastPivotType[1] //Change Last Pivot from mLL to MLL
            if low[bar_index - Last02MLL] < low[bar_index - LastMLL]
                BuMChMain_Trigger := true
                BuMChMain_Index     := Last02MLL               
                BuMChSub_Trigger := true
                BuMChSub_Index     := LastMLL
                
            else if low[bar_index - Last02MLL] > low[bar_index - LastMLL]
                BuMChMain_Trigger := true
                BuMChMain_Index     := LastMLL
              
    else if LastPivotType == 'MLL' and low[bar_index - LastMLL] > ChBuLowest
        if LastPivotType == LastPivotType[1] 
            BuMChMain_Trigger := true
            BuMChMain_Index     := LastMLL+ CorrectBuIndex
 
        else if LastPivotType != LastPivotType[1] //Change Last Pivot from mLL to MLL
            BuMChMain_Trigger  := true
            BuMChMain_Index     := LastMLL+ CorrectBuIndex
            if LastMHL > LastMLL + CorrectBuIndex
                BuMChSub_Trigger := true
                BuMChSub_Index     := LastMLL
 
    else if LastPivotType == 'MHL' and low[bar_index - LastMLL] <= ChBuLowest
        BuMChMain_Trigger := true
        BuMChMain_Index     := LastMLL
        BuMChSub_Trigger := true
        BuMChSub_Index     := LastMHL
    
    else if LastPivotType == 'MHL' and low[bar_index - LastMLL] > ChBuLowest
        BuMChMain_Trigger := true
        BuMChMain_Index     := LastMLL + CorrectBuIndex
 
        if LastMHL > LastMLL + CorrectBuIndex
            BuMChSub_Trigger := true
            BuMChSub_Index     := LastMHL
 
    else if LastPivotType == 'mHH' or LastPivotType == 'mLH'  or LastPivotType == 'MLH'  or LastPivotType == 'MHH' 
        if low[bar_index - LastMLL] <= ChBuLowest
            if LastPivotIndex02 == LastMLL
                BuMChMain_Trigger := true
                BuMChMain_Index     := LastMLL
    
            else if LastPivotIndex02 > LastMLL
                BuMChMain_Trigger := true
                BuMChMain_Index     := LastMLL
                if low[bar_index - LastPivotIndex02] <= ChBuLowestSub
                    BuMChSub_Trigger := true
                    BuMChSub_Index     := LastPivotIndex02  
                else if   low[bar_index - LastPivotIndex02] > ChBuLowestSub       
                    BuMChSub_Trigger := true
                    BuMChSub_Index     := LastPivotIndex02 +  CorrectBuIndexSub       
            else if LastPivotIndex02 < LastMLL
                BuMChMain_Trigger := true
                BuMChMain_Index     := LastMLL
 
        else if  low[bar_index - LastMLL] > ChBuLowest
            BuMChMain_Trigger   := true
            BuMChMain_Index     := LastMLL  + CorrectBuIndex
else
    BuMChMain_Trigger := false
    BuMChSub_Trigger  := false
 
 
    //Demand Major Order Blocks Data ,BoS Origin
 
if ArrayIndexAdv.size() > 10 
    BoSBuLowest := ta.lowest(bar_index - LastPivotIndex)
    for i = 0 to bar_index - LastPivotIndex
        if low[i] > BoSBuLowest
            CorrectBuBoSIndex :=  CorrectBuBoSIndex + 1
        else     
            CorrectBuBoSIndex := 0 
 
if ArrayIndexAdv.size() > 10
    BoSBuLowest02 := ta.lowest(bar_index - LastPivotIndex02)
    for i = 0 to bar_index - LastPivotIndex02
        if low[i] > BoSBuLowest02
            CorrectBuBoSIndex02 :=  CorrectBuBoSIndex02 + 1
        else     
            CorrectBuBoSIndex02 := 0 
 
 
if Bullish_Major_BoS and ArrayIndexAdv.size() > 2 
 
    if (LastPivotType == 'MHL' or LastPivotType == 'mHL' or 
         LastPivotType == 'MLL' or LastPivotType == 'mLL') and low[bar_index - LastPivotIndex] <= BoSBuLowest
 
        BuMBoS_Trigger := true
        BuMBoS_Index   := LastPivotIndex 
 
    if (LastPivotType == 'MHL' or LastPivotType == 'mHL' or 
         LastPivotType == 'MLL' or LastPivotType == 'mLL') and low[bar_index - LastPivotIndex] > BoSBuLowest
 
        BuMBoS_Trigger := true
        BuMBoS_Index   := LastPivotIndex + CorrectBuBoSIndex    
 
    if (LastPivotType == 'mHH' or LastPivotType == 'mLH' or 
     LastPivotType == 'MHH' or LastPivotType == 'MLH') and low[bar_index - LastPivotIndex02] <= BoSBuLowest02
 
        BuMBoS_Trigger := true
        BuMBoS_Index   := LastPivotIndex02
 
    if (LastPivotType == 'mHH' or LastPivotType == 'mLH' or 
     LastPivotType == 'MHH' or LastPivotType == 'MLH') and low[bar_index - LastPivotIndex02] > BoSBuLowest02
 
        BuMBoS_Trigger := true
        BuMBoS_Index   := LastPivotIndex02 + CorrectBuBoSIndex02
 
else
    BuMBoS_Trigger := false
 
 
    //Supply Major Main and Sub Order Blocks Data , ChoCh Origin
 
if ArrayIndexAdv.size() > 4 
    ChBeHighest := ta.highest(bar_index - LastMHH)
    for i = 0 to bar_index - LastMHH
        if high[i] < ChBeHighest
            CorrectBeIndex :=  CorrectBeIndex + 1
        else     
            CorrectBeIndex := 0 
 
    ChBeHighestSub := ta.highest(bar_index - LastPivotIndex02)
    for i = 0 to bar_index - LastPivotIndex02
        if high[i] < ChBeHighestSub
            CorrectBeIndexSub :=  CorrectBeIndexSub + 1
        else     
            CorrectBeIndexSub := 0 
 
 
if Bearish_Major_ChoCh and ArrayIndexAdv.size() > 2
    Last02MHH := LastMHH[1]
    if LastPivotType == 'MHH' and high[bar_index - LastMHH] >= ChBeHighest
        if LastPivotType == LastPivotType[1]
            BeMChMain_Trigger :=  true
            BeMChMain_Index   :=  LastMHH
 
        else if LastPivotType != LastPivotType[1] //Change Last Pivot from MHH to MHH
            if high[bar_index - Last02MHH] > high[bar_index - LastMHH]
                BeMChMain_Trigger := true
                BeMChMain_Index   := Last02MHH
                BeMChSub_Trigger  := true
                BeMChSub_Index    := LastMHH
 
            else if high[bar_index - Last02MHH] < high[bar_index - LastMHH]
                BeMChMain_Trigger :=  true
                BeMChMain_Index   :=  LastMHH
 
    else if LastPivotType == 'MHH' and high[bar_index - LastMHH] < ChBeHighest
        if LastPivotType == LastPivotType[1] 
            BeMChMain_Trigger :=  true
            BeMChMain_Index   :=  LastMHH + CorrectBeIndex
 
        else if LastPivotType != LastPivotType[1] //Change Last Pivot from MHH to MHH
            BeMChMain_Trigger :=  true
            BeMChMain_Index   :=  LastMHH + CorrectBeIndex
            if  LastMLH > LastMHH + CorrectBuIndex
                BeMChSub_Trigger  := true
                BeMChSub_Index    := LastMHH
 
 
    else if LastPivotType == 'MLH' and  high[bar_index - LastMHH] >= ChBeHighest
        
        BeMChMain_Trigger :=  true
        BeMChMain_Index   :=  LastMHH
        BeMChSub_Trigger  :=  true
        BeMChSub_Index    :=  LastMLH
 
    else if LastPivotType == 'MLH' and high[bar_index - LastMHH] < ChBeHighest
        BeMChMain_Trigger :=  true
        BeMChMain_Index   :=  LastMHH + CorrectBeIndex
 
        if LastMLH > LastMHH + CorrectBeIndex
            BeMChSub_Trigger  := true
            BeMChSub_Index    := LastMLH
 
    else if LastPivotType == 'mLL' or LastPivotType == 'mHL' or LastPivotType == 'MHL' or  LastPivotType == 'MLL'
        if high[bar_index - LastMHH] >= ChBeHighest
            if LastPivotIndex02 == LastMHH
                BeMChMain_Trigger :=  true
                BeMChMain_Index   :=  LastMHH
    
            else if LastPivotIndex02 > LastMHH
                BeMChMain_Trigger  :=  true
                BeMChMain_Index   :=  LastMHH
                if high[bar_index -  LastPivotIndex02] >= ChBeHighestSub
                    BeMChSub_Trigger  := true
                    BeMChSub_Index    := LastPivotIndex02
                else if high[bar_index - LastPivotIndex02] < ChBeHighestSub
                    BeMChSub_Trigger  := true
                    BeMChSub_Index    := LastPivotIndex02 + CorrectBeIndexSub            
 
            else if LastPivotIndex02 < LastMHH
                BeMChMain_Trigger :=  true
                BeMChMain_Index   :=  LastMHH
        else if high[bar_index - LastMHH] < ChBeHighest
            BeMChMain_Trigger :=  true
            BeMChMain_Index   :=  LastMHH + CorrectBeIndex
else 
    BeMChMain_Trigger :=  false
    BeMChSub_Trigger  :=  false
 
 
    //Supply Major Order Blocks Data , BoS Origin
 
 
if ArrayIndexAdv.size() > 10 
    BoSBeHighest = ta.highest(bar_index - LastPivotIndex)
    for i = 0 to bar_index - LastPivotIndex
        if high[i] < BoSBeHighest
            CorrectBeBoSIndex :=  CorrectBeBoSIndex + 1
        else     
            CorrectBeBoSIndex := 0 
 
if ArrayIndexAdv.size() > 10 
    BoSBeHighest02 = ta.highest(bar_index - LastPivotIndex02)
    for i = 0 to bar_index - LastPivotIndex02
        if high[i] < BoSBeHighest02
            CorrectBeBoSIndex02 :=  CorrectBeBoSIndex02 + 1
        else     
            CorrectBeBoSIndex02 := 0 
 
if Bearish_Major_BoS and ArrayIndexAdv.size() > 2  
 
    if (LastPivotType == 'mLH' or LastPivotType == 'mHH' or 
         LastPivotType == 'MLH' or LastPivotType == 'MHH') and high[bar_index - LastPivotIndex] >= BoSBeHighest
        BeMBoS_Trigger := true
        BeMBoS_Index    := LastPivotIndex
    
    if (LastPivotType == 'mLH' or LastPivotType == 'mHH' or 
         LastPivotType == 'MLH' or LastPivotType == 'MHH') and high[bar_index - LastPivotIndex] < BoSBeHighest
        BeMBoS_Trigger := true
        BeMBoS_Index     := LastPivotIndex + CorrectBeBoSIndex
 
    if (LastPivotType == 'mLL' or LastPivotType == 'mHL' or 
     LastPivotType == 'MLL' or LastPivotType == 'MHL') and high[bar_index - LastPivotIndex02] >= BoSBeHighest02
        BeMBoS_Trigger := true
        BeMBoS_Index     := LastPivotIndex02
 
    if (LastPivotType == 'mLL' or LastPivotType == 'mHL' or 
     LastPivotType == 'MLL' or LastPivotType == 'MHL') and high[bar_index - LastPivotIndex02] < BoSBeHighest02
        BeMBoS_Trigger := true
        BeMBoS_Index     := LastPivotIndex02 + CorrectBeBoSIndex02
 
else 
    BeMBoS_Trigger := false
 
/////////////////////////////////////
///////////////KillZones/////////////
/////////////////////////////////////
 
 
[SessTimeA, KillTimeA, OpenA, HighA, LowA, CloseA, LowTouchAlertA, HighTouchAlertA] = Sess.SessionDetector('Asia'  , Asia_SessTime, Asia_KillTime, show_AsiaSess, show_AsiaKill, 'Kill Zone', ShowMoreInfo ,Asia_color,ColorMoreInfo)
[SessTimeL, KillTimeL, OpenL, HighL, LowL, CloseL, LowTouchAlertL, HighTouchAlertL] = Sess.SessionDetector('London', London_SessTime, London_KillTime, show_LondonSess, show_LondonKill, 'Kill Zone', ShowMoreInfo ,London_color,ColorMoreInfo)
[SessTimeNYa, KillTimeNYa, OpenNYa, HighNYa, LowNYa, CloseNYa, LowTouchAlertNYa, HighTouchAlertNYa] = Sess.SessionDetector('NY am' , amNewyork_SessTime, amNewyork_KillTime, show_amNewyorkSess, show_amNewyorkKill, 'Kill Zone', ShowMoreInfo ,amNewyork_color,ColorMoreInfo)
[SessTimeNYp, KillTimeNYp, OpenNYp, HighNYp, LowNYp, CloseNYp, LowTouchAlertNYp, HighTouchAlertNYp] = Sess.SessionDetector('NY pm' , pmNewyork_SessTime, pmNewyork_KillTime, show_pmNewyorkSess, show_pmNewyorkKill, 'Kill Zone', ShowMoreInfo ,pmNewyork_color,ColorMoreInfo)
 
AlertCondition = LowTouchAlertA or HighTouchAlertA or LowTouchAlertL or HighTouchAlertL or LowTouchAlertNYa or HighTouchAlertNYa or LowTouchAlertNYp or HighTouchAlertNYp 
 
// Alert Message
SessMessage = if LowTouchAlertA
    "The Lowest of Asia's Kill Zone Was Touched."
else if HighTouchAlertA
    "The Highest of Asia's Kill Zone Was Touched."
else if LowTouchAlertL
    "The Lowest of London's Kill Zone Was Touched."
else if HighTouchAlertL
    "The Highest of London's Kill Zone Was Touched."
else if LowTouchAlertNYa
    "The Lowest of NY am's Kill Zone Was Touched."
else if HighTouchAlertNYa
    "The Highest of NY am's Kill Zone Was Touched."
else if LowTouchAlertNYp
    "The Lowest of NY pm's Kill Zone Was Touched."
else if HighTouchAlertNYp
    "The Highest of Pm pm's Kill Zone Was Touched."
 
////////////////////////////////////////////////////
///////////////Order Block Refinement///////////////
////////////////////////////////////////////////////
 
 
    //Demand
        //Demand Main Zone, ChoCh Origin
[BuMChMain_Xd1, BuMChMain_Xd2, BuMChMain_Yd12, BuMChMain_Xp1, BuMChMain_Xp2, BuMChMain_Yp12] = 
 Refiner.OBRefiner('Demand', RefineDmainCh ? 'On' : 'Off', RefineMeDmainCh ,BuMChMain_Trigger,  BuMChMain_Index)
 
    //Supply
        //Supply Main Zone, ChoCh Origin    
[BeMChMain_Xd1, BeMChMain_Xd2, BeMChMain_Yd12, BeMChMain_Xp1, BeMChMain_Xp2, BeMChMain_Yp12] = 
 Refiner.OBRefiner('Supply', RefineSmainCh ? 'On' : 'Off', RefineMeSmainCh ,BeMChMain_Trigger,  BeMChMain_Index)
 
 
var KillBar = 0
if ((KillTimeA==1 and KillTimeA[1]==0) or (KillTimeL==1 and KillTimeL[1]==0) or  (KillTimeNYa==1 and KillTimeNYa[1]==0) or (KillTimeNYp==1 and KillTimeNYp[1]==0) )
    KillBar := bar_index
 
condD = BuMChMain_Trigger and (KillTimeA==1 or KillTimeL==1 or  KillTimeNYa==1 or KillTimeNYp==1 ) and BuMChMain_Xd1 >= KillBar
condS = BeMChMain_Trigger and (KillTimeA==1 or KillTimeL==1 or  KillTimeNYa==1 or KillTimeNYp==1 ) and BeMChMain_Xd1 >= KillBar
 
 
var bool ValOBBarD = true
 
if ((SessTimeA==0 and SessTimeA[1]== 1) or (SessTimeL== 0 and SessTimeL[1]== 1) or (SessTimeNYa== 0 and SessTimeNYa[1]== 1) or (SessTimeNYp== 0 and SessTimeNYp[1]== 1) )
    ValOBBarD := false
 
if condD
    ValOBBarD := true
 
 
var bool ValOBBarS = true
 
if ((SessTimeA==0 and SessTimeA[1]== 1) or (SessTimeL== 0 and SessTimeL[1]== 1) or (SessTimeNYa== 0 and SessTimeNYa[1]== 1) or (SessTimeNYp== 0 and SessTimeNYp[1]== 1) )
    ValOBBarS := false
 
if condS
    ValOBBarS := true
 
/////////////////////////////////////
///////////////FVG///////////////////
/////////////////////////////////////
 
[DConditionFVG, DDFVG, DPFVG, BarDFVG, SConditionFVG, SDFVG, SPFVG, BarSFVG] = FVG.FVGDetector(PFVGFilter ? 'On' : 'Off', PFVGFilterType, false, false)
 
condDFVG = DConditionFVG and (KillTimeA==1 or KillTimeL==1 or  KillTimeNYa==1 or KillTimeNYp==1 ) and BarDFVG >= KillBar
condSFVG = SConditionFVG and (KillTimeA==1 or KillTimeL==1 or  KillTimeNYa==1 or KillTimeNYp==1 ) and BarSFVG >= KillBar
 
var bool ValOBBarDFVG = true
 
if ((SessTimeA==0 and SessTimeA[1]== 1) or (SessTimeL== 0 and SessTimeL[1]== 1) or (SessTimeNYa== 0 and SessTimeNYa[1]== 1) or (SessTimeNYp== 0 and SessTimeNYp[1]== 1) )
    ValOBBarDFVG := false
 
if condDFVG
    ValOBBarDFVG := true
 
 
var bool ValOBBarSFVG = true
 
if ((SessTimeA==0 and SessTimeA[1]== 1) or (SessTimeL== 0 and SessTimeL[1]== 1) or (SessTimeNYa== 0 and SessTimeNYa[1]== 1) or (SessTimeNYp== 0 and SessTimeNYp[1]== 1) )
    ValOBBarSFVG := false
 
if condSFVG
    ValOBBarSFVG := true
 
/////////////////////////////////////
///////////////Drawing///////////////
/////////////////////////////////////
 
 
// (OBType, TriggerCondition, distalPrice, proximalPrice, Index, OBValidGlobal, OBValidDis, MitigationLvL, ShowAll, Show, ColorZone)
[Alert_DMMM] = Drawing.OBDrawing('Demand', condD ,BuMChMain_Yd12, BuMChMain_Yp12 ,BuMChMain_Xd1, ValOBBarD, OBVaP  , MLOB , ShowAllOB ,ShowDmainCh, ColorDmainCh)
[Alert_SMMM] = Drawing.OBDrawing('Supply', condS ,BeMChMain_Yd12, BeMChMain_Yp12 ,BeMChMain_Xd1, ValOBBarS, OBVaP  , MLOB , ShowAllOB ,ShowSmainCh, ColorSmainCh)
 
[Alert_DFVG] = Drawing.OBDrawing('Demand', condDFVG ,DDFVG, DPFVG ,BarDFVG, ValOBBarDFVG, FVGVaP  , MLFVG , ShowAllFVG ,PShowDeFVG, ColorDFVG)
[Alert_SFVG] = Drawing.OBDrawing('Supply', condSFVG ,SDFVG, SPFVG ,BarSFVG, ValOBBarSFVG, FVGVaP  , MLFVG , ShowAllFVG ,PShowSuFVG, ColorSFVG)
 
 
///////////////////////////////////
///////////////Alert///////////////
///////////////////////////////////
        //OUTPUT ==> Alert Trigger
 
 
Alert.AlertSender(AlertCondition , Alert, 'ICT KillZones - Sess LvL Touched [TradingFinder] ', 'signal', '', 'Full' ,'Once Per Bar', 'UTC', 'Off', SessMessage, open, high, low, close,0,0,0,0,0)
 
Alert.AlertSender(Alert_DMMM  , Alert_DMM, 'ICT KillZones - D OB Touched [TradingFinder] ', 'Bullish', 'Order Block Signal', 'Full' ,Frequncy, UTC, MoreInfo, 'The Price Touched the ' + MLOB + ' Level in Demand OB.', open, high, low, close,0,0,0, BuMChMain_Yd12 , BuMChMain_Yp12)
Alert.AlertSender(Alert_SMMM  , Alert_SMM, 'ICT KillZones - S OB Touched [TradingFinder] ', 'Bearish', 'Order Block Signal', 'Full' ,Frequncy, UTC, MoreInfo, 'The Price Touched the ' + MLOB + ' Level in Supply OB.', open, high, low, close,0,0,0, BeMChMain_Yd12 , BeMChMain_Yp12)
 
Alert.AlertSender(Alert_DFVG  , Alert_DFVGa, 'ICT KillZones - D FVG Touched [TradingFinder] ', 'Bullish', 'Order Block Signal', 'Full' ,Frequncy, UTC, MoreInfo, 'The Price Touched the ' + MLFVG + ' Level in Demand FVG.', open, high, low, close,0,0,0, DDFVG , DPFVG)
Alert.AlertSender(Alert_SFVG  , Alert_SFVGa, 'ICT KillZones - S FVG Touched [TradingFinder] ', 'Bearish', 'Order Block Signal', 'Full' ,Frequncy, UTC, MoreInfo, 'The Price Touched the ' + MLFVG + ' Level in Supply FVG.', open, high, low, close,0,0,0, SDFVG , SPFVG)

← 返回列表