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