9109 lines
202 KiB
Plaintext
9109 lines
202 KiB
Plaintext
///////////////////////////////////////////////////////
|
||
//
|
||
// SaherElm IT Center MQL5 Class Library
|
||
// --------------------------------------
|
||
// Name: XPOI
|
||
// Description: Provides Point of Interests ...
|
||
// - Swing Highs;
|
||
// - Swing Lows;
|
||
//
|
||
// Maintainer:
|
||
// ------------
|
||
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
|
||
//
|
||
//////////////////////////////////////////////////////
|
||
//
|
||
// Global Properties ...
|
||
#property library
|
||
#property copyright "Copyright 2023, SaherElm IT Center"
|
||
#property link "https://www.saherelm.ir"
|
||
#property version "1.00"
|
||
#property strict
|
||
|
||
//
|
||
// Imports ...
|
||
|
||
//
|
||
#include "../Classes/x-saherelm.x-chart-objects.class.mq5"
|
||
#include "../Classes/x-saherelm.xalert.class.mq5"
|
||
|
||
//
|
||
#include <Arrays/ArrayObj.mqh>
|
||
#include <ChartObjects/ChartObject.mqh>
|
||
#include <ChartObjects/ChartObjectsArrows.mqh>
|
||
#include <ChartObjects/ChartObjectsLines.mqh>
|
||
|
||
//
|
||
// Implementation ...
|
||
|
||
//
|
||
class XCPOI : public XSCBaseAlert
|
||
{
|
||
//
|
||
public:
|
||
//
|
||
|
||
//
|
||
// Constructors ...
|
||
/**
|
||
* Create an Instance ...
|
||
*
|
||
* @param symbol: String ...
|
||
* @param period: ENUM_TIMEFRAMES member ...
|
||
*/
|
||
void XCPOI(
|
||
string symbol,
|
||
ENUM_TIMEFRAMES period //
|
||
)
|
||
{
|
||
//
|
||
// Attach Required Properties ...
|
||
mSymbol = symbol;
|
||
mPeriod = period;
|
||
|
||
//
|
||
// Initialize Bar Tracker ...
|
||
mBarTracker.Init(
|
||
mSymbol,
|
||
mPeriod //
|
||
);
|
||
|
||
//
|
||
// Apply Default Configurations ...
|
||
ApplyDefaultConfig();
|
||
}
|
||
|
||
//
|
||
// Deconstructor ...
|
||
void ~XCPOI()
|
||
{
|
||
//
|
||
DestroyPOIs();
|
||
DestroyObjects();
|
||
DestroySessions();
|
||
DestroyEventListeners();
|
||
}
|
||
|
||
//
|
||
// Getter(s) / Setter(s) ...
|
||
|
||
/**
|
||
* Get Chart ID ...
|
||
*
|
||
* @return ( long )
|
||
*/
|
||
long ChartID()
|
||
{
|
||
return mChartID;
|
||
}
|
||
|
||
/**
|
||
* Set Chart ID ...
|
||
*
|
||
* @param value: Long
|
||
*/
|
||
void ChartID(long value)
|
||
{
|
||
//
|
||
if (value < 0)
|
||
{
|
||
value = 0;
|
||
}
|
||
|
||
//
|
||
mChartID = value;
|
||
}
|
||
|
||
/**
|
||
* Get Sub Window Number ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int Window()
|
||
{
|
||
return mWindow;
|
||
}
|
||
|
||
/**
|
||
* Get Sub Window Number ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void Window(int value)
|
||
{
|
||
//
|
||
if (value < 0)
|
||
{
|
||
value = 0;
|
||
}
|
||
|
||
//
|
||
mWindow = value;
|
||
}
|
||
|
||
/**
|
||
* Get Max Number of POIs which holds ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int MaxNumberOfPOIs()
|
||
{
|
||
return mMaxNumberOfPOIs;
|
||
}
|
||
|
||
/**
|
||
* Set Max Number of POIs which holds ...
|
||
* 0 => Infinity ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void MaxNumberOfPOIs(int value)
|
||
{
|
||
//
|
||
if (value < 0)
|
||
{
|
||
value = 0;
|
||
}
|
||
|
||
//
|
||
mMaxNumberOfPOIs = value;
|
||
}
|
||
|
||
/**
|
||
* Get Number of POI(s) which must Find at Initializations ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int MaxNumberOfRequiredPOIs()
|
||
{
|
||
return mMaxNumberOfRequiredPOIs;
|
||
}
|
||
|
||
/**
|
||
* Set Number of POI(s) which must Find at Initializations ...
|
||
* 2 is Default ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void MaxNumberOfRequiredPOIs(int value)
|
||
{
|
||
//
|
||
if (value < 2)
|
||
{
|
||
value = 2;
|
||
}
|
||
|
||
//
|
||
mMaxNumberOfRequiredPOIs = value;
|
||
}
|
||
|
||
/**
|
||
* Check Is Locked or not ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool IsLocked()
|
||
{
|
||
return mLock;
|
||
}
|
||
|
||
//
|
||
// POI(s) Configs ...
|
||
|
||
//
|
||
// Trading Days ...
|
||
|
||
/**
|
||
* Get Detect Trading Days State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowTradingDays()
|
||
{
|
||
return mAllowTradingDays;
|
||
}
|
||
|
||
/**
|
||
* Set Detect Trading Days State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowTradingDays(bool value)
|
||
{
|
||
mAllowTradingDays = value;
|
||
}
|
||
|
||
/**
|
||
* Get Draw Trading Days State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowDrawTradingDays()
|
||
{
|
||
return mAllowDrawTradingDays;
|
||
}
|
||
|
||
/**
|
||
* Set Draw Trading Days State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowDrawTradingDays(bool value)
|
||
{
|
||
mAllowDrawTradingDays = value;
|
||
}
|
||
|
||
/**
|
||
* Get Trading Days Start Color ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color TradingDaysStartColor()
|
||
{
|
||
return mTradingDaysStartColor;
|
||
}
|
||
|
||
/**
|
||
* Set Trading Days Start Color ...
|
||
*
|
||
* @param value: Argument 1
|
||
*/
|
||
void TradingDaysStartColor(color value)
|
||
{
|
||
mTradingDaysStartColor = value;
|
||
}
|
||
|
||
/**
|
||
* Get Trading Days Start Style ...
|
||
*
|
||
* @return ( ENUM_LINE_STYLE )
|
||
*/
|
||
ENUM_LINE_STYLE TradingDaysStartStyle()
|
||
{
|
||
return mTradingDaysStartStyle;
|
||
}
|
||
|
||
/**
|
||
* Set Trading Days Start Style ...
|
||
*
|
||
* @param value: ENUM_LINE_STYLE member ...
|
||
*/
|
||
void TradingDaysStartStyle(ENUM_LINE_STYLE value)
|
||
{
|
||
mTradingDaysStartStyle = value;
|
||
}
|
||
|
||
/**
|
||
* Get Trading Days End Color ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color TradingDaysEndColor()
|
||
{
|
||
return mTradingDaysEndColor;
|
||
}
|
||
|
||
/**
|
||
* Set Trading Days End Color ...
|
||
*
|
||
* @param value: Argument 1
|
||
*/
|
||
void TradingDaysEndColor(color value)
|
||
{
|
||
mTradingDaysEndColor = value;
|
||
}
|
||
|
||
/**
|
||
* Get Trading Days End Style ...
|
||
*
|
||
* @return ( ENUM_LINE_STYLE )
|
||
*/
|
||
ENUM_LINE_STYLE TradingDaysEndStyle()
|
||
{
|
||
return mTradingDaysEndStyle;
|
||
}
|
||
|
||
/**
|
||
* Set Trading Days End Style ...
|
||
*
|
||
* @param value: ENUM_LINE_STYLE member ...
|
||
*/
|
||
void TradingDaysEndStyle(ENUM_LINE_STYLE value)
|
||
{
|
||
mTradingDaysEndStyle = value;
|
||
}
|
||
|
||
//
|
||
// Sessions ...
|
||
|
||
/**
|
||
* Get Detect Market Sessions State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowMarketSessions()
|
||
{
|
||
return mAllowMarketSessions;
|
||
}
|
||
|
||
/**
|
||
* Set Detect Market Sessions State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowMarketSessions(bool value)
|
||
{
|
||
mAllowMarketSessions = value;
|
||
}
|
||
|
||
/**
|
||
* Get Draw Market Sessions State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowDrawMarketSessions()
|
||
{
|
||
return mAllowDrawMarketSessions;
|
||
}
|
||
|
||
/**
|
||
* Set Draw Market Sessions State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowDrawMarketSessions(bool value)
|
||
{
|
||
mAllowDrawMarketSessions = value;
|
||
}
|
||
|
||
/**
|
||
* Get Session Working Hors ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int SessionOpenHours()
|
||
{
|
||
return mSessionOpenHours;
|
||
}
|
||
|
||
/**
|
||
* Set Session Working Hors ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void SessionOpenHours(int value)
|
||
{
|
||
//
|
||
if (value <= 0)
|
||
{
|
||
value = 9;
|
||
}
|
||
|
||
//
|
||
mSessionOpenHours = value;
|
||
}
|
||
|
||
//
|
||
// Swing High ...
|
||
|
||
/**
|
||
* Get Detect Swing Highs State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowSwingHighs()
|
||
{
|
||
return mAllowSwingHighs;
|
||
}
|
||
|
||
/**
|
||
* Set Detect Swing Highs State ...
|
||
*
|
||
* @param value: Boolean
|
||
*/
|
||
void AllowSwingHighs(bool value)
|
||
{
|
||
mAllowSwingHighs = value;
|
||
}
|
||
|
||
/**
|
||
* Get Draw Swing Highs State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowDrawSwingHighs()
|
||
{
|
||
return mAllowDrawSwingHighs;
|
||
}
|
||
|
||
/**
|
||
* Set Draw Swing Highs State ...
|
||
*
|
||
* @param value: Boolean
|
||
*/
|
||
void AllowDrawSwingHighs(bool value)
|
||
{
|
||
mAllowDrawSwingHighs = value;
|
||
}
|
||
|
||
/**
|
||
* Get Threshold Required for Swing High Detection ...
|
||
*
|
||
* @return ( double )
|
||
*/
|
||
double SwingHighThreshold()
|
||
{
|
||
return mSwingHighThreshold;
|
||
}
|
||
|
||
/**
|
||
* Set Threshold Required for Swing High Detection ...
|
||
*
|
||
* @param value: Double ...
|
||
*/
|
||
void SwingHighThreshold(double value)
|
||
{
|
||
//
|
||
if (value < 0)
|
||
{
|
||
value = 0;
|
||
}
|
||
|
||
//
|
||
mSwingHighThreshold = value;
|
||
}
|
||
|
||
/**
|
||
* Get Swing High Arrow Code ...
|
||
*
|
||
* @return ( char )
|
||
*/
|
||
char SwingHighArrowCode()
|
||
{
|
||
return mSwingHighArrowCode;
|
||
}
|
||
|
||
/**
|
||
* Set Swing High Arrow Code ...
|
||
*
|
||
* @param value: Char ...
|
||
*/
|
||
void SwingHighArrowCode(char value)
|
||
{
|
||
mSwingHighArrowCode = value;
|
||
}
|
||
|
||
/**
|
||
* Get Swing High Color ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color SwingHighColor()
|
||
{
|
||
return mSwingHighColor;
|
||
}
|
||
|
||
/**
|
||
* Get Swing High Color ...
|
||
*
|
||
* @param value: Color
|
||
*/
|
||
void SwingHighColor(color value)
|
||
{
|
||
mSwingHighColor = value;
|
||
}
|
||
|
||
/**
|
||
* Get Swing High Width ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int SwingHighWidth()
|
||
{
|
||
return mSwingHighWidth;
|
||
}
|
||
|
||
/**
|
||
* Set Swing High Width ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void SwingHighWidth(int value)
|
||
{
|
||
//
|
||
if (value < 1)
|
||
{
|
||
value = 1;
|
||
}
|
||
|
||
//
|
||
mSwingHighWidth = value;
|
||
}
|
||
|
||
//
|
||
// Swing Low ...
|
||
|
||
/**
|
||
* Get Detect Swing Lows State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowSwingLows()
|
||
{
|
||
return mAllowSwingLows;
|
||
}
|
||
|
||
/**
|
||
* Set Detect Swing Lows State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowSwingLows(bool value)
|
||
{
|
||
mAllowSwingLows = value;
|
||
}
|
||
|
||
/**
|
||
* Get Draw Swing Lows State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowDrawSwingLows()
|
||
{
|
||
return mAllowDrawSwingLows;
|
||
}
|
||
|
||
/**
|
||
* Set Draw Swing Lows State ...
|
||
*
|
||
* @param value: Boolean
|
||
*/
|
||
void AllowDrawSwingLows(bool value)
|
||
{
|
||
mAllowDrawSwingLows = value;
|
||
}
|
||
|
||
/**
|
||
* Get Threshold Required for Swing Low Detection ...
|
||
*
|
||
* @return ( double )
|
||
*/
|
||
double SwingLowThreshold()
|
||
{
|
||
return mSwingLowThreshold;
|
||
}
|
||
|
||
/**
|
||
* Set Threshold Required for Swing Low Detection ...
|
||
*
|
||
* @param value: Double ...
|
||
*/
|
||
void SwingLowThreshold(double value)
|
||
{
|
||
//
|
||
if (value < 0)
|
||
{
|
||
value = 0;
|
||
}
|
||
|
||
//
|
||
mSwingLowThreshold = value;
|
||
}
|
||
|
||
/**
|
||
* Get Swing Low Arrow Code ...
|
||
*
|
||
* @return ( char )
|
||
*/
|
||
char SwingLowArrowCode()
|
||
{
|
||
return mSwingLowArrowCode;
|
||
}
|
||
|
||
/**
|
||
* Set Swing Low Arrow Code ...
|
||
*
|
||
* @param value: Char ...
|
||
*/
|
||
void SwingLowArrowCode(char value)
|
||
{
|
||
mSwingLowArrowCode = value;
|
||
}
|
||
|
||
/**
|
||
* Get Swing Low Color ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color SwingLowColor()
|
||
{
|
||
return mSwingLowColor;
|
||
}
|
||
|
||
/**
|
||
* Get Swing Low Color ...
|
||
*
|
||
* @param value: Color
|
||
*/
|
||
void SwingLowColor(color value)
|
||
{
|
||
mSwingLowColor = value;
|
||
}
|
||
|
||
/**
|
||
* Get Swing Low Width ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int SwingLowWidth()
|
||
{
|
||
return mSwingLowWidth;
|
||
}
|
||
|
||
/**
|
||
* Set Swing Low Width ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void SwingLowWidth(int value)
|
||
{
|
||
//
|
||
if (value < 1)
|
||
{
|
||
value = 1;
|
||
}
|
||
|
||
//
|
||
mSwingLowWidth = value;
|
||
}
|
||
|
||
//
|
||
// Momentum Bars ...
|
||
|
||
/**
|
||
* Get Detect Momentum Bars State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowMomentumBars()
|
||
{
|
||
return mAllowMomentumBars;
|
||
}
|
||
|
||
/**
|
||
* Set Detect Momentum Bars State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowMomentumBars(bool value)
|
||
{
|
||
mAllowMomentumBars = value;
|
||
}
|
||
|
||
/**
|
||
* Get Draw Momentum Bars State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowDrawMomentumBars()
|
||
{
|
||
return mAllowDrawMomentumBars;
|
||
}
|
||
|
||
/**
|
||
* Set Draw Momentum Bars State ...
|
||
*
|
||
* @param value: Boolean
|
||
*/
|
||
void AllowDrawMomentumBars(bool value)
|
||
{
|
||
mAllowDrawMomentumBars = value;
|
||
}
|
||
|
||
/**
|
||
* Get Momentum Bar Percent ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int MomentumBarPercent()
|
||
{
|
||
return mMomentumBarPercent;
|
||
}
|
||
|
||
/**
|
||
* Set Momentum Bar Percent ...
|
||
*
|
||
* @param value: Integer
|
||
*/
|
||
void MomentumBarPercent(int value)
|
||
{
|
||
//
|
||
if (value < 0)
|
||
{
|
||
value = 0;
|
||
}
|
||
|
||
//
|
||
mMomentumBarPercent = value;
|
||
}
|
||
|
||
/**
|
||
* Get Momentum Bar Sharp Ratio ...
|
||
*
|
||
* @return ( double )
|
||
*/
|
||
double MomentumBarSharpRatio()
|
||
{
|
||
return mMomentumBarSharpRatio;
|
||
}
|
||
|
||
/**
|
||
* Set Momentum Bar Sharp Ratio ...
|
||
*
|
||
* @param value: Double ...
|
||
*/
|
||
void MomentumBarSharpRatio(double value)
|
||
{
|
||
//
|
||
if (value < 0)
|
||
{
|
||
value = 0;
|
||
}
|
||
|
||
//
|
||
mMomentumBarSharpRatio = value;
|
||
}
|
||
|
||
/**
|
||
* Get Momentum Bar Loopback ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int MomentumBarLoopBack()
|
||
{
|
||
return mMomentumBarLoopBack;
|
||
}
|
||
|
||
/**
|
||
* Set Momentum Bar Loopback ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void MomentumBarLoopBack(int value)
|
||
{
|
||
//
|
||
if (value < 0)
|
||
{
|
||
value = 0;
|
||
}
|
||
|
||
//
|
||
mMomentumBarLoopBack = value;
|
||
}
|
||
|
||
/**
|
||
* Get Momentum Bar Width ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int MomentumBarWidth()
|
||
{
|
||
return mMomentumBarWidth;
|
||
}
|
||
|
||
/**
|
||
* Set Momentum Bar Width ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void MomentumBarWidth(int value)
|
||
{
|
||
mMomentumBarWidth = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bullish Momentum Bar Arrow Code ...
|
||
*
|
||
* @return ( char )
|
||
*/
|
||
char MomentumBarBullishArrowCode()
|
||
{
|
||
return mMomentumBarBullishArrowCode;
|
||
}
|
||
|
||
/**
|
||
* Set Bullish Momentum Bar Arrow Code ...
|
||
*
|
||
* @param value: Char ...
|
||
*/
|
||
void MomentumBarBullishArrowCode(char value)
|
||
{
|
||
mMomentumBarBullishArrowCode = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bullish Momentum Bar Color ...
|
||
*
|
||
* @return ( char )
|
||
*/
|
||
char MomentumBarBearishArrowCode()
|
||
{
|
||
return mMomentumBarBearishArrowCode;
|
||
}
|
||
|
||
/**
|
||
* Set Bullish Momentum Bar Color ...
|
||
*
|
||
* @param value: Color ...
|
||
*/
|
||
void MomentumBarBearishArrowCode(char value)
|
||
{
|
||
mMomentumBarBearishArrowCode = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bearish Momentum Bar Arrow Code ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color MomentumBarBullishColor()
|
||
{
|
||
return mMomentumBarBullishColor;
|
||
}
|
||
|
||
/**
|
||
* Set Bearish Momentum Bar Arrow Code ...
|
||
*
|
||
* @param value: Color ...
|
||
*/
|
||
void MomentumBarBullishColor(color value)
|
||
{
|
||
mMomentumBarBullishColor = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bearish Momentum Bar Color ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color MomentumBarBearishColor()
|
||
{
|
||
return mMomentumBarBearishColor;
|
||
}
|
||
|
||
/**
|
||
* Set Bearish Momentum Bar Color ...
|
||
*
|
||
* @param value: Color ...
|
||
*/
|
||
void MomentumBarBearishColor(color value)
|
||
{
|
||
mMomentumBarBearishColor = value;
|
||
}
|
||
|
||
//
|
||
// Rejection Bars ...
|
||
|
||
/**
|
||
* Get Detect Rejection Bars State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowRejectionBars()
|
||
{
|
||
return mAllowRejectionBars;
|
||
}
|
||
|
||
/**
|
||
* Set Detect Rejection Bars State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowRejectionBars(bool value)
|
||
{
|
||
mAllowRejectionBars = value;
|
||
}
|
||
|
||
/**
|
||
* Get Draw Rejection Bars State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowDrawRejectionBars()
|
||
{
|
||
return mAllowDrawRejectionBars;
|
||
}
|
||
|
||
/**
|
||
* Set Draw Rejection Bars State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowDrawRejectionBars(bool value)
|
||
{
|
||
mAllowDrawRejectionBars = value;
|
||
}
|
||
|
||
/**
|
||
* Get Rejection Bar Percent ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int RejectionBarPercent()
|
||
{
|
||
return mRejectionBarPercent;
|
||
}
|
||
|
||
/**
|
||
* Set Rejection Bar Percent ...
|
||
*
|
||
* @param value: Integer
|
||
*/
|
||
void RejectionBarPercent(int value)
|
||
{
|
||
mRejectionBarPercent = value;
|
||
}
|
||
|
||
/**
|
||
* Get Rejection Bar Sharp Ratio ...
|
||
*
|
||
* @return ( double )
|
||
*/
|
||
double RejectionBarSharpRatio()
|
||
{
|
||
return mRejectionBarSharpRatio;
|
||
}
|
||
|
||
/**
|
||
* Set Rejection Bar Sharp Ratio ...
|
||
*
|
||
* @param value: Double ...
|
||
*/
|
||
void RejectionBarSharpRatio(double value)
|
||
{
|
||
mRejectionBarSharpRatio = value;
|
||
}
|
||
|
||
/**
|
||
* Get Rejection Bar Loopback ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int RejectionBarLoopBack()
|
||
{
|
||
return mRejectionBarLoopBack;
|
||
}
|
||
|
||
/**
|
||
* Set Rejection Bar Loopback ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void RejectionBarLoopBack(int value)
|
||
{
|
||
mRejectionBarLoopBack = value;
|
||
}
|
||
|
||
/**
|
||
* Get Rejection Bar Width ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int RejectionBarWidth()
|
||
{
|
||
return mRejectionBarWidth;
|
||
}
|
||
|
||
/**
|
||
* Set Rejection Bar Width ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void RejectionBarWidth(int value)
|
||
{
|
||
mRejectionBarWidth = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bullish Rejection Bar Arrow Code ...
|
||
*
|
||
* @return ( char )
|
||
*/
|
||
char RejectionBarBullishArrowCode()
|
||
{
|
||
return mRejectionBarBullishArrowCode;
|
||
}
|
||
|
||
/**
|
||
* Set Bullish Rejection Bar Arrow Code ...
|
||
*
|
||
* @param value: Char ...
|
||
*/
|
||
void RejectionBarBullishArrowCode(char value)
|
||
{
|
||
mRejectionBarBullishArrowCode = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bullish Rejection Bar Color ...
|
||
*
|
||
* @return ( char )
|
||
*/
|
||
char RejectionBarBearishArrowCode()
|
||
{
|
||
return mRejectionBarBearishArrowCode;
|
||
}
|
||
|
||
/**
|
||
* Set Bullish Rejection Bar Color ...
|
||
*
|
||
* @param value: Color ...
|
||
*/
|
||
void RejectionBarBearishArrowCode(char value)
|
||
{
|
||
mRejectionBarBearishArrowCode = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bearish Rejection Bar Arrow Code ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color RejectionBarBullishColor()
|
||
{
|
||
return mRejectionBarBullishColor;
|
||
}
|
||
|
||
/**
|
||
* Set Bearish Rejection Bar Arrow Code ...
|
||
*
|
||
* @param value: Color ...
|
||
*/
|
||
void RejectionBarBullishColor(color value)
|
||
{
|
||
mRejectionBarBullishColor = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bearish Rejection Bar Color ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color RejectionBarBearishColor()
|
||
{
|
||
return mRejectionBarBearishColor;
|
||
}
|
||
|
||
/**
|
||
* Set Bearish Rejection Bar Color ...
|
||
*
|
||
* @param value: Color ...
|
||
*/
|
||
void RejectionBarBearishColor(color value)
|
||
{
|
||
mRejectionBarBearishColor = value;
|
||
}
|
||
|
||
//
|
||
// Support Zone ...
|
||
|
||
/**
|
||
* Get Detect Support Zone State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowSupportZones()
|
||
{
|
||
return mAllowSupportZones;
|
||
}
|
||
|
||
/**
|
||
* Set Detect Support Zone State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowSupportZones(bool value)
|
||
{
|
||
mAllowSupportZones = value;
|
||
}
|
||
|
||
/**
|
||
* Get Draw Support Zone State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowDrawSupportZones()
|
||
{
|
||
return mAllowDrawSupportZones;
|
||
}
|
||
|
||
/**
|
||
* Set Draw Support Zone State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowDrawSupportZones(bool value)
|
||
{
|
||
mAllowDrawSupportZones = value;
|
||
}
|
||
|
||
/**
|
||
* Get Support Zone Loopback ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int SupportZoneLoopBack()
|
||
{
|
||
return mSupportZoneLoopBack;
|
||
}
|
||
|
||
/**
|
||
* Set Support Zone Loopback ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void SupportZoneLoopBack(int value)
|
||
{
|
||
//
|
||
if (value < 10)
|
||
{
|
||
value = 10;
|
||
}
|
||
|
||
//
|
||
mSupportZoneLoopBack = value;
|
||
}
|
||
|
||
/**
|
||
* Get Support Zone Width ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int SupportZoneWidth()
|
||
{
|
||
return mSupportZoneWidth;
|
||
}
|
||
|
||
/**
|
||
* Set Support Zone Width ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void SupportZoneWidth(int value)
|
||
{
|
||
//
|
||
if (value < 1)
|
||
{
|
||
value = 1;
|
||
}
|
||
|
||
//
|
||
mSupportZoneWidth = value;
|
||
}
|
||
|
||
/**
|
||
* Get Support Zone Color ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color SupportZoneColor()
|
||
{
|
||
return mSupportZoneColor;
|
||
}
|
||
|
||
/**
|
||
* Set Support Zone Color ...
|
||
*
|
||
* @param value: Color ...
|
||
*/
|
||
void SupportZoneColor(color value)
|
||
{
|
||
mSupportZoneColor = value;
|
||
}
|
||
|
||
/**
|
||
* Get Support Zone Style ...
|
||
*
|
||
* @return ( ENUM_LINE_STYLE )
|
||
*/
|
||
ENUM_LINE_STYLE SupportZoneStyle()
|
||
{
|
||
return mSupportZoneStyle;
|
||
}
|
||
|
||
/**
|
||
* Set Support Zone Style ...
|
||
*
|
||
* @param value: ENUM_LINE_STYLE member ...
|
||
*/
|
||
void SupportZoneStyle(ENUM_LINE_STYLE value)
|
||
{
|
||
mSupportZoneStyle = value;
|
||
}
|
||
|
||
/**
|
||
* Get Support Zone Price Type ...
|
||
*
|
||
* @return ( ENUM_LINE_STYLE )
|
||
*/
|
||
ENUM_X_PRICE SupportZonePriceType()
|
||
{
|
||
return mSupportZonePriceType;
|
||
}
|
||
|
||
/**
|
||
* Set Support Zone Price Type ...
|
||
*
|
||
* @param value: ENUM_X_PRICE member ...
|
||
*/
|
||
void SupportZonePriceType(ENUM_X_PRICE value)
|
||
{
|
||
mSupportZonePriceType = value;
|
||
}
|
||
|
||
//
|
||
// Resistance Zone ...
|
||
|
||
/**
|
||
* Get Detect Resistance Zone State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowResistanceZones()
|
||
{
|
||
return mAllowResistanceZones;
|
||
}
|
||
|
||
/**
|
||
* Set Detect Resistance Zone State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowResistanceZones(bool value)
|
||
{
|
||
mAllowResistanceZones = value;
|
||
}
|
||
|
||
/**
|
||
* Get Draw Resistance Zone State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowDrawResistanceZones()
|
||
{
|
||
return mAllowDrawResistanceZones;
|
||
}
|
||
|
||
/**
|
||
* Set Draw Resistance Zone State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowDrawResistanceZones(bool value)
|
||
{
|
||
mAllowDrawResistanceZones = value;
|
||
}
|
||
|
||
/**
|
||
* Get Resistance Zone Loopback ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int ResistanceZoneLoopBack()
|
||
{
|
||
return mResistanceZoneLoopBack;
|
||
}
|
||
|
||
/**
|
||
* Set Resistance Zone Loopback ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void ResistanceZoneLoopBack(int value)
|
||
{
|
||
//
|
||
if (value < 10)
|
||
{
|
||
value = 10;
|
||
}
|
||
|
||
//
|
||
mResistanceZoneLoopBack = value;
|
||
}
|
||
|
||
/**
|
||
* Get Resistance Zone Width ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int ResistanceZoneWidth()
|
||
{
|
||
return mResistanceZoneWidth;
|
||
}
|
||
|
||
/**
|
||
* Set Resistance Zone Width ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void ResistanceZoneWidth(int value)
|
||
{
|
||
//
|
||
if (value < 1)
|
||
{
|
||
value = 1;
|
||
}
|
||
|
||
//
|
||
mResistanceZoneWidth = value;
|
||
}
|
||
|
||
/**
|
||
* Get Resistance Zone Color ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color ResistanceZoneColor()
|
||
{
|
||
return mResistanceZoneColor;
|
||
}
|
||
|
||
/**
|
||
* Set Resistance Zone Color ...
|
||
*
|
||
* @param value: Color ...
|
||
*/
|
||
void ResistanceZoneColor(color value)
|
||
{
|
||
mResistanceZoneColor = value;
|
||
}
|
||
|
||
/**
|
||
* Get Resistance Zone Style ...
|
||
*
|
||
* @return ( ENUM_LINE_STYLE )
|
||
*/
|
||
ENUM_LINE_STYLE ResistanceZoneStyle()
|
||
{
|
||
return mResistanceZoneStyle;
|
||
}
|
||
|
||
/**
|
||
* Set Resistance Zone Style ...
|
||
*
|
||
* @param value: ENUM_LINE_STYLE member ...
|
||
*/
|
||
void ResistanceZoneStyle(ENUM_LINE_STYLE value)
|
||
{
|
||
mResistanceZoneStyle = value;
|
||
}
|
||
|
||
/**
|
||
* Get Resistance Zone Price Type ...
|
||
*
|
||
* @return ( ENUM_LINE_STYLE )
|
||
*/
|
||
ENUM_X_PRICE ResistanceZonePriceType()
|
||
{
|
||
return mResistanceZonePriceType;
|
||
}
|
||
|
||
/**
|
||
* Set Resistance Zone Price Type ...
|
||
*
|
||
* @param value: ENUM_X_PRICE member ...
|
||
*/
|
||
void ResistanceZonePriceType(ENUM_X_PRICE value)
|
||
{
|
||
mResistanceZonePriceType = value;
|
||
}
|
||
|
||
//
|
||
// Supply Zone ...
|
||
|
||
/**
|
||
* Get Detect Supply Zone State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowSupplyZones()
|
||
{
|
||
return mAllowSupplyZones;
|
||
}
|
||
|
||
/**
|
||
* Set Detect Supply Zone State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowSupplyZones(bool value)
|
||
{
|
||
mAllowSupplyZones = value;
|
||
}
|
||
|
||
/**
|
||
* Get Draw Supply Zone State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowDrawSupplyZones()
|
||
{
|
||
return mAllowDrawSupplyZones;
|
||
}
|
||
|
||
/**
|
||
* Set Draw Supply Zone State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowDrawSupplyZones(bool value)
|
||
{
|
||
mAllowDrawSupplyZones = value;
|
||
}
|
||
|
||
/**
|
||
* Get Supply Zone Width ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int SupplyZoneWidth()
|
||
{
|
||
return mSupplyZoneWidth;
|
||
}
|
||
|
||
/**
|
||
* Set Supply Zone Width ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void SupplyZoneWidth(int value)
|
||
{
|
||
//
|
||
if (value < 1)
|
||
{
|
||
value = 1;
|
||
}
|
||
|
||
//
|
||
mSupplyZoneWidth = value;
|
||
}
|
||
|
||
/**
|
||
* Get Supply Zone Color ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color SupplyZoneColor()
|
||
{
|
||
return mSupplyZoneColor;
|
||
}
|
||
|
||
/**
|
||
* Set Supply Zone Color ...
|
||
*
|
||
* @param value: Color ...
|
||
*/
|
||
void SupplyZoneColor(color value)
|
||
{
|
||
mSupplyZoneColor = value;
|
||
}
|
||
|
||
/**
|
||
* Get Supply Zone Style ...
|
||
*
|
||
* @return ( ENUM_LINE_STYLE )
|
||
*/
|
||
ENUM_LINE_STYLE SupplyZoneStyle()
|
||
{
|
||
return mSupplyZoneStyle;
|
||
}
|
||
|
||
/**
|
||
* Set Supply Zone Style ...
|
||
*
|
||
* @param value: ENUM_LINE_STYLE member ...
|
||
*/
|
||
void SupplyZoneStyle(ENUM_LINE_STYLE value)
|
||
{
|
||
mSupplyZoneStyle = value;
|
||
}
|
||
|
||
/**
|
||
* Get Supply Zone Detecting Period ...
|
||
*
|
||
* @return ( ENUM_TIMEFRAMES ) ...
|
||
*/
|
||
ENUM_TIMEFRAMES SupplyZonePeriod()
|
||
{
|
||
return mSupplyZonePeriod;
|
||
}
|
||
|
||
/**
|
||
* Set Supply Zone Detecting Period ...
|
||
*
|
||
* @param value: ENUM_TIMEFRAMES member ...
|
||
*/
|
||
void SupplyZonePeriod(ENUM_TIMEFRAMES value)
|
||
{
|
||
mSupplyZonePeriod = value;
|
||
}
|
||
|
||
//
|
||
// Demand Zone ...
|
||
|
||
/**
|
||
* Get Detect Demand Zone State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowDemandZones()
|
||
{
|
||
return mAllowDemandZones;
|
||
}
|
||
|
||
/**
|
||
* Set Detect Demand Zone State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowDemandZones(bool value)
|
||
{
|
||
mAllowDemandZones = value;
|
||
}
|
||
|
||
/**
|
||
* Get Draw Demand Zone State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowDrawDemandZones()
|
||
{
|
||
return mAllowDrawDemandZones;
|
||
}
|
||
|
||
/**
|
||
* Set Draw Demand Zone State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowDrawDemandZones(bool value)
|
||
{
|
||
mAllowDrawDemandZones = value;
|
||
}
|
||
|
||
/**
|
||
* Get Demand Zone Width ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int DemandZoneWidth()
|
||
{
|
||
return mDemandZoneWidth;
|
||
}
|
||
|
||
/**
|
||
* Set Demand Zone Width ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void DemandZoneWidth(int value)
|
||
{
|
||
//
|
||
if (value < 1)
|
||
{
|
||
value = 1;
|
||
}
|
||
|
||
//
|
||
mDemandZoneWidth = value;
|
||
}
|
||
|
||
/**
|
||
* Get Demand Zone Color ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color DemandZoneColor()
|
||
{
|
||
return mDemandZoneColor;
|
||
}
|
||
|
||
/**
|
||
* Set Demand Zone Color ...
|
||
*
|
||
* @param value: Color ...
|
||
*/
|
||
void DemandZoneColor(color value)
|
||
{
|
||
mDemandZoneColor = value;
|
||
}
|
||
|
||
/**
|
||
* Get Demand Zone Style ...
|
||
*
|
||
* @return ( ENUM_LINE_STYLE )
|
||
*/
|
||
ENUM_LINE_STYLE DemandZoneStyle()
|
||
{
|
||
return mDemandZoneStyle;
|
||
}
|
||
|
||
/**
|
||
* Set Demand Zone Style ...
|
||
*
|
||
* @param value: ENUM_LINE_STYLE member ...
|
||
*/
|
||
void DemandZoneStyle(ENUM_LINE_STYLE value)
|
||
{
|
||
mDemandZoneStyle = value;
|
||
}
|
||
|
||
/**
|
||
* Get Demand Zone Detecting Period ...
|
||
*
|
||
* @return ( ENUM_TIMEFRAMES ) ...
|
||
*/
|
||
ENUM_TIMEFRAMES DemandZonePeriod()
|
||
{
|
||
return mDemandZonePeriod;
|
||
}
|
||
|
||
/**
|
||
* Set Demand Zone Detecting Period ...
|
||
*
|
||
* @param value: ENUM_TIMEFRAMES member ...
|
||
*/
|
||
void DemandZonePeriod(ENUM_TIMEFRAMES value)
|
||
{
|
||
mDemandZonePeriod = value;
|
||
}
|
||
|
||
//
|
||
// Order Blocks ...
|
||
|
||
//
|
||
// Bullish Order Blocks ...
|
||
|
||
/**
|
||
* Get Detect Bullish Order Blocks State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowBullishOrderBlocks()
|
||
{
|
||
return mAllowBullishOrderBlocks;
|
||
}
|
||
|
||
/**
|
||
* Set Detect Bullish Order Blocks State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowBullishOrderBlocks(bool value)
|
||
{
|
||
mAllowBullishOrderBlocks = value;
|
||
}
|
||
|
||
/**
|
||
* Get Draw Bullish Order Blocks State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowDrawBullishOrderBlocks()
|
||
{
|
||
return mAllowDrawBullishOrderBlocks;
|
||
}
|
||
|
||
/**
|
||
* Set Draw Bullish Order Blocks State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowDrawBullishOrderBlocks(bool value)
|
||
{
|
||
mAllowDrawBullishOrderBlocks = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bullish Order Block Width ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int BullishOrderBlockWidth()
|
||
{
|
||
return mBullishOrderBlockWidth;
|
||
}
|
||
|
||
/**
|
||
* Set Bullish Order Block Width ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void BullishOrderBlockWidth(int value)
|
||
{
|
||
//
|
||
if (value < 1)
|
||
{
|
||
value = 1;
|
||
}
|
||
|
||
//
|
||
mBullishOrderBlockWidth = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bullish Order Block Color ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color BullishOrderBlockColor()
|
||
{
|
||
return mBullishOrderBlockColor;
|
||
}
|
||
|
||
/**
|
||
* Set Bullish Order Block Color ...
|
||
*
|
||
* @param value: Color ...
|
||
*/
|
||
void BullishOrderBlockColor(color value)
|
||
{
|
||
mBullishOrderBlockColor = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bullish Order Block Style ...
|
||
*
|
||
* @return ( ENUM_LINE_STYLE )
|
||
*/
|
||
ENUM_LINE_STYLE BullishOrderBlockStyle()
|
||
{
|
||
return mBullishOrderBlockStyle;
|
||
}
|
||
|
||
/**
|
||
* Set Bullish Order Block Style ...
|
||
*
|
||
* @param value: ENUM_LINE_STYLE member ...
|
||
*/
|
||
void BullishOrderBlockStyle(ENUM_LINE_STYLE value)
|
||
{
|
||
mBullishOrderBlockStyle = value;
|
||
}
|
||
|
||
/**
|
||
* Get Minimum Required Same Bars for Bullish Order Blocks ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int RequiredBarsForBullishOrderBlock()
|
||
{
|
||
return mRequiredBarsForBullishOrderBlock;
|
||
}
|
||
|
||
/**
|
||
* Set Minimum Required Same Bars for Bullish Order Blocks ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void RequiredBarsForBullishOrderBlock(int value)
|
||
{
|
||
//
|
||
if (value < 3)
|
||
{
|
||
value = 3;
|
||
}
|
||
|
||
//
|
||
mRequiredBarsForBullishOrderBlock = value;
|
||
}
|
||
|
||
//
|
||
// Bearish Order Blocks ...
|
||
|
||
/**
|
||
* Get Detect Bearish Order Blocks State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowBearishOrderBlocks()
|
||
{
|
||
return mAllowBearishOrderBlocks;
|
||
}
|
||
|
||
/**
|
||
* Set Detect Bearish Order Blocks State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowBearishOrderBlocks(bool value)
|
||
{
|
||
mAllowBearishOrderBlocks = value;
|
||
}
|
||
|
||
/**
|
||
* Get Draw Bearish Order Blocks State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowDrawBearishOrderBlocks()
|
||
{
|
||
return mAllowDrawBearishOrderBlocks;
|
||
}
|
||
|
||
/**
|
||
* Set Draw Bearish Order Blocks State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowDrawBearishOrderBlocks(bool value)
|
||
{
|
||
mAllowDrawBearishOrderBlocks = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bearish Order Block Width ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int BearishOrderBlockWidth()
|
||
{
|
||
return mBearishOrderBlockWidth;
|
||
}
|
||
|
||
/**
|
||
* Set Bearish Order Block Width ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void BearishOrderBlockWidth(int value)
|
||
{
|
||
//
|
||
if (value < 1)
|
||
{
|
||
value = 1;
|
||
}
|
||
|
||
//
|
||
mBearishOrderBlockWidth = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bearish Order Block Color ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color BearishOrderBlockColor()
|
||
{
|
||
return mBearishOrderBlockColor;
|
||
}
|
||
|
||
/**
|
||
* Set Bearish Order Block Color ...
|
||
*
|
||
* @param value: Color ...
|
||
*/
|
||
void BearishOrderBlockColor(color value)
|
||
{
|
||
mBearishOrderBlockColor = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bearish Order Block Style ...
|
||
*
|
||
* @return ( ENUM_LINE_STYLE )
|
||
*/
|
||
ENUM_LINE_STYLE BearishOrderBlockStyle()
|
||
{
|
||
return mBearishOrderBlockStyle;
|
||
}
|
||
|
||
/**
|
||
* Set Bearish Order Block Style ...
|
||
*
|
||
* @param value: ENUM_LINE_STYLE member ...
|
||
*/
|
||
void BearishOrderBlockStyle(ENUM_LINE_STYLE value)
|
||
{
|
||
mBearishOrderBlockStyle = value;
|
||
}
|
||
|
||
/**
|
||
* Get Minimum Required Same Bars for Bearish Order Blocks ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int RequiredBarsForBearishOrderBlock()
|
||
{
|
||
return mRequiredBarsForBearishOrderBlock;
|
||
}
|
||
|
||
/**
|
||
* Set Minimum Required Same Bars for Bearish Order Blocks ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void RequiredBarsForBearishOrderBlock(int value)
|
||
{
|
||
//
|
||
if (value < 3)
|
||
{
|
||
value = 3;
|
||
}
|
||
|
||
//
|
||
mRequiredBarsForBearishOrderBlock = value;
|
||
}
|
||
|
||
//
|
||
// Fair Value Gaps ...
|
||
|
||
//
|
||
// Bullis FVGs ...
|
||
|
||
/**
|
||
* Get Detect Bullish Fair Value Gaps State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowBullishFVGs()
|
||
{
|
||
return mAllowBullishFVGs;
|
||
}
|
||
|
||
/**
|
||
* Set Detect Bullish Fair Value Gaps State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowBullishFVGs(bool value)
|
||
{
|
||
mAllowBullishFVGs = value;
|
||
}
|
||
|
||
/**
|
||
* Get Draw Bullish Fair Value Gaps ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowDrawBullishFVGs()
|
||
{
|
||
return mAllowDrawBullishFVGs;
|
||
}
|
||
|
||
/**
|
||
* Set Draw Bullish Fair Value Gaps ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowDrawBullishFVGs(bool value)
|
||
{
|
||
mAllowDrawBullishFVGs = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bullish FVG Force Middle Bar Check ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool BullishFVGForceMiddleBarCheck()
|
||
{
|
||
return mBullishFVGForceMiddleBarCheck;
|
||
}
|
||
|
||
/**
|
||
* Set Bullish FVG Force Middle Bar Check ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void BullishFVGForceMiddleBarCheck(bool value)
|
||
{
|
||
mBullishFVGForceMiddleBarCheck = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bullish FVG Force Check Last Bar Direction ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool BullishFVGForceCheckLastBarDirection()
|
||
{
|
||
return mBullishFVGForceCheckLastBarDirection;
|
||
}
|
||
|
||
/**
|
||
* Set Bullish FVG Force Check Last Bar Direction ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void BullishFVGForceCheckLastBarDirection(bool value)
|
||
{
|
||
mBullishFVGForceCheckLastBarDirection = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bullish FVG Width ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int BullishFVGWidth()
|
||
{
|
||
return mBullishFVGWidth;
|
||
}
|
||
|
||
/**
|
||
* Set Bullish FVG Width ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void BullishFVGWidth(int value)
|
||
{
|
||
//
|
||
if (value < 1)
|
||
{
|
||
value = 1;
|
||
}
|
||
|
||
//
|
||
mBullishFVGWidth = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bullish FVG Color ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color BullishFVGColor()
|
||
{
|
||
return mBullishFVGColor;
|
||
}
|
||
|
||
/**
|
||
* Set Bullish FVG Color ...
|
||
*
|
||
* @param value: Color ...
|
||
*/
|
||
void BullishFVGColor(color value)
|
||
{
|
||
mBullishFVGColor = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bullish FVG Style ...
|
||
*
|
||
* @return ( ENUM_LINE_STYLE )
|
||
*/
|
||
ENUM_LINE_STYLE BullishFVGStyle()
|
||
{
|
||
return mBullishFVGStyle;
|
||
}
|
||
|
||
/**
|
||
* Set Bullish FVG Style ...
|
||
*
|
||
* @param value: ENUM_LINE_STYLE member ...
|
||
*/
|
||
void BullishFVGStyle(ENUM_LINE_STYLE value)
|
||
{
|
||
mBullishFVGStyle = value;
|
||
}
|
||
|
||
//
|
||
// Bullis FVGs ...
|
||
|
||
/**
|
||
* Get Detect Bearish Fair Value Gaps State ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowBearishFVGs()
|
||
{
|
||
return mAllowBearishFVGs;
|
||
}
|
||
|
||
/**
|
||
* Set Detect Bearish Fair Value Gaps State ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowBearishFVGs(bool value)
|
||
{
|
||
mAllowBearishFVGs = value;
|
||
}
|
||
|
||
/**
|
||
* Get Draw Bearish Fair Value Gaps ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AllowDrawBearishFVGs()
|
||
{
|
||
return mAllowDrawBearishFVGs;
|
||
}
|
||
|
||
/**
|
||
* Set Draw Bearish Fair Value Gaps ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void AllowDrawBearishFVGs(bool value)
|
||
{
|
||
mAllowDrawBearishFVGs = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bearish FVG Force Middle Bar Check ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool BearishFVGForceMiddleBarCheck()
|
||
{
|
||
return mBearishFVGForceMiddleBarCheck;
|
||
}
|
||
|
||
/**
|
||
* Set Bearish FVG Force Middle Bar Check ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void BearishFVGForceMiddleBarCheck(bool value)
|
||
{
|
||
mBearishFVGForceMiddleBarCheck = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bearish FVG Force Check Last Bar Direction ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool BearishFVGForceCheckLastBarDirection()
|
||
{
|
||
return mBearishFVGForceCheckLastBarDirection;
|
||
}
|
||
|
||
/**
|
||
* Set Bearish FVG Force Check Last Bar Direction ...
|
||
*
|
||
* @param value: Boolean ...
|
||
*/
|
||
void BearishFVGForceCheckLastBarDirection(bool value)
|
||
{
|
||
mBearishFVGForceCheckLastBarDirection = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bearish FVG Width ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int BearishFVGWidth()
|
||
{
|
||
return mBearishFVGWidth;
|
||
}
|
||
|
||
/**
|
||
* Set Bearish FVG Width ...
|
||
*
|
||
* @param value: Integer ...
|
||
*/
|
||
void BearishFVGWidth(int value)
|
||
{
|
||
//
|
||
if (value < 1)
|
||
{
|
||
value = 1;
|
||
}
|
||
|
||
//
|
||
mBearishFVGWidth = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bearish FVG Color ...
|
||
*
|
||
* @return ( color )
|
||
*/
|
||
color BearishFVGColor()
|
||
{
|
||
return mBearishFVGColor;
|
||
}
|
||
|
||
/**
|
||
* Set Bearish FVG Color ...
|
||
*
|
||
* @param value: Color ...
|
||
*/
|
||
void BearishFVGColor(color value)
|
||
{
|
||
mBearishFVGColor = value;
|
||
}
|
||
|
||
/**
|
||
* Get Bearish FVG Style ...
|
||
*
|
||
* @return ( ENUM_LINE_STYLE )
|
||
*/
|
||
ENUM_LINE_STYLE BearishFVGStyle()
|
||
{
|
||
return mBearishFVGStyle;
|
||
}
|
||
|
||
/**
|
||
* Set Bearish FVG Style ...
|
||
*
|
||
* @param value: ENUM_LINE_STYLE member ...
|
||
*/
|
||
void BearishFVGStyle(ENUM_LINE_STYLE value)
|
||
{
|
||
mBearishFVGStyle = value;
|
||
}
|
||
|
||
//
|
||
// Actions ...
|
||
|
||
/**
|
||
* Initialize POI Detector ...
|
||
*/
|
||
void Init()
|
||
{
|
||
//
|
||
// Detect Previous POI(s) ...
|
||
DetectRequiredPOIs();
|
||
}
|
||
|
||
/**
|
||
* Update POI(s) ...
|
||
*
|
||
* @param state: an Array Refrence of ENUM_XPOI_EVENTS members ...
|
||
*/
|
||
int Update(
|
||
ENUM_XPOI_EVENTS &state[] //
|
||
)
|
||
{
|
||
//
|
||
int result = 0;
|
||
|
||
//
|
||
Clean(state);
|
||
|
||
//
|
||
// Check Bar Tracker if Waits ...
|
||
if (!mBarTracker.IsNewBar())
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int zIndex = 0;
|
||
int cIndex = zIndex + 1;
|
||
int pIndex = cIndex + 1;
|
||
|
||
//
|
||
datetime cTime = TimeCurrent();
|
||
|
||
//
|
||
XOHCL zBar;
|
||
bool isInited = zBar.Init(
|
||
mSymbol,
|
||
mPeriod,
|
||
zIndex //
|
||
);
|
||
if (!isInited)
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
XOHCL cBar;
|
||
isInited = cBar.Init(
|
||
mSymbol,
|
||
mPeriod,
|
||
cIndex //
|
||
);
|
||
if (!isInited)
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
XOHCL pBar;
|
||
isInited = pBar.Init(
|
||
mSymbol,
|
||
mPeriod,
|
||
pIndex //
|
||
);
|
||
if (!isInited)
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
XOHCL zDayBar;
|
||
isInited = zDayBar.Init(
|
||
mSymbol,
|
||
PERIOD_D1,
|
||
zIndex //
|
||
);
|
||
if (!isInited)
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
// Trading Days ...
|
||
|
||
//
|
||
bool allowTradingDays = AllowTradingDays();
|
||
int tradingDaysCount = ArraySize(mTradingDays);
|
||
if (allowTradingDays)
|
||
{
|
||
//
|
||
int tradingDayIDX = HasTradeDay(zDayBar.time);
|
||
if (IsValidIndex(tradingDayIDX))
|
||
{
|
||
//
|
||
if (zBar.time == mTradingDays[tradingDayIDX].to)
|
||
{
|
||
//
|
||
ENUM_XPOI_EVENTS event = X_TRADE_DAY_LAST_BAR;
|
||
Add(
|
||
event,
|
||
state //
|
||
);
|
||
OnTradingDayEvent(event);
|
||
NotifyTradingDayEventListeners(event);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//
|
||
// there isn't any Trading Day ...
|
||
// create one ...
|
||
|
||
//
|
||
XTradeDay tradeDay;
|
||
tradeDay.from = zDayBar.time;
|
||
tradeDay.to = zDayBar.GetLastBarTimeOfPeriod(mPeriod);
|
||
|
||
//
|
||
AddRef(
|
||
tradeDay,
|
||
mTradingDays //
|
||
);
|
||
|
||
//
|
||
DrawTradingDays();
|
||
|
||
//
|
||
// Notfy Day Started ...
|
||
if (zBar.time == zDayBar.time)
|
||
{
|
||
//
|
||
Add(
|
||
X_TRADE_DAY_FIRST_BAR,
|
||
state //
|
||
);
|
||
OnTradingDayEvent(X_TRADE_DAY_FIRST_BAR);
|
||
NotifyTradingDayEventListeners(X_TRADE_DAY_FIRST_BAR);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Market Session ...
|
||
|
||
//
|
||
bool allowMarketSessions = AllowMarketSessions();
|
||
int marketSessionsCount = ArraySize(mMarketSessions);
|
||
if (allowMarketSessions)
|
||
{
|
||
//
|
||
int sessionsCount = ArraySize(mSessions);
|
||
bool isSessionFound = false;
|
||
if (IsValidSize(sessionsCount))
|
||
{
|
||
//
|
||
for (int i = 0; i < sessionsCount; i++)
|
||
{
|
||
//
|
||
XSession iSession = mSessions[i];
|
||
int marketSessionIDX = HasMarketSessionByStartTime(
|
||
iSession.session,
|
||
zBar.time //
|
||
);
|
||
|
||
//
|
||
if (!IsValidIndex(marketSessionIDX))
|
||
{
|
||
//
|
||
datetime zTimeGMT = GetUTCTime(zBar.time);
|
||
string zTimeString = GetTimeString(zTimeGMT);
|
||
|
||
//
|
||
bool isStarted = iSession.start == zTimeString;
|
||
|
||
//
|
||
if (isStarted)
|
||
{
|
||
//
|
||
XMarketSession iMarketSession;
|
||
iMarketSession.session = iSession.session;
|
||
iMarketSession.from = zBar.time;
|
||
|
||
//
|
||
int iSessionWorkingHoure = SessionOpenHours();
|
||
int iSessionWorkingSeconds = iSessionWorkingHoure * 60 * 60;
|
||
iMarketSession.to = (datetime)((int)zBar.time + iSessionWorkingSeconds);
|
||
|
||
//
|
||
isSessionFound = AddRef(
|
||
iMarketSession,
|
||
mMarketSessions //
|
||
);
|
||
|
||
//
|
||
marketSessionsCount = ArraySize(mMarketSessions);
|
||
|
||
//
|
||
DrawMarketSessions();
|
||
|
||
//
|
||
Add(
|
||
X_SESSION_FIRST_BAR,
|
||
state //
|
||
);
|
||
OnMarketSessionEvent(
|
||
iMarketSession.session,
|
||
X_SESSION_FIRST_BAR //
|
||
);
|
||
NotifyMarketSessionEventListeners(
|
||
iMarketSession.session,
|
||
X_SESSION_FIRST_BAR //
|
||
);
|
||
}
|
||
}
|
||
|
||
//
|
||
// Check End Time for Last Bar ...
|
||
for (int i = 0; i < marketSessionsCount; i++)
|
||
{
|
||
//
|
||
XMarketSession iMarketSession = mMarketSessions[i];
|
||
|
||
//
|
||
// Calculate Last Bar Time ...
|
||
datetime endTime = iMarketSession.to;
|
||
datetime lastBarTime = (datetime)((int)endTime - PeriodSeconds(mPeriod));
|
||
if (zBar.time == lastBarTime)
|
||
{
|
||
//
|
||
ENUM_XPOI_EVENTS event = X_SESSION_LAST_BAR;
|
||
Add(
|
||
event,
|
||
state //
|
||
);
|
||
OnMarketSessionEvent(
|
||
iMarketSession.session,
|
||
event //
|
||
);
|
||
NotifyMarketSessionEventListeners(
|
||
iMarketSession.session,
|
||
event //
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Swing Highs and Lows ...
|
||
|
||
//
|
||
// Swing Highs ...
|
||
|
||
//
|
||
bool allowSwingHighs = AllowSwingHighs();
|
||
int swingHighsCount = ArraySize(mSwingHighs);
|
||
if (allowSwingHighs)
|
||
{
|
||
//
|
||
bool isSingHigh = pBar.IsSimpleSwingHigh(SwingHighThreshold());
|
||
if (isSingHigh)
|
||
{
|
||
//
|
||
bool isAdded = AddBar(
|
||
X_POI_SWING_HIGH,
|
||
pBar,
|
||
mSwingHighs //
|
||
);
|
||
|
||
//
|
||
if (isAdded)
|
||
{
|
||
//
|
||
swingHighsCount = ArraySize(mSwingHighs);
|
||
DrawSwingHighs();
|
||
|
||
//
|
||
ENUM_XPOI_EVENTS event = X_SWING_HIGH_DETECTED;
|
||
Add(
|
||
event,
|
||
state //
|
||
);
|
||
OnSwingHighEvent(event, pBar);
|
||
NotifySwingHighEventListeners(event, pBar);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Swing Lows ...
|
||
|
||
//
|
||
bool allowSwingLows = AllowSwingLows();
|
||
int swingLowsCount = ArraySize(mSwingLows);
|
||
if (allowSwingLows)
|
||
{
|
||
//
|
||
bool isSingLow = pBar.IsSimpleSwingLow(SwingLowThreshold());
|
||
if (isSingLow)
|
||
{
|
||
//
|
||
bool isAdded = AddBar(
|
||
X_POI_SWING_LOW,
|
||
pBar,
|
||
mSwingLows //
|
||
);
|
||
|
||
//
|
||
if (isAdded)
|
||
{
|
||
//
|
||
swingLowsCount = ArraySize(mSwingLows);
|
||
DrawSwingLows();
|
||
|
||
//
|
||
ENUM_XPOI_EVENTS event = X_SWING_LOW_DETECTED;
|
||
Add(
|
||
event,
|
||
state //
|
||
);
|
||
OnSwingLowEvent(event, pBar);
|
||
NotifySwingLowEventListeners(event, pBar);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Momentum Bars ...
|
||
|
||
//
|
||
bool allowMomentumBars = AllowMomentumBars();
|
||
int momentumBarsCount = ArraySize(mMomentumBars);
|
||
if (allowMomentumBars)
|
||
{
|
||
//
|
||
bool isStrongBar = cBar.IsStrong(MomentumBarPercent());
|
||
bool isSharpBullish = cBar.IsSharpBullish(
|
||
MomentumBarLoopBack(),
|
||
MomentumBarSharpRatio() //
|
||
);
|
||
bool isSharpBearish = cBar.IsSharpBearish(
|
||
MomentumBarLoopBack(),
|
||
MomentumBarSharpRatio() //
|
||
);
|
||
bool isMomentumBar =
|
||
isStrongBar &&
|
||
(isSharpBearish ||
|
||
isSharpBullish);
|
||
if (isMomentumBar)
|
||
{
|
||
//
|
||
bool isAdded = AddBar(
|
||
X_POI_MOMENTUM_BAR,
|
||
cBar,
|
||
mMomentumBars //
|
||
);
|
||
|
||
//
|
||
if (isAdded)
|
||
{
|
||
//
|
||
momentumBarsCount = ArraySize(mMomentumBars);
|
||
DrawMomentumBars();
|
||
|
||
//
|
||
ENUM_XPOI_EVENTS event = X_MOMENTUM_BAR_DETECTED;
|
||
Add(
|
||
event,
|
||
state //
|
||
);
|
||
OnMomentumBarEvent(event, cBar);
|
||
NotifyMomentumBarEventListeners(event, cBar);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Rejection Bars ...
|
||
|
||
//
|
||
bool allowRejectionBars = AllowRejectionBars();
|
||
int rejectionBarsCount = ArraySize(mRejectionBars);
|
||
if (allowRejectionBars)
|
||
{
|
||
//
|
||
int rejectionBarLoopBackBarIndex = RejectionBarLoopBack() + 1;
|
||
XOHCL iRBar;
|
||
bool isIRBarInited = iRBar.Init(
|
||
Symbol(),
|
||
Period(),
|
||
rejectionBarLoopBackBarIndex //
|
||
);
|
||
if (isIRBarInited)
|
||
{
|
||
//
|
||
bool isRejectionBar =
|
||
iRBar.HasStrongLowShadow(
|
||
RejectionBarPercent(),
|
||
RejectionBarLoopBack(),
|
||
RejectionBarSharpRatio() //
|
||
) ||
|
||
iRBar.HasStrongHighShadow(
|
||
RejectionBarPercent(),
|
||
RejectionBarLoopBack(),
|
||
RejectionBarSharpRatio() //
|
||
);
|
||
if (isRejectionBar)
|
||
{
|
||
//
|
||
bool isAdded = AddBar(
|
||
X_POI_REJECTION_BAR,
|
||
iRBar,
|
||
mRejectionBars //
|
||
);
|
||
|
||
//
|
||
if (isAdded)
|
||
{
|
||
//
|
||
rejectionBarsCount = ArraySize(mRejectionBars);
|
||
DrawRejectionBars();
|
||
|
||
//
|
||
ENUM_XPOI_EVENTS event = X_REJECTION_BAR_DETECTED;
|
||
Add(
|
||
event,
|
||
state //
|
||
);
|
||
OnRejectionBarEvent(event, iRBar);
|
||
NotifyRejectionBarEventListeners(event, iRBar);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Support and Resistance Zones ...
|
||
|
||
//
|
||
// Support Zones ...
|
||
|
||
//
|
||
bool allowSupportZones = AllowSupportZones();
|
||
int supportZonesCount = ArraySize(mSupportZones);
|
||
if (allowSupportZones)
|
||
{
|
||
//
|
||
XOHCL support;
|
||
bool hasSupport = cBar.HasSupport(
|
||
support,
|
||
SupportZonePriceType(),
|
||
SupportZoneLoopBack() //
|
||
);
|
||
if (hasSupport)
|
||
{
|
||
//
|
||
bool isAdded = AddBar(
|
||
X_POI_SUPPORT_ZONE,
|
||
support,
|
||
mSupportZones //
|
||
);
|
||
|
||
//
|
||
if (isAdded)
|
||
{
|
||
//
|
||
supportZonesCount = ArraySize(mSupportZones);
|
||
DrawSupportZones();
|
||
|
||
//
|
||
ENUM_XPOI_EVENTS event = X_SUPPORT_ZONE_DETECTED;
|
||
Add(
|
||
event,
|
||
state //
|
||
);
|
||
OnSupportZoneEvent(event, support);
|
||
NotifySupportZoneEventListeners(event, support);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Resistance Zone ...
|
||
|
||
//
|
||
bool allowResistanceZones = AllowResistanceZones();
|
||
int resistanceZonesCount = ArraySize(mResistanceZones);
|
||
if (allowResistanceZones)
|
||
{
|
||
//
|
||
XOHCL resistance;
|
||
bool hasResistance = cBar.HasResistance(
|
||
resistance,
|
||
ResistanceZonePriceType(),
|
||
ResistanceZoneLoopBack() //
|
||
);
|
||
if (hasResistance)
|
||
{
|
||
//
|
||
bool isAdded = AddBar(
|
||
X_POI_RESISTANCE_ZONE,
|
||
resistance,
|
||
mResistanceZones //
|
||
);
|
||
|
||
//
|
||
if (isAdded)
|
||
{
|
||
//
|
||
resistanceZonesCount = ArraySize(mResistanceZones);
|
||
DrawResistanceZones();
|
||
|
||
//
|
||
ENUM_XPOI_EVENTS event = X_RESISTANCE_ZONE_DETECTED;
|
||
Add(
|
||
event,
|
||
state //
|
||
);
|
||
OnResistanceZoneEvent(event, resistance);
|
||
NotifyResistanceZoneEventListeners(event, resistance);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Supply and Demand Zones ...
|
||
|
||
//
|
||
// Supply Zones ...
|
||
|
||
//
|
||
bool allowSupplyZones = AllowSupplyZones();
|
||
int supplyZonesCount = ArraySize(mSupplyZones);
|
||
if (allowSupplyZones)
|
||
{
|
||
//
|
||
datetime endTime = cBar.time;
|
||
XOHCL cSupplyBar;
|
||
bool isSupplyBarInited = cSupplyBar.Init(
|
||
Symbol(),
|
||
SupplyZonePeriod(),
|
||
0 //
|
||
);
|
||
if (isSupplyBarInited)
|
||
{
|
||
//
|
||
datetime lastSupplyBarTime = cSupplyBar
|
||
.GetLastBarTimeOfPeriod(Period());
|
||
if (zBar.time == lastSupplyBarTime)
|
||
{
|
||
//
|
||
datetime startTime = cSupplyBar.time;
|
||
int cSupplyZonePeriodIndex = iBarShift(
|
||
Symbol(),
|
||
Period(),
|
||
cSupplyBar.time //
|
||
);
|
||
|
||
//
|
||
// Find Swings ...
|
||
XOHCL swings[];
|
||
for (int i = 0; i < cSupplyZonePeriodIndex; i++)
|
||
{
|
||
//
|
||
XOHCL iBar;
|
||
bool isIBarInited = iBar.Init(
|
||
Symbol(),
|
||
Period(),
|
||
i //
|
||
);
|
||
if (!isIBarInited)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
// Check is Bar Swing or not ...
|
||
bool isSwing = iBar.IsSimpleSwingHigh();
|
||
if (!isSwing)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
AddRef(
|
||
iBar,
|
||
swings //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Select Max Swing for Supply Zone ...
|
||
XOHCL selectedSwing;
|
||
int swingsCount = ArraySize(swings);
|
||
if (IsValidSize(swingsCount))
|
||
{
|
||
//
|
||
for (int i = 0; i < swingsCount; i++)
|
||
{
|
||
//
|
||
XOHCL iSwing = swings[i];
|
||
if (!selectedSwing.IsValid() ||
|
||
selectedSwing.high < iSwing.high)
|
||
{
|
||
selectedSwing = iSwing;
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Check Swing ...
|
||
if (selectedSwing.IsValid())
|
||
{
|
||
//
|
||
XZone zone;
|
||
bool isInited = zone.Init(
|
||
selectedSwing.high,
|
||
selectedSwing.low,
|
||
ToString(X_POI_SUPPLY_ZONE) + "_" + ToString(SupplyZonePeriod()),
|
||
startTime,
|
||
endTime //
|
||
);
|
||
if (isInited)
|
||
{
|
||
//
|
||
int zoneIDX = FindZoneIndex(
|
||
zone,
|
||
mSupplyZones //
|
||
);
|
||
|
||
//
|
||
if (!IsValidIndex(zoneIDX))
|
||
{
|
||
//
|
||
AddRef(
|
||
zone,
|
||
mSupplyZones //
|
||
);
|
||
|
||
//
|
||
supplyZonesCount = ArraySize(mSupplyZones);
|
||
DrawSupplyZones();
|
||
|
||
//
|
||
ENUM_XPOI_EVENTS event = X_SUPPLY_ZONE_DETECTED;
|
||
Add(
|
||
event,
|
||
state //
|
||
);
|
||
OnSupplyZoneEvent(event, zone);
|
||
NotifySupplyZoneEventListeners(event, zone);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Demand Zones ...
|
||
|
||
//
|
||
bool allowDemandZones = AllowDemandZones();
|
||
int demandZonesCount = ArraySize(mDemandZones);
|
||
if (allowDemandZones)
|
||
{
|
||
//
|
||
endTime = cBar.time;
|
||
XOHCL cDemandBar;
|
||
bool isDemandBarInited = cDemandBar.Init(
|
||
Symbol(),
|
||
DemandZonePeriod(),
|
||
0 //
|
||
);
|
||
if (isDemandBarInited)
|
||
{
|
||
//
|
||
datetime lastDemandBarTime = cDemandBar
|
||
.GetLastBarTimeOfPeriod(Period());
|
||
if (zBar.time == lastDemandBarTime)
|
||
{
|
||
//
|
||
datetime startTime = cDemandBar.time;
|
||
int cDemandZonePeriodIndex = iBarShift(
|
||
Symbol(),
|
||
Period(),
|
||
cDemandBar.time //
|
||
);
|
||
|
||
//
|
||
// Find Swings ...
|
||
XOHCL swings[];
|
||
for (int i = 0; i < cDemandZonePeriodIndex; i++)
|
||
{
|
||
//
|
||
XOHCL iBar;
|
||
bool isIBarInited = iBar.Init(
|
||
Symbol(),
|
||
Period(),
|
||
i //
|
||
);
|
||
if (!isIBarInited)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
// Check is Bar Swing or not ...
|
||
bool isSwing = iBar.IsSimpleSwingLow();
|
||
if (!isSwing)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
AddRef(
|
||
iBar,
|
||
swings //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Select Max Swing for Supply Zone ...
|
||
XOHCL selectedSwing;
|
||
int swingsCount = ArraySize(swings);
|
||
if (IsValidSize(swingsCount))
|
||
{
|
||
//
|
||
for (int i = 0; i < swingsCount; i++)
|
||
{
|
||
//
|
||
XOHCL iSwing = swings[i];
|
||
if (!selectedSwing.IsValid() ||
|
||
selectedSwing.low > iSwing.low)
|
||
{
|
||
selectedSwing = iSwing;
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Check Swing ...
|
||
if (selectedSwing.IsValid())
|
||
{
|
||
//
|
||
XZone zone;
|
||
bool isInited = zone.Init(
|
||
selectedSwing.high,
|
||
selectedSwing.low,
|
||
ToString(X_POI_DEMAND_ZONE) + "_" + ToString(SupplyZonePeriod()),
|
||
startTime,
|
||
endTime //
|
||
);
|
||
if (isInited)
|
||
{
|
||
//
|
||
int zoneIDX = FindZoneIndex(
|
||
zone,
|
||
mDemandZones //
|
||
);
|
||
|
||
//
|
||
if (!IsValidIndex(zoneIDX))
|
||
{
|
||
//
|
||
AddRef(
|
||
zone,
|
||
mDemandZones //
|
||
);
|
||
|
||
//
|
||
demandZonesCount = ArraySize(mDemandZones);
|
||
DrawDemandZones();
|
||
|
||
//
|
||
ENUM_XPOI_EVENTS event = X_DEMAND_ZONE_DETECTED;
|
||
Add(
|
||
event,
|
||
state //
|
||
);
|
||
OnDemandZoneEvent(event, zone);
|
||
NotifyDemandZoneEventListeners(event, zone);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Order Blocks ...
|
||
|
||
//
|
||
// Bullish Order Blocks ...
|
||
|
||
//
|
||
bool allowBullishOrderBlocks = AllowBullishOrderBlocks();
|
||
int bullishOrderBlocksCount = ArraySize(mBullishOrderBlocks);
|
||
if (allowBullishOrderBlocks)
|
||
{
|
||
//
|
||
XOHCL bullOB;
|
||
bool hasBullOB = cBar.HasBullishOrderBlock(
|
||
bullOB,
|
||
RequiredBarsForBullishOrderBlock() //
|
||
);
|
||
if (hasBullOB)
|
||
{
|
||
//
|
||
XZone obZone;
|
||
bool isAdded = AddZone(
|
||
obZone, // Dest ...
|
||
bullOB,
|
||
cBar.time,
|
||
X_POI_BULLISH_ORDERBLOCK,
|
||
mBullishOrderBlocks //
|
||
);
|
||
if (isAdded)
|
||
{
|
||
//
|
||
bullishOrderBlocksCount = ArraySize(mBullishOrderBlocks);
|
||
DrawBullishOrderBlocks();
|
||
|
||
//
|
||
ENUM_XPOI_EVENTS event = X_BULLISH_ORDERBLOCK_DETECTED;
|
||
Add(
|
||
event,
|
||
state //
|
||
);
|
||
OnBullishOrderBlockEvent(event, obZone);
|
||
NotifyBullishOrderBlockEventListeners(event, obZone);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Bearish Order Blocks ...
|
||
|
||
//
|
||
bool allowBearishOrderBlocks = AllowBearishOrderBlocks();
|
||
int bearishOrderBlocksCount = ArraySize(mBearishOrderBlocks);
|
||
if (allowBearishOrderBlocks)
|
||
{
|
||
//
|
||
XOHCL bearOB;
|
||
bool hasBearOB = cBar.HasBearishOrderBlock(
|
||
bearOB,
|
||
RequiredBarsForBearishOrderBlock() //
|
||
);
|
||
if (hasBearOB)
|
||
{
|
||
//
|
||
XZone zone;
|
||
bool isAdded = AddZone(
|
||
zone, //
|
||
bearOB,
|
||
cBar.time,
|
||
X_POI_BEARISH_ORDERBLOCK,
|
||
mBearishOrderBlocks //
|
||
);
|
||
if (isAdded)
|
||
{
|
||
//
|
||
bullishOrderBlocksCount = ArraySize(mBearishOrderBlocks);
|
||
DrawBearishOrderBlocks();
|
||
|
||
//
|
||
ENUM_XPOI_EVENTS event = X_BEARISH_ORDERBLOCK_DETECTED;
|
||
Add(
|
||
event,
|
||
state //
|
||
);
|
||
OnBullishOrderBlockEvent(event, zone);
|
||
NotifyBullishOrderBlockEventListeners(event, zone);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Fair Value Gaps ...
|
||
double upper;
|
||
double lower;
|
||
datetime start;
|
||
datetime end;
|
||
|
||
//
|
||
// Bullish FVGs ...
|
||
bool allowBullishFVGs = AllowBullishFVGs();
|
||
int bullishFVGsCount = ArraySize(mBullishFVGs);
|
||
if (allowBullishFVGs)
|
||
{
|
||
//
|
||
bool hasBullishFVG = cBar.HasBullishFVG(
|
||
upper,
|
||
lower,
|
||
start,
|
||
end,
|
||
BullishFVGForceMiddleBarCheck(),
|
||
BullishFVGForceCheckLastBarDirection() //
|
||
);
|
||
if (hasBullishFVG)
|
||
{
|
||
//
|
||
XZone zone;
|
||
bool isAdded = AddZone(
|
||
zone,
|
||
upper,
|
||
lower,
|
||
start,
|
||
end,
|
||
X_POI_BULLISH_FVG,
|
||
mBullishFVGs //
|
||
);
|
||
if (isAdded)
|
||
{
|
||
//
|
||
bullishFVGsCount = ArraySize(mBullishFVGs);
|
||
DrawBullishFVGs();
|
||
|
||
//
|
||
ENUM_XPOI_EVENTS event = X_BULLISH_FVG_DETECTED;
|
||
Add(
|
||
event,
|
||
state //
|
||
);
|
||
OnBullishFVGEvent(event, zone);
|
||
NotifyBullishFVGEventListeners(event, zone);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Bearish FVGs ...
|
||
bool allowBearishFVGs = AllowBearishFVGs();
|
||
int bearishFVGsCount = ArraySize(mBearishFVGs);
|
||
if (allowBearishFVGs)
|
||
{
|
||
//
|
||
bool hasBearishFVG = cBar.HasBearishFVG(
|
||
upper,
|
||
lower,
|
||
start,
|
||
end,
|
||
BearishFVGForceMiddleBarCheck(),
|
||
BearishFVGForceCheckLastBarDirection() //
|
||
);
|
||
if (hasBearishFVG)
|
||
{
|
||
//
|
||
XZone zone;
|
||
bool isAdded = AddZone(
|
||
zone,
|
||
upper,
|
||
lower,
|
||
start,
|
||
end,
|
||
X_POI_BEARISH_FVG,
|
||
mBearishFVGs //
|
||
);
|
||
if (isAdded)
|
||
{
|
||
//
|
||
bearishFVGsCount = ArraySize(mBearishFVGs);
|
||
DrawBearishFVGs();
|
||
|
||
//
|
||
ENUM_XPOI_EVENTS event = X_BEARISH_FVG_DETECTED;
|
||
Add(
|
||
event,
|
||
state //
|
||
);
|
||
OnBearishFVGEvent(event, zone);
|
||
NotifyBearishFVGEventListeners(event, zone);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// ...
|
||
|
||
//
|
||
CleanupUnusedPOIs();
|
||
|
||
//
|
||
mBarTracker.Waits();
|
||
|
||
//
|
||
result = ArraySize(state);
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Enable All POIs Detection ...
|
||
*/
|
||
void EnablePOIs()
|
||
{
|
||
ChangePOIsState(true);
|
||
}
|
||
|
||
/**
|
||
* Disable All POIs Detection ...
|
||
*/
|
||
void DisablePOIs()
|
||
{
|
||
ChangePOIsState(false);
|
||
}
|
||
|
||
/**
|
||
* Set All POIs Detection States ...
|
||
*
|
||
* @param state: Argument 1
|
||
*/
|
||
void ChangePOIsState(bool state)
|
||
{
|
||
//
|
||
AllowSwingLows(state);
|
||
AllowSwingHighs(state);
|
||
AllowTradingDays(state);
|
||
AllowSupplyZones(state);
|
||
AllowDemandZones(state);
|
||
AllowBullishFVGs(state);
|
||
AllowBearishFVGs(state);
|
||
AllowMomentumBars(state);
|
||
AllowSupportZones(state);
|
||
AllowRejectionBars(state);
|
||
AllowMarketSessions(state);
|
||
AllowResistanceZones(state);
|
||
AllowBullishOrderBlocks(state);
|
||
AllowBearishOrderBlocks(state);
|
||
}
|
||
|
||
/**
|
||
* Enable Draw All POI(s) ...
|
||
*/
|
||
void EnableDrawPOIs()
|
||
{
|
||
ChangePOIsDrawState(true);
|
||
}
|
||
|
||
/**
|
||
* Disable Draw All POI(s) ...
|
||
*/
|
||
void DisableDrawPOIs()
|
||
{
|
||
ChangePOIsDrawState(false);
|
||
}
|
||
|
||
/**
|
||
* Set Drawing State of all POIs ...
|
||
*
|
||
* @param state: Boolean ...
|
||
*/
|
||
void ChangePOIsDrawState(bool state)
|
||
{
|
||
//
|
||
AllowDrawSwingLows(state);
|
||
AllowDrawSwingHighs(state);
|
||
AllowDrawTradingDays(state);
|
||
AllowDrawSupplyZones(state);
|
||
AllowDrawBullishFVGs(state);
|
||
AllowDrawBearishFVGs(state);
|
||
AllowDrawDemandZones(state);
|
||
AllowDrawSupportZones(state);
|
||
AllowDrawMomentumBars(state);
|
||
AllowDrawRejectionBars(state);
|
||
AllowDrawMarketSessions(state);
|
||
AllowDrawResistanceZones(state);
|
||
AllowDrawBullishOrderBlocks(state);
|
||
AllowDrawBearishOrderBlocks(state);
|
||
|
||
//
|
||
// Sessions ...
|
||
int sessionsCount = ArraySize(mSessions);
|
||
if (IsValidSize(sessionsCount))
|
||
{
|
||
//
|
||
for (int i = 0; i < sessionsCount; i++)
|
||
{
|
||
//
|
||
mSessions[i].allowDraw = state;
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Retrievers ...
|
||
|
||
/**
|
||
* Get Current State of POIs ...
|
||
*
|
||
* @param state: XPOIState instance ...
|
||
*/
|
||
void GetState(
|
||
XPOIState &state)
|
||
{
|
||
//
|
||
state.Clean();
|
||
|
||
//
|
||
state.symbol = Symbol();
|
||
state.period = Period();
|
||
state.reportedAt = TimeCurrent();
|
||
|
||
//
|
||
state.FillTradingDays(mTradingDays);
|
||
state.FillMarketSessions(mMarketSessions);
|
||
|
||
//
|
||
state.FillMomentumBars(mMomentumBars);
|
||
state.FillRejectionBars(mRejectionBars);
|
||
|
||
//
|
||
state.FillSwingHighs(mSwingHighs);
|
||
state.FillSwingLows(mSwingLows);
|
||
|
||
//
|
||
state.FillSupportZones(mSupportZones);
|
||
state.FillResistanceZones(mResistanceZones);
|
||
|
||
//
|
||
state.FillSupplyZones(mSupplyZones);
|
||
state.FillDemandZones(mDemandZones);
|
||
|
||
//
|
||
state.FillBullishOrderBlocks(mBullishOrderBlocks);
|
||
state.FillBearishOrderBlocks(mBearishOrderBlocks);
|
||
|
||
//
|
||
state.FillBullishFVGs(mBullishFVGs);
|
||
state.FillBearishFVGs(mBearishFVGs);
|
||
}
|
||
|
||
//
|
||
// Virtual Actions ...
|
||
|
||
/**
|
||
* Apply Default Configurations ...
|
||
*/
|
||
virtual void ApplyDefaultConfig()
|
||
{
|
||
//
|
||
// Common ...
|
||
|
||
//
|
||
ChartID(0);
|
||
Window(0);
|
||
|
||
//
|
||
MaxNumberOfPOIs(10);
|
||
MaxNumberOfRequiredPOIs(2);
|
||
|
||
//
|
||
EnablePOIs();
|
||
EnableDrawPOIs();
|
||
|
||
//
|
||
// Trading Days ...
|
||
TradingDaysStartColor(clrYellow);
|
||
TradingDaysStartStyle(STYLE_DASHDOT);
|
||
TradingDaysEndColor(clrGray);
|
||
TradingDaysEndStyle(STYLE_DASHDOT);
|
||
|
||
//
|
||
// Sessions ...
|
||
|
||
//
|
||
// SYDNEY ...
|
||
// Start: (UTC) 21:00
|
||
// End: (UTC) 06:00
|
||
XSession mSyndeySession;
|
||
mSyndeySession.Init(
|
||
X_SYDNEY,
|
||
"20:00", // Start ...
|
||
"05:00" // End Next Day ...
|
||
);
|
||
mSyndeySession.startColor = clrFireBrick;
|
||
mSyndeySession.endColor = clrFireBrick;
|
||
mSyndeySession.allowDraw = true;
|
||
AddSession(mSyndeySession);
|
||
|
||
//
|
||
// TOKYO ...
|
||
// Start: (UTC) 12:00
|
||
// End: (UTC) 09:00
|
||
XSession mTokyoSession;
|
||
mTokyoSession.Init(
|
||
X_TOKYO,
|
||
"00:00", // Start ...
|
||
"09:00" // End Next Day ...
|
||
);
|
||
mTokyoSession.startColor = clrBlueViolet;
|
||
mTokyoSession.endColor = clrBlueViolet;
|
||
mTokyoSession.allowDraw = true;
|
||
AddSession(mTokyoSession);
|
||
|
||
//
|
||
// LONDON ...
|
||
// Start: (UTC) 07:00
|
||
// End: (UTC) 16:00
|
||
XSession mLondonSession;
|
||
mLondonSession.Init(
|
||
X_LONDON,
|
||
"07:00", // Start ...
|
||
"16:00" // End ...
|
||
);
|
||
mLondonSession.startColor = clrLime;
|
||
mLondonSession.endColor = clrLime;
|
||
mLondonSession.allowDraw = true;
|
||
AddSession(mLondonSession);
|
||
|
||
//
|
||
// NEWYORK ...
|
||
// Start: (UTC) 13:00
|
||
// End: (UTC) 22:00
|
||
XSession mNewYorkSession;
|
||
mNewYorkSession.Init(
|
||
X_NEW_YORK,
|
||
"12:00", // Start ...
|
||
"21:00" // End ...
|
||
);
|
||
mNewYorkSession.startColor = clrAqua;
|
||
mNewYorkSession.endColor = clrAqua;
|
||
mNewYorkSession.allowDraw = true;
|
||
AddSession(mNewYorkSession);
|
||
|
||
//
|
||
SessionOpenHours(9);
|
||
|
||
//
|
||
// Swing High and Low (s) ...
|
||
|
||
//
|
||
// Swing Highs ...
|
||
SwingHighWidth(5);
|
||
SwingHighThreshold(3);
|
||
SwingHighArrowCode(108);
|
||
SwingHighColor(clrMagenta);
|
||
|
||
//
|
||
// Swing Lows ...
|
||
SwingLowWidth(5);
|
||
SwingLowThreshold(3);
|
||
SwingLowArrowCode(108);
|
||
SwingLowColor(clrAqua);
|
||
|
||
//
|
||
// Momentum Bars ...
|
||
MomentumBarPercent(55);
|
||
MomentumBarLoopBack(3);
|
||
MomentumBarSharpRatio(1.2);
|
||
MomentumBarWidth(5);
|
||
MomentumBarBullishArrowCode((char)225);
|
||
MomentumBarBearishArrowCode((char)226);
|
||
MomentumBarBullishColor(clrAqua);
|
||
MomentumBarBearishColor(clrMagenta);
|
||
|
||
//
|
||
// Rejection Bars ...
|
||
RejectionBarPercent(55);
|
||
RejectionBarLoopBack(5);
|
||
RejectionBarSharpRatio(1.5);
|
||
RejectionBarWidth(5);
|
||
RejectionBarBullishArrowCode((char)217);
|
||
RejectionBarBearishArrowCode((char)218);
|
||
RejectionBarBullishColor(clrAqua);
|
||
RejectionBarBearishColor(clrMagenta);
|
||
|
||
//
|
||
// Support and Resistance Zones ...
|
||
|
||
//
|
||
// Support Zones ...
|
||
SupportZoneLoopBack(52);
|
||
SupportZoneWidth(1);
|
||
SupportZoneColor(clrLime);
|
||
SupportZoneStyle(STYLE_DOT);
|
||
SupportZonePriceType(X_PRICE_CLOSE);
|
||
|
||
//
|
||
// Resistance Zones ...
|
||
ResistanceZoneLoopBack(52);
|
||
ResistanceZoneWidth(1);
|
||
ResistanceZoneColor(clrRed);
|
||
ResistanceZoneStyle(STYLE_DOT);
|
||
ResistanceZonePriceType(X_PRICE_CLOSE);
|
||
|
||
//
|
||
// Supply and Deman Zones ...
|
||
|
||
//
|
||
// Supply Zones ...
|
||
SupplyZoneWidth(1);
|
||
SupplyZoneColor(clrDarkRed);
|
||
SupplyZoneStyle(STYLE_DASH);
|
||
SupplyZonePeriod(GetHindMostPeriod(Period()));
|
||
|
||
//
|
||
// Demand Zones ...
|
||
DemandZoneWidth(1);
|
||
DemandZoneColor(clrDarkGreen);
|
||
DemandZoneStyle(STYLE_DASH);
|
||
DemandZonePeriod(GetHindMostPeriod(Period()));
|
||
|
||
//
|
||
// Order Blocks ...
|
||
|
||
//
|
||
// Bullish Order Block ...
|
||
BullishOrderBlockWidth(1);
|
||
BullishOrderBlockColor(clrAqua);
|
||
BullishOrderBlockStyle(STYLE_DASHDOT);
|
||
RequiredBarsForBullishOrderBlock(3);
|
||
|
||
//
|
||
// Bearish Order Block ...
|
||
BearishOrderBlockWidth(1);
|
||
BearishOrderBlockColor(clrMagenta);
|
||
BearishOrderBlockStyle(STYLE_DASHDOT);
|
||
RequiredBarsForBearishOrderBlock(3);
|
||
|
||
//
|
||
// Fair Value Gaps ...
|
||
|
||
//
|
||
// Bullish FVGs ...
|
||
BullishFVGWidth(1);
|
||
BullishFVGColor(clrAqua);
|
||
BullishFVGStyle(STYLE_DASHDOTDOT);
|
||
BullishFVGForceMiddleBarCheck(true);
|
||
BullishFVGForceCheckLastBarDirection(true);
|
||
|
||
//
|
||
// Bearish FVGs ...
|
||
BearishFVGWidth(1);
|
||
BearishFVGColor(clrMagenta);
|
||
BearishFVGStyle(STYLE_DASHDOTDOT);
|
||
BearishFVGForceMiddleBarCheck(true);
|
||
BearishFVGForceCheckLastBarDirection(true);
|
||
|
||
//
|
||
}
|
||
|
||
//
|
||
// Session Configurations ...
|
||
|
||
/**
|
||
* Add Sepcific Session to Supported Sessions ...
|
||
*
|
||
* @param session: XSession instance ...
|
||
*/
|
||
void AddSession(XSession &session)
|
||
{
|
||
//
|
||
if (!session.IsValid())
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
AddRef(
|
||
session,
|
||
mSessions //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Event Listeners ...
|
||
|
||
//
|
||
// Trading Days ...
|
||
|
||
/**
|
||
* Calls When new Trading Day Event Happens ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
*/
|
||
virtual void OnTradingDayEvent(
|
||
ENUM_XPOI_EVENTS event //
|
||
)
|
||
{
|
||
}
|
||
|
||
/**
|
||
* Register an Event Listener for New Trading Day Events ...
|
||
*
|
||
* @param listener: TXPOIEventHandler instance ...
|
||
*/
|
||
void AddTradingDayEventListener(TXPOIEventHandler listener)
|
||
{
|
||
//
|
||
Add(
|
||
listener,
|
||
mTradingDayEventListeners //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Market Sessions ...
|
||
|
||
/**
|
||
* Calls When new Market Session Event Happens ...
|
||
*
|
||
* @param session: ENUM_XSESSION member ...
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
*/
|
||
virtual void OnMarketSessionEvent(
|
||
ENUM_XSESSION session,
|
||
ENUM_XPOI_EVENTS event //
|
||
)
|
||
{
|
||
}
|
||
|
||
/**
|
||
* Register an Event Listener for New Market Session Events ...
|
||
*
|
||
* @param listener: TXSessionEventHandler instance ...
|
||
*/
|
||
void AddMarketSessionEventListener(TXSessionEventHandler listener)
|
||
{
|
||
//
|
||
Add(
|
||
listener,
|
||
mMarketSessionEventListeners //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Swings ...
|
||
|
||
//
|
||
// Swing Highs ...
|
||
|
||
/**
|
||
* Calls When new Swing High Event ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XOHCL instance ...
|
||
*/
|
||
virtual void OnSwingHighEvent(
|
||
ENUM_XPOI_EVENTS event,
|
||
XOHCL &bar //
|
||
)
|
||
{
|
||
}
|
||
|
||
/**
|
||
* Register an Event Listener for New Swing High Event ...
|
||
*
|
||
* @param listener: TXOHCLEventHandler instance ...
|
||
*/
|
||
void AddSwingHighEventListener(TXOHCLEventHandler listener)
|
||
{
|
||
//
|
||
Add(
|
||
listener,
|
||
mSwingHighEventListeners //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Swing Lows ...
|
||
|
||
/**
|
||
* Calls When new Swing Low Detected ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XOHCL instance ...
|
||
*/
|
||
virtual void OnSwingLowEvent(
|
||
ENUM_XPOI_EVENTS event,
|
||
XOHCL &bar //
|
||
)
|
||
{
|
||
}
|
||
|
||
/**
|
||
* Register an Event Listener for New Swing Low Event ...
|
||
*
|
||
* @param listener: TXOHCLEventHandler instance ...
|
||
*/
|
||
void AddSwingLowEventListener(TXOHCLEventHandler listener)
|
||
{
|
||
//
|
||
Add(
|
||
listener,
|
||
mSwingLowEventListeners //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Momentum Bar ...
|
||
|
||
/**
|
||
* Calls When new Momentum Bar Event ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XOHCL instance ...
|
||
*/
|
||
virtual void OnMomentumBarEvent(
|
||
ENUM_XPOI_EVENTS event,
|
||
XOHCL &bar //
|
||
)
|
||
{
|
||
}
|
||
|
||
/**
|
||
* Register an Event Listener for New Momentum Bar Event ...
|
||
*
|
||
* @param listener: TXOHCLEventHandler instance ...
|
||
*/
|
||
void AddMomentumBarEventListener(TXOHCLEventHandler listener)
|
||
{
|
||
//
|
||
Add(
|
||
listener,
|
||
mMomentumBarEventListeners //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Rejection Bar ...
|
||
|
||
/**
|
||
* Calls When new Rejection Bar Event ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XOHCL instance ...
|
||
*/
|
||
virtual void OnRejectionBarEvent(
|
||
ENUM_XPOI_EVENTS event,
|
||
XOHCL &bar //
|
||
)
|
||
{
|
||
}
|
||
|
||
/**
|
||
* Register an Event Listener for New Rejection Bar Event ...
|
||
*
|
||
* @param listener: TXOHCLEventHandler instance ...
|
||
*/
|
||
void AddRejectionBarEventListener(TXOHCLEventHandler listener)
|
||
{
|
||
//
|
||
Add(
|
||
listener,
|
||
mRejectionBarEventListeners //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Support and Resistance Zones ...
|
||
|
||
//
|
||
// Support Zones ...
|
||
|
||
/**
|
||
* Calls When new Support Zone Event ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XOHCL instance ...
|
||
*/
|
||
virtual void OnSupportZoneEvent(
|
||
ENUM_XPOI_EVENTS event,
|
||
XOHCL &bar //
|
||
)
|
||
{
|
||
}
|
||
|
||
/**
|
||
* Register an Event Listener for New Support Zone Event ...
|
||
*
|
||
* @param listener: TXOHCLEventHandler instance ...
|
||
*/
|
||
void AddSupportZoneEventListener(TXOHCLEventHandler listener)
|
||
{
|
||
//
|
||
Add(
|
||
listener,
|
||
mSupportZoneEventListeners //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Resistance Zones ...
|
||
|
||
/**
|
||
* Calls When new Resistance Zone Event ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XOHCL instance ...
|
||
*/
|
||
virtual void OnResistanceZoneEvent(
|
||
ENUM_XPOI_EVENTS event,
|
||
XOHCL &bar //
|
||
)
|
||
{
|
||
}
|
||
|
||
/**
|
||
* Register an Event Listener for New Resistance Zone Event ...
|
||
*
|
||
* @param listener: TXOHCLEventHandler instance ...
|
||
*/
|
||
void AddResistanceZoneEventListener(TXOHCLEventHandler listener)
|
||
{
|
||
//
|
||
Add(
|
||
listener,
|
||
mResistanceZoneEventListeners //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Supply and Demand Zones ...
|
||
|
||
//
|
||
// Supply Zones ...
|
||
|
||
/**
|
||
* Calls When new Supply Zone Event ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param zone: XZone instance ...
|
||
*/
|
||
virtual void OnSupplyZoneEvent(
|
||
ENUM_XPOI_EVENTS event,
|
||
XZone &zone //
|
||
)
|
||
{
|
||
}
|
||
|
||
/**
|
||
* Register an Event Listener for New Supply Zone Event ...
|
||
*
|
||
* @param listener: TXZoneEventHandler instance ...
|
||
*/
|
||
void AddSupplyZoneEventListener(TXZoneEventHandler listener)
|
||
{
|
||
//
|
||
Add(
|
||
listener,
|
||
mSupplyZoneEventListeners //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Demand Zones ...
|
||
|
||
/**
|
||
* Calls When new Demand Zone Event ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param zone: XZone instance ...
|
||
*/
|
||
virtual void OnDemandZoneEvent(
|
||
ENUM_XPOI_EVENTS event,
|
||
XZone &zone //
|
||
)
|
||
{
|
||
}
|
||
|
||
/**
|
||
* Register an Event Listener for New Demand Zone Event ...
|
||
*
|
||
* @param listener: TXZoneEventHandler instance ...
|
||
*/
|
||
void AddDemandZoneEventListener(TXZoneEventHandler listener)
|
||
{
|
||
//
|
||
Add(
|
||
listener,
|
||
mDemandZoneEventListeners //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Order Blocks ...
|
||
|
||
//
|
||
// Bullish Order Blocks ...
|
||
|
||
/**
|
||
* Calls When new Bullish Order Block Event ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param zone: XZone instance ...
|
||
*/
|
||
virtual void OnBullishOrderBlockEvent(
|
||
ENUM_XPOI_EVENTS event,
|
||
XZone &zone //
|
||
)
|
||
{
|
||
}
|
||
|
||
/**
|
||
* Register an Event Listener for New Bullish Order Block Event ...
|
||
*
|
||
* @param listener: TXZoneEventHandler instance ...
|
||
*/
|
||
void AddBullishOrderBlockEventListener(TXZoneEventHandler listener)
|
||
{
|
||
//
|
||
Add(
|
||
listener,
|
||
mBullishOrderBlockEventListeners //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Bearish Order Blocks ...
|
||
|
||
/**
|
||
* Calls When new Bearish Order Block Event ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param zone: XZone instance ...
|
||
*/
|
||
virtual void OnBearishOrderBlockEvent(
|
||
ENUM_XPOI_EVENTS event,
|
||
XZone &zone //
|
||
)
|
||
{
|
||
}
|
||
|
||
/**
|
||
* Register an Event Listener for New Bearish Order Block Event ...
|
||
*
|
||
* @param listener: TXZoneEventHandler instance ...
|
||
*/
|
||
void AddBearishOrderBlockEventListener(TXZoneEventHandler listener)
|
||
{
|
||
//
|
||
Add(
|
||
listener,
|
||
mBearishOrderBlockEventListeners //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Fai Value Gaps ...
|
||
|
||
//
|
||
// Bullish FVGs ...
|
||
|
||
/**
|
||
* Calls When new Bullish FVG Event ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param zone: XZone instance ...
|
||
*/
|
||
virtual void OnBullishFVGEvent(
|
||
ENUM_XPOI_EVENTS event,
|
||
XZone &zone //
|
||
)
|
||
{
|
||
}
|
||
|
||
/**
|
||
* Register an Event Listener for New Bullish FVG Event ...
|
||
*
|
||
* @param listener: TXZoneEventHandler instance ...
|
||
*/
|
||
void AddBullishFVGEventListener(TXZoneEventHandler listener)
|
||
{
|
||
//
|
||
Add(
|
||
listener,
|
||
mBullishFVGEventListeners //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Bearish FVGs ...
|
||
|
||
/**
|
||
* Calls When new Bearish FVG Event ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param zone: XZone instance ...
|
||
*/
|
||
virtual void OnBearishFVGEvent(
|
||
ENUM_XPOI_EVENTS event,
|
||
XZone &zone //
|
||
)
|
||
{
|
||
}
|
||
|
||
/**
|
||
* Register an Event Listener for New Bearish FVG Event ...
|
||
*
|
||
* @param listener: TXZoneEventHandler instance ...
|
||
*/
|
||
void AddBearishFVGEventListener(TXZoneEventHandler listener)
|
||
{
|
||
//
|
||
Add(
|
||
listener,
|
||
mBearishFVGEventListeners //
|
||
);
|
||
}
|
||
|
||
//
|
||
protected:
|
||
//
|
||
|
||
//
|
||
// Actions ...
|
||
|
||
/**
|
||
* Lock ...
|
||
*/
|
||
void Lock()
|
||
{
|
||
mLock = true;
|
||
}
|
||
|
||
/**
|
||
* Unlock ...
|
||
*/
|
||
void Unlock()
|
||
{
|
||
mLock = false;
|
||
}
|
||
|
||
/**
|
||
* Detect Required POI(s) ...
|
||
*
|
||
* @param barIndex: Integer Start bar index ...
|
||
* 0 is Default ...
|
||
*/
|
||
void DetectRequiredPOIs(int barIndex = 0)
|
||
{
|
||
//
|
||
// Validate Reuired POI(s) ...
|
||
int requiredPOIs = MaxNumberOfRequiredPOIs();
|
||
if (requiredPOIs <= 0)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
Lock();
|
||
|
||
//
|
||
// Normalize Bar Index ...
|
||
if (barIndex < 0)
|
||
{
|
||
barIndex = 0;
|
||
}
|
||
|
||
//
|
||
bool canContinue = true;
|
||
while (canContinue)
|
||
{
|
||
//
|
||
// Define Index of Bars ...
|
||
int zIndex = barIndex;
|
||
int cIndex = zIndex + 1;
|
||
|
||
//
|
||
datetime cTime = TimeCurrent();
|
||
|
||
//
|
||
XOHCL zBar;
|
||
bool isRetrieved = mBarTracker.GetBar(zBar, zIndex);
|
||
if (!isRetrieved)
|
||
{
|
||
break;
|
||
}
|
||
|
||
//
|
||
XOHCL cBar;
|
||
isRetrieved = mBarTracker.GetBar(cBar, cIndex);
|
||
if (!isRetrieved)
|
||
{
|
||
break;
|
||
}
|
||
|
||
//
|
||
// Detect POI(s) based On Current Bar ...
|
||
|
||
//
|
||
// Trade Days ...
|
||
bool allowTradingDays = AllowTradingDays();
|
||
int daysCount = ArraySize(mTradingDays);
|
||
if (allowTradingDays &&
|
||
daysCount < requiredPOIs)
|
||
{
|
||
//
|
||
XOHCL zDayBar;
|
||
isRetrieved = zDayBar.Init(
|
||
mSymbol,
|
||
PERIOD_D1,
|
||
zIndex //
|
||
);
|
||
if (!isRetrieved)
|
||
{
|
||
break;
|
||
}
|
||
|
||
//
|
||
XOHCL cDayBar;
|
||
isRetrieved = cDayBar.Init(
|
||
mSymbol,
|
||
PERIOD_D1,
|
||
cIndex //
|
||
);
|
||
if (!isRetrieved)
|
||
{
|
||
break;
|
||
}
|
||
|
||
//
|
||
XTradeDay tradeDay;
|
||
tradeDay.from = zDayBar.time;
|
||
|
||
//
|
||
datetime lastBarTime = zDayBar.GetLastBarTimeOfPeriod(mPeriod);
|
||
tradeDay.to = lastBarTime;
|
||
|
||
//
|
||
int idx = HasTradeDay(tradeDay.from);
|
||
if (!IsValidIndex(idx))
|
||
{
|
||
//
|
||
AddRef(
|
||
tradeDay,
|
||
mTradingDays //
|
||
);
|
||
|
||
//
|
||
daysCount = ArraySize(mTradingDays);
|
||
}
|
||
}
|
||
|
||
//
|
||
// Market Sessions ...
|
||
int sessionsCount = ArraySize(mSessions);
|
||
bool allowMarketSessions = AllowMarketSessions();
|
||
int marketSessionsCount = ArraySize(mMarketSessions);
|
||
if (allowMarketSessions &&
|
||
IsValidSize(sessionsCount) &&
|
||
marketSessionsCount < sessionsCount * requiredPOIs)
|
||
{
|
||
//
|
||
for (int i = 0; i < sessionsCount; i++)
|
||
{
|
||
//
|
||
XSession iSession = mSessions[i];
|
||
int iCount = CountMarketSessions(iSession.session);
|
||
if (iCount >= requiredPOIs)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
datetime zTimeGMT = GetUTCTime(zBar.time);
|
||
string zTimeString = GetTimeString(zTimeGMT);
|
||
|
||
//
|
||
bool isStarted = iSession.start == zTimeString;
|
||
bool isEnded = iSession.end == zTimeString;
|
||
|
||
//
|
||
// Detect Sessions Based on Time ...
|
||
// Since All Session Close Times Related to Current Date and
|
||
// in Required POIs we Moving Back from Current Date ...
|
||
if (isEnded && iCount < requiredPOIs)
|
||
{
|
||
//
|
||
// Check Market Session Doesnt Exists by End Time ...
|
||
int iIDX = HasMarketSessionByEndTime(
|
||
iSession.session,
|
||
zBar.time //
|
||
);
|
||
if (!IsValidIndex(iIDX))
|
||
{
|
||
//
|
||
XMarketSession iMarketSession;
|
||
iMarketSession.session = iSession.session;
|
||
iMarketSession.to = zBar.time;
|
||
|
||
//
|
||
int iSessionWorkingHoure = SessionOpenHours();
|
||
int iSessionWorkingSeconds = iSessionWorkingHoure * 60 * 60;
|
||
iMarketSession.from = (datetime)((int)zBar.time - iSessionWorkingSeconds);
|
||
|
||
//
|
||
AddRef(
|
||
iMarketSession,
|
||
mMarketSessions //
|
||
);
|
||
|
||
//
|
||
marketSessionsCount = ArraySize(mMarketSessions);
|
||
}
|
||
}
|
||
|
||
//
|
||
}
|
||
}
|
||
|
||
//
|
||
// Swning Highs and Lows ...
|
||
|
||
//
|
||
// Swing Highs ...
|
||
bool allowSwingHighs = AllowSwingHighs();
|
||
int swingHighsCount = ArraySize(mSwingHighs);
|
||
if (allowSwingHighs &&
|
||
swingHighsCount < requiredPOIs)
|
||
{
|
||
//
|
||
bool isSwingHigh = cBar.IsSimpleSwingHigh(SwingHighThreshold());
|
||
if (isSwingHigh)
|
||
{
|
||
//
|
||
bool isAdded = AddBar(
|
||
X_POI_SWING_HIGH,
|
||
cBar,
|
||
mSwingHighs //
|
||
);
|
||
|
||
//
|
||
if (isAdded)
|
||
{
|
||
swingHighsCount = ArraySize(mSwingHighs);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Swing Lows ...
|
||
bool allowSwingLows = AllowSwingLows();
|
||
int swingLowsCount = ArraySize(mSwingLows);
|
||
if (allowSwingLows &&
|
||
swingLowsCount < requiredPOIs)
|
||
{
|
||
//
|
||
bool isSwingLow = cBar.IsSimpleSwingLow(SwingLowThreshold());
|
||
if (isSwingLow)
|
||
{
|
||
//
|
||
bool isAdded = AddBar(
|
||
X_POI_SWING_LOW,
|
||
cBar,
|
||
mSwingLows //
|
||
);
|
||
|
||
//
|
||
if (isAdded)
|
||
{
|
||
swingLowsCount = ArraySize(mSwingLows);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Momentum Bars ...
|
||
bool allowMomentumBars = AllowMomentumBars();
|
||
int momentumBarsCount = ArraySize(mMomentumBars);
|
||
if (allowMomentumBars &&
|
||
momentumBarsCount < requiredPOIs)
|
||
{
|
||
//
|
||
bool isStrongBar = cBar.IsStrong(MomentumBarPercent());
|
||
|
||
//
|
||
// Bullish ...
|
||
bool isSharpBullish = cBar.IsSharpBullish(
|
||
MomentumBarLoopBack(),
|
||
MomentumBarSharpRatio() //
|
||
);
|
||
|
||
//
|
||
// Bearish ...
|
||
bool isSharpBearish = cBar.IsSharpBearish(
|
||
MomentumBarLoopBack(),
|
||
MomentumBarSharpRatio() //
|
||
);
|
||
|
||
//
|
||
bool isMomentumBar =
|
||
isStrongBar &&
|
||
(isSharpBearish ||
|
||
isSharpBullish);
|
||
if (isMomentumBar)
|
||
{
|
||
//
|
||
bool isAdded = AddBar(
|
||
X_POI_MOMENTUM_BAR,
|
||
cBar,
|
||
mMomentumBars //
|
||
);
|
||
|
||
//
|
||
if (isAdded)
|
||
{
|
||
momentumBarsCount = ArraySize(mMomentumBars);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Rejection Bars ...
|
||
bool allowRejectionBars = AllowRejectionBars();
|
||
int rejectionBarsCount = ArraySize(mRejectionBars);
|
||
if (allowRejectionBars &&
|
||
rejectionBarsCount < requiredPOIs)
|
||
{
|
||
//
|
||
bool isRejectionBar =
|
||
cBar.HasStrongLowShadow(
|
||
RejectionBarPercent(),
|
||
RejectionBarLoopBack(),
|
||
RejectionBarSharpRatio() //
|
||
) ||
|
||
cBar.HasStrongHighShadow(
|
||
RejectionBarPercent(),
|
||
RejectionBarLoopBack(),
|
||
RejectionBarSharpRatio() //
|
||
);
|
||
|
||
//
|
||
if (isRejectionBar)
|
||
{
|
||
//
|
||
bool isAdded = AddBar(
|
||
X_POI_REJECTION_BAR,
|
||
cBar,
|
||
mRejectionBars //
|
||
);
|
||
|
||
//
|
||
if (isAdded)
|
||
{
|
||
rejectionBarsCount = ArraySize(mRejectionBars);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Support nad Resistance Zones ...
|
||
|
||
//
|
||
// Support Zones ...
|
||
bool allowSupportZones = AllowSupportZones();
|
||
int supportZonesCount = ArraySize(mSupportZones);
|
||
if (allowSupportZones &&
|
||
supportZonesCount < requiredPOIs)
|
||
{
|
||
//
|
||
XOHCL support;
|
||
bool hasSupport = cBar.HasSupport(
|
||
support,
|
||
SupportZonePriceType(),
|
||
SupportZoneLoopBack() //
|
||
);
|
||
|
||
//
|
||
if (hasSupport)
|
||
{
|
||
//
|
||
bool isAdded = AddBar(
|
||
X_POI_SUPPORT_ZONE,
|
||
support,
|
||
mSupportZones //
|
||
);
|
||
|
||
//
|
||
if (isAdded)
|
||
{
|
||
supportZonesCount = ArraySize(mSupportZones);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Resistance Zones ...
|
||
bool allowResistanceZones = AllowResistanceZones();
|
||
int resistanceZonesCount = ArraySize(mResistanceZones);
|
||
if (allowResistanceZones &&
|
||
resistanceZonesCount < requiredPOIs)
|
||
{
|
||
//
|
||
XOHCL resistance;
|
||
bool hasResistance = cBar.HasResistance(
|
||
resistance,
|
||
ResistanceZonePriceType(),
|
||
ResistanceZoneLoopBack() //
|
||
);
|
||
|
||
//
|
||
if (hasResistance)
|
||
{
|
||
//
|
||
bool isAdded = AddBar(
|
||
X_POI_RESISTANCE_ZONE,
|
||
resistance,
|
||
mResistanceZones //
|
||
);
|
||
|
||
//
|
||
if (isAdded)
|
||
{
|
||
resistanceZonesCount = ArraySize(mResistanceZones);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Supply and Demand Zones ...
|
||
|
||
//
|
||
// Supply Zones ...
|
||
bool allowSupplyZones = AllowSupplyZones();
|
||
int supplyZonesCount = ArraySize(mSupplyZones);
|
||
if (allowSupplyZones &&
|
||
supplyZonesCount < requiredPOIs)
|
||
{
|
||
//
|
||
datetime endTime = cBar.time;
|
||
|
||
//
|
||
datetime cSupplyZoneStartTime = iTime(
|
||
Symbol(),
|
||
SupplyZonePeriod(),
|
||
supplyZonesCount + 1 //
|
||
);
|
||
datetime startTime = cSupplyZoneStartTime;
|
||
|
||
//
|
||
int cSupplyZoneStartIndex = iBarShift(
|
||
Symbol(),
|
||
Period(),
|
||
cSupplyZoneStartTime //
|
||
);
|
||
|
||
//
|
||
XOHCL swings[];
|
||
for (int i = 0; i < cSupplyZoneStartIndex; i++)
|
||
{
|
||
//
|
||
XOHCL iBar;
|
||
bool isIBarInited = iBar.Init(
|
||
Symbol(),
|
||
Period(),
|
||
i //
|
||
);
|
||
if (!isIBarInited)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
// Check is Bar Swing or not ...
|
||
bool isSwing = iBar.IsSimpleSwingHigh();
|
||
if (!isSwing)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
AddRef(
|
||
iBar,
|
||
swings //
|
||
);
|
||
}
|
||
|
||
//
|
||
XOHCL selectedSwing;
|
||
int swingsCount = ArraySize(swings);
|
||
if (IsValidSize(swingsCount))
|
||
{
|
||
//
|
||
for (int i = 0; i < swingsCount; i++)
|
||
{
|
||
//
|
||
XOHCL iSwing = swings[i];
|
||
if (!selectedSwing.IsValid() ||
|
||
selectedSwing.high < iSwing.high)
|
||
{
|
||
selectedSwing = iSwing;
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
if (selectedSwing.IsValid())
|
||
{
|
||
//
|
||
XZone zone;
|
||
bool isInited = zone.Init(
|
||
selectedSwing.high,
|
||
selectedSwing.low,
|
||
ToString(X_POI_SUPPLY_ZONE) + "_" + ToString(SupplyZonePeriod()),
|
||
startTime,
|
||
endTime //
|
||
);
|
||
if (isInited)
|
||
{
|
||
//
|
||
AddRef(
|
||
zone,
|
||
mSupplyZones //
|
||
);
|
||
|
||
//
|
||
supplyZonesCount = ArraySize(mSupplyZones);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Demand Zones ...
|
||
bool allowDemandZones = AllowDemandZones();
|
||
int demandZonesCount = ArraySize(mDemandZones);
|
||
if (allowDemandZones &&
|
||
demandZonesCount < requiredPOIs)
|
||
{
|
||
//
|
||
datetime endTime = cBar.time;
|
||
|
||
//
|
||
datetime cDemandZoneStartTime = iTime(
|
||
Symbol(),
|
||
DemandZonePeriod(),
|
||
demandZonesCount + 1 //
|
||
);
|
||
datetime startTime = cDemandZoneStartTime;
|
||
|
||
//
|
||
int cDemandZoneStartIndex = iBarShift(
|
||
Symbol(),
|
||
Period(),
|
||
cDemandZoneStartTime //
|
||
);
|
||
|
||
//
|
||
XOHCL swings[];
|
||
for (int i = 0; i < cDemandZoneStartIndex; i++)
|
||
{
|
||
//
|
||
XOHCL iBar;
|
||
bool isIBarInited = iBar.Init(
|
||
Symbol(),
|
||
Period(),
|
||
i //
|
||
);
|
||
if (!isIBarInited)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
// Check is Bar Swing or not ...
|
||
bool isSwing = iBar.IsSimpleSwingLow();
|
||
if (!isSwing)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
AddRef(
|
||
iBar,
|
||
swings //
|
||
);
|
||
}
|
||
|
||
//
|
||
XOHCL selectedSwing;
|
||
int swingsCount = ArraySize(swings);
|
||
if (IsValidSize(swingsCount))
|
||
{
|
||
//
|
||
for (int i = 0; i < swingsCount; i++)
|
||
{
|
||
//
|
||
XOHCL iSwing = swings[i];
|
||
if (!selectedSwing.IsValid() ||
|
||
selectedSwing.low > iSwing.low)
|
||
{
|
||
selectedSwing = iSwing;
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
if (selectedSwing.IsValid())
|
||
{
|
||
//
|
||
XZone zone;
|
||
bool isInited = zone.Init(
|
||
selectedSwing.high,
|
||
selectedSwing.low,
|
||
ToString(X_POI_DEMAND_ZONE) + "_" + ToString(SupplyZonePeriod()),
|
||
startTime,
|
||
endTime //
|
||
);
|
||
if (isInited)
|
||
{
|
||
//
|
||
AddRef(
|
||
zone,
|
||
mDemandZones //
|
||
);
|
||
|
||
//
|
||
demandZonesCount = ArraySize(mDemandZones);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Order Blocks ...
|
||
|
||
//
|
||
// Bullish Order Blocks ...
|
||
bool allowBullishOrderBlocks = AllowBullishOrderBlocks();
|
||
int bullishOrderBlocksCount = ArraySize(mBullishOrderBlocks);
|
||
if (allowBullishOrderBlocks &&
|
||
bullishOrderBlocksCount < requiredPOIs)
|
||
{
|
||
//
|
||
XOHCL ob;
|
||
bool hasOB = cBar.HasBullishOrderBlock(
|
||
ob,
|
||
RequiredBarsForBullishOrderBlock() //
|
||
);
|
||
if (hasOB)
|
||
{
|
||
//
|
||
XZone zone;
|
||
bool isAdded = AddZone(
|
||
zone, //
|
||
ob,
|
||
cBar.time,
|
||
X_POI_BULLISH_ORDERBLOCK,
|
||
mBullishOrderBlocks //
|
||
);
|
||
if (isAdded)
|
||
{
|
||
bullishOrderBlocksCount = ArraySize(mBullishOrderBlocks);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Bearish Order Blocks ...
|
||
bool allowBearishOrderBlocks = AllowBearishOrderBlocks();
|
||
int bearishOrderBlocksCount = ArraySize(mBearishOrderBlocks);
|
||
if (allowBearishOrderBlocks &&
|
||
bearishOrderBlocksCount < requiredPOIs)
|
||
{
|
||
//
|
||
XOHCL ob;
|
||
bool hasOB = cBar.HasBearishOrderBlock(
|
||
ob,
|
||
RequiredBarsForBearishOrderBlock() //
|
||
);
|
||
if (hasOB)
|
||
{
|
||
//
|
||
XZone zone;
|
||
bool isAdded = AddZone(
|
||
zone, //
|
||
ob,
|
||
cBar.time,
|
||
X_POI_BEARISH_ORDERBLOCK,
|
||
mBearishOrderBlocks //
|
||
);
|
||
if (isAdded)
|
||
{
|
||
bullishOrderBlocksCount = ArraySize(mBearishOrderBlocks);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Fair Value Gaps ...
|
||
|
||
//
|
||
// Bullish FVGs ...
|
||
bool allowBullishFVGs = AllowBullishFVGs();
|
||
int bullishFVGsCount = ArraySize(mBullishFVGs);
|
||
if (allowBullishFVGs &&
|
||
bullishFVGsCount < requiredPOIs)
|
||
{
|
||
//
|
||
double upper;
|
||
double lower;
|
||
datetime start;
|
||
datetime end;
|
||
bool hasBullishFVG = cBar.HasBullishFVG(
|
||
upper,
|
||
lower,
|
||
start,
|
||
end,
|
||
BullishFVGForceMiddleBarCheck(),
|
||
BullishFVGForceCheckLastBarDirection() //
|
||
);
|
||
if (hasBullishFVG)
|
||
{
|
||
//
|
||
XZone zone;
|
||
bool isAdded = AddZone(
|
||
zone,
|
||
upper,
|
||
lower,
|
||
start,
|
||
end,
|
||
X_POI_BULLISH_FVG,
|
||
mBullishFVGs //
|
||
);
|
||
if (isAdded)
|
||
{
|
||
bullishFVGsCount = ArraySize(mBullishFVGs);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Bearish FVGs ...
|
||
bool allowBearishFVGs = AllowBearishFVGs();
|
||
int bearishFVGsCount = ArraySize(mBearishFVGs);
|
||
if (allowBearishFVGs &&
|
||
bearishFVGsCount < requiredPOIs)
|
||
{
|
||
//
|
||
double upper;
|
||
double lower;
|
||
datetime start;
|
||
datetime end;
|
||
bool hasBearishFVG = cBar.HasBearishFVG(
|
||
upper,
|
||
lower,
|
||
start,
|
||
end,
|
||
BearishFVGForceMiddleBarCheck(),
|
||
BearishFVGForceCheckLastBarDirection() //
|
||
);
|
||
if (hasBearishFVG)
|
||
{
|
||
//
|
||
XZone zone;
|
||
bool isAdded = AddZone(
|
||
zone,
|
||
upper,
|
||
lower,
|
||
start,
|
||
end,
|
||
X_POI_BEARISH_FVG,
|
||
mBearishFVGs //
|
||
);
|
||
if (isAdded)
|
||
{
|
||
bearishFVGsCount = ArraySize(mBearishFVGs);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Detect Required Conditions for Loop ...
|
||
//
|
||
|
||
//
|
||
// Market Sessions Requirements ...
|
||
bool isNeedMoreMarketSessions = (!IsValidSize(sessionsCount)
|
||
? true
|
||
: marketSessionsCount < (sessionsCount * requiredPOIs));
|
||
canContinue =
|
||
//
|
||
// Trade Days ...
|
||
(allowTradingDays &&
|
||
daysCount < requiredPOIs) ||
|
||
//
|
||
// Market Sessions ...
|
||
(allowMarketSessions &&
|
||
isNeedMoreMarketSessions) ||
|
||
//
|
||
// Swing High and Low (s) ...
|
||
(allowSwingHighs &&
|
||
swingHighsCount < requiredPOIs) ||
|
||
(allowSwingLows &&
|
||
swingLowsCount < requiredPOIs) ||
|
||
//
|
||
// Momentum Bars ...
|
||
(allowMomentumBars &&
|
||
momentumBarsCount < requiredPOIs) ||
|
||
//
|
||
// Rejection Bars ...
|
||
(allowRejectionBars &&
|
||
rejectionBarsCount < requiredPOIs) ||
|
||
//
|
||
// Support and Resistance Zones ...
|
||
(allowSupportZones &&
|
||
supportZonesCount < requiredPOIs) ||
|
||
(allowResistanceZones &&
|
||
resistanceZonesCount < requiredPOIs) ||
|
||
//
|
||
// Supply and Demand Zones ...
|
||
(allowSupplyZones &&
|
||
supplyZonesCount < requiredPOIs) ||
|
||
(allowDemandZones &&
|
||
demandZonesCount < requiredPOIs) ||
|
||
//
|
||
// Order Blocks ...
|
||
(allowBullishOrderBlocks &&
|
||
bullishOrderBlocksCount < requiredPOIs) ||
|
||
(allowBearishOrderBlocks &&
|
||
bearishOrderBlocksCount < requiredPOIs) ||
|
||
//
|
||
// Fair Value Gaps ...
|
||
(allowBullishFVGs &&
|
||
bullishFVGsCount < requiredPOIs) ||
|
||
(allowBearishFVGs &&
|
||
bearishFVGsCount < requiredPOIs)
|
||
//
|
||
;
|
||
if (canContinue)
|
||
{
|
||
barIndex++;
|
||
}
|
||
}
|
||
|
||
//
|
||
// int errorArr[];
|
||
// if (canContinue)
|
||
// {
|
||
// //
|
||
// int t = errorArr[5];
|
||
// }
|
||
|
||
//
|
||
// Complete Calculations ...
|
||
|
||
//
|
||
// Reverse Trading Days ...
|
||
XTradeDay tmpDays[];
|
||
Copy(
|
||
mTradingDays,
|
||
tmpDays //
|
||
);
|
||
Clean(mTradingDays);
|
||
ArrayReverse(tmpDays);
|
||
Copy(
|
||
tmpDays,
|
||
mTradingDays //
|
||
);
|
||
Clean(tmpDays);
|
||
|
||
//
|
||
// Reverse Market Sessions ...
|
||
XMarketSession tmpSessions[];
|
||
Copy(
|
||
mMarketSessions,
|
||
tmpSessions //
|
||
);
|
||
Clean(mMarketSessions);
|
||
ArrayReverse(tmpSessions);
|
||
Copy(
|
||
tmpSessions,
|
||
mMarketSessions //
|
||
);
|
||
|
||
//
|
||
XOHCL tmpBars[];
|
||
|
||
//
|
||
// Reverse Swing Highs ...
|
||
Copy(
|
||
mSwingHighs,
|
||
tmpBars //
|
||
);
|
||
Clean(mSwingHighs);
|
||
ArrayReverse(tmpBars);
|
||
Copy(
|
||
tmpBars,
|
||
mSwingHighs //
|
||
);
|
||
Clean(tmpBars);
|
||
|
||
//
|
||
// Reverse Swing Lows ...
|
||
Copy(
|
||
mSwingLows,
|
||
tmpBars //
|
||
);
|
||
Clean(mSwingLows);
|
||
ArrayReverse(tmpBars);
|
||
Copy(
|
||
tmpBars,
|
||
mSwingLows //
|
||
);
|
||
Clean(tmpBars);
|
||
|
||
//
|
||
// Reverse Momentum Bars ...
|
||
Copy(
|
||
mMomentumBars,
|
||
tmpBars //
|
||
);
|
||
Clean(mMomentumBars);
|
||
ArrayReverse(tmpBars);
|
||
Copy(
|
||
tmpBars,
|
||
mMomentumBars //
|
||
);
|
||
Clean(tmpBars);
|
||
|
||
//
|
||
// Reverse Rejection Bars ...
|
||
Copy(
|
||
mRejectionBars,
|
||
tmpBars //
|
||
);
|
||
Clean(mRejectionBars);
|
||
ArrayReverse(tmpBars);
|
||
Copy(
|
||
tmpBars,
|
||
mRejectionBars //
|
||
);
|
||
Clean(tmpBars);
|
||
|
||
//
|
||
// Reverse Support Zones ...
|
||
Copy(
|
||
mSupportZones,
|
||
tmpBars //
|
||
);
|
||
Clean(mSupportZones);
|
||
ArrayReverse(tmpBars);
|
||
Copy(
|
||
tmpBars,
|
||
mSupportZones //
|
||
);
|
||
Clean(tmpBars);
|
||
|
||
//
|
||
// Reverse Resistance Zones ...
|
||
Copy(
|
||
mResistanceZones,
|
||
tmpBars //
|
||
);
|
||
Clean(mResistanceZones);
|
||
ArrayReverse(tmpBars);
|
||
Copy(
|
||
tmpBars,
|
||
mResistanceZones //
|
||
);
|
||
Clean(tmpBars);
|
||
|
||
//
|
||
XZone tmpZones[];
|
||
|
||
//
|
||
// Supply and Demand Zones ...
|
||
|
||
//
|
||
Copy(
|
||
mSupplyZones,
|
||
tmpZones //
|
||
);
|
||
Clean(mSupplyZones);
|
||
ArrayReverse(tmpZones);
|
||
Copy(
|
||
tmpZones,
|
||
mSupplyZones //
|
||
);
|
||
Clean(tmpZones);
|
||
|
||
//
|
||
Copy(
|
||
mDemandZones,
|
||
tmpZones //
|
||
);
|
||
Clean(mDemandZones);
|
||
ArrayReverse(tmpZones);
|
||
Copy(
|
||
tmpZones,
|
||
mDemandZones //
|
||
);
|
||
Clean(tmpZones);
|
||
|
||
//
|
||
// Order Blocks ...
|
||
|
||
//
|
||
Copy(
|
||
mBullishOrderBlocks,
|
||
tmpZones //
|
||
);
|
||
Clean(mBullishOrderBlocks);
|
||
ArrayReverse(tmpZones);
|
||
Copy(
|
||
tmpZones,
|
||
mBullishOrderBlocks //
|
||
);
|
||
Clean(tmpZones);
|
||
|
||
//
|
||
Copy(
|
||
mBearishOrderBlocks,
|
||
tmpZones //
|
||
);
|
||
Clean(mBearishOrderBlocks);
|
||
ArrayReverse(tmpZones);
|
||
Copy(
|
||
tmpZones,
|
||
mBearishOrderBlocks //
|
||
);
|
||
Clean(tmpZones);
|
||
|
||
//
|
||
// Fair Value Gaps ...
|
||
|
||
//
|
||
Copy(
|
||
mBullishFVGs,
|
||
tmpZones //
|
||
);
|
||
Clean(mBullishFVGs);
|
||
ArrayReverse(tmpZones);
|
||
Copy(
|
||
tmpZones,
|
||
mBullishFVGs //
|
||
);
|
||
Clean(tmpZones);
|
||
|
||
//
|
||
Copy(
|
||
mBearishFVGs,
|
||
tmpZones //
|
||
);
|
||
Clean(mBearishFVGs);
|
||
ArrayReverse(tmpZones);
|
||
Copy(
|
||
tmpZones,
|
||
mBearishFVGs //
|
||
);
|
||
Clean(tmpZones);
|
||
|
||
//
|
||
// ...
|
||
|
||
//
|
||
Unlock();
|
||
DrawPOIs();
|
||
}
|
||
|
||
//
|
||
// Destroy POIs ...
|
||
|
||
/**
|
||
* Destroy All POI(s) ...
|
||
*/
|
||
void DestroyPOIs()
|
||
{
|
||
//
|
||
// Trading Days ...
|
||
DestroyTradingDays();
|
||
|
||
//
|
||
// Market Sessions ...
|
||
DestroyMarketSessions();
|
||
|
||
//
|
||
// Momentum Bars ...
|
||
DestroyMomentumBars();
|
||
|
||
//
|
||
// Rejection Bars ...
|
||
DestroyRejectionBars();
|
||
|
||
//
|
||
// Swing High and Zone (s) ...
|
||
DestroySwingHighs();
|
||
DestroySwingLows();
|
||
|
||
//
|
||
// Support and Resistance Zones ...
|
||
DestroySupportZones();
|
||
DestroyResistanceZones();
|
||
|
||
//
|
||
// Supply and Demand Zones ...
|
||
DestroySupplyZones();
|
||
DestroyDemandZones();
|
||
|
||
//
|
||
// Order Blocks ...
|
||
DestroyBullishOrderBlocks();
|
||
DestroyBearishOrderBlocks();
|
||
|
||
//
|
||
// Fai Value Gaps ...
|
||
DestroyBullishFVGs();
|
||
DestroyBearishFVGs();
|
||
}
|
||
|
||
/**
|
||
* Destroy Trading Days ...
|
||
*/
|
||
void DestroyTradingDays()
|
||
{
|
||
Clean(mTradingDays);
|
||
}
|
||
|
||
/**
|
||
* Destroy Swing Highs ...
|
||
*/
|
||
void DestroySwingHighs()
|
||
{
|
||
Clean(mSwingHighs);
|
||
}
|
||
|
||
/**
|
||
* Destroy Swing Lows ...
|
||
*/
|
||
void DestroySwingLows()
|
||
{
|
||
Clean(mSwingLows);
|
||
}
|
||
|
||
/**
|
||
* Destroy Momentum Bars ...
|
||
*/
|
||
void DestroyMomentumBars()
|
||
{
|
||
Clean(mMomentumBars);
|
||
}
|
||
|
||
/**
|
||
* Destroy Rejection Bars ...
|
||
*/
|
||
void DestroyRejectionBars()
|
||
{
|
||
Clean(mRejectionBars);
|
||
}
|
||
|
||
/**
|
||
* Destroy Market Sessions ...
|
||
*/
|
||
void DestroyMarketSessions()
|
||
{
|
||
Clean(mMarketSessions);
|
||
}
|
||
|
||
/**
|
||
* Destroy Support Zones ...
|
||
*/
|
||
void DestroySupportZones()
|
||
{
|
||
Clean(mSupportZones);
|
||
}
|
||
|
||
/**
|
||
* Destroy Resistance Zones ...
|
||
*/
|
||
void DestroyResistanceZones()
|
||
{
|
||
Clean(mResistanceZones);
|
||
}
|
||
|
||
/**
|
||
* Destroy Supply Zones ...
|
||
*/
|
||
void DestroySupplyZones()
|
||
{
|
||
Clean(mSupplyZones);
|
||
}
|
||
|
||
/**
|
||
* Destroy Demand Zones ...
|
||
*/
|
||
void DestroyDemandZones()
|
||
{
|
||
Clean(mDemandZones);
|
||
}
|
||
|
||
/**
|
||
* Destroy Bullish Order Blocks ...
|
||
*/
|
||
void DestroyBullishOrderBlocks()
|
||
{
|
||
Clean(mBullishOrderBlocks);
|
||
}
|
||
|
||
/**
|
||
* Destroy Bearish Order Blocks ...
|
||
*/
|
||
void DestroyBearishOrderBlocks()
|
||
{
|
||
Clean(mBearishOrderBlocks);
|
||
}
|
||
|
||
/**
|
||
* Destroy Bullish FVGs ...
|
||
*/
|
||
void DestroyBullishFVGs()
|
||
{
|
||
Clean(mBullishFVGs);
|
||
}
|
||
|
||
/**
|
||
* Destroy Bearish FVGs ...
|
||
*/
|
||
void DestroyBearishFVGs()
|
||
{
|
||
Clean(mBearishFVGs);
|
||
}
|
||
|
||
//
|
||
// Draw Actions ...
|
||
|
||
/**
|
||
* Draw All POI(s) ...
|
||
*/
|
||
void DrawPOIs()
|
||
{
|
||
//
|
||
// Trading Days ...
|
||
DrawTradingDays();
|
||
|
||
//
|
||
// Market Sessions ...
|
||
DrawMarketSessions();
|
||
|
||
//
|
||
// Momentum Bars ...
|
||
DrawMomentumBars();
|
||
|
||
//
|
||
// Rejection Bars ...
|
||
DrawRejectionBars();
|
||
|
||
//
|
||
// Swing High and Low (s) ...
|
||
DrawSwingHighs();
|
||
DrawSwingLows();
|
||
|
||
//
|
||
// Support and Resistance (s) ...
|
||
DrawSupportZones();
|
||
DrawResistanceZones();
|
||
|
||
//
|
||
// Supply and Demand Zones ...
|
||
DrawSupplyZones();
|
||
DrawDemandZones();
|
||
|
||
//
|
||
// Order Blocks ...
|
||
DrawBullishOrderBlocks();
|
||
DrawBearishOrderBlocks();
|
||
|
||
//
|
||
// Fair Value Gaps ...
|
||
DrawBullishFVGs();
|
||
DrawBearishFVGs();
|
||
}
|
||
|
||
/**
|
||
* Draw Trading Days ...
|
||
*/
|
||
void DrawTradingDays()
|
||
{
|
||
//
|
||
bool allow = AllowDrawTradingDays();
|
||
if (!allow)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mTradingDays);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XTradeDay iDay = mTradingDays[i];
|
||
|
||
//
|
||
string iName = iDay.GetTag();
|
||
int iIDX = HasTradingDayObject(
|
||
iName //
|
||
);
|
||
if (IsValidIndex(iIDX))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
CreateTradingDayObject(iDay, iName);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check a Trading Day is Drawn Before or not ...
|
||
*
|
||
* @param name: String ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasTradingDayObject(
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(name))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = mTradingDayObjects.Total();
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
string objName = ((XCBaseObject *)mTradingDayObjects.At(i)).ObjName();
|
||
if (objName == name)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Draw Swing Highs ...
|
||
*/
|
||
void DrawSwingHighs()
|
||
{
|
||
//
|
||
bool allow = AllowDrawSwingHighs();
|
||
if (!allow)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mSwingHighs);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XOHCL iSwing = mSwingHighs[i];
|
||
|
||
//
|
||
string iName = iSwing.GetTag(ToString(X_POI_SWING_HIGH));
|
||
int iIDX = HasSwingHighObject(
|
||
iName //
|
||
);
|
||
if (IsValidIndex(iIDX))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
CreateSwingHighObject(iSwing, iName);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check a Swing High is Drawn Before or not ...
|
||
*
|
||
* @param name: String ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasSwingHighObject(
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(name))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = mSwingHighObjects.Total();
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
string objName = ((CChartObjectArrow *)mSwingHighObjects.At(i)).Name();
|
||
if (objName == name)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Draw Swing Lows ...
|
||
*/
|
||
void DrawSwingLows()
|
||
{
|
||
//
|
||
bool allow = AllowDrawSwingLows();
|
||
if (!allow)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mSwingLows);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XOHCL iSwing = mSwingLows[i];
|
||
|
||
//
|
||
string iName = iSwing.GetTag(ToString(X_POI_SWING_LOW));
|
||
int iIDX = HasSwingLowObject(
|
||
iName //
|
||
);
|
||
if (IsValidIndex(iIDX))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
CreateSwingLowObject(iSwing, iName);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check a Swing Low is Drawn Before or not ...
|
||
*
|
||
* @param name: String ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasSwingLowObject(
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(name))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = mSwingLowObjects.Total();
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
string objName = ((CChartObjectArrow *)mSwingLowObjects.At(i)).Name();
|
||
if (objName == name)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Draw Momentum Bars ...
|
||
*/
|
||
void DrawMomentumBars()
|
||
{
|
||
//
|
||
bool allow = AllowDrawMomentumBars();
|
||
if (!allow)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mMomentumBars);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XOHCL iBar = mMomentumBars[i];
|
||
|
||
//
|
||
string iName = iBar.GetTag(ToString(X_POI_MOMENTUM_BAR));
|
||
int iIDX = HasMomentumBarObject(
|
||
iName //
|
||
);
|
||
if (IsValidIndex(iIDX))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
CreateMomentumBarObject(iBar, iName);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check a Momentum Bar is Drawn Before or not ...
|
||
*
|
||
* @param name: String ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasMomentumBarObject(
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(name))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = mMomentumBarObjects.Total();
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
string objName = ((CChartObjectArrow *)mMomentumBarObjects.At(i)).Name();
|
||
if (objName == name)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Draw Rejection Bars ...
|
||
*/
|
||
void DrawRejectionBars()
|
||
{
|
||
//
|
||
bool allow = AllowDrawRejectionBars();
|
||
if (!allow)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mRejectionBars);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XOHCL iBar = mRejectionBars[i];
|
||
|
||
//
|
||
string iName = iBar.GetTag(ToString(X_POI_REJECTION_BAR));
|
||
int iIDX = HasRejectionBarObject(
|
||
iName //
|
||
);
|
||
if (IsValidIndex(iIDX))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
CreateRejectionBarObject(iBar, iName);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check a Rejection Bar is Drawn Before or not ...
|
||
*
|
||
* @param name: String ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasRejectionBarObject(
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(name))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = mRejectionBarObjects.Total();
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
string objName = ((CChartObjectArrow *)mRejectionBarObjects.At(i)).Name();
|
||
if (objName == name)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Draw Market Sessions ...
|
||
*/
|
||
void DrawMarketSessions()
|
||
{
|
||
//
|
||
bool allow = AllowDrawMarketSessions();
|
||
if (!allow)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mMarketSessions);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XMarketSession iMarketSession = mMarketSessions[i];
|
||
|
||
//
|
||
string iName = iMarketSession.GetTag();
|
||
int iIDX = HasMarketessionObject(
|
||
iName //
|
||
);
|
||
if (IsValidIndex(iIDX))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
CreateMarketSessionObject(iMarketSession, iName);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check a Market Session is Drawn Before or not ...
|
||
*
|
||
* @param name: String ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasMarketessionObject(
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(name))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = mMarketSessionObjects.Total();
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
string objName = ((XCMarketSessionObject *)mMarketSessionObjects.At(i)).ObjName();
|
||
if (objName == name)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Draw Support Zones ...
|
||
*/
|
||
void DrawSupportZones()
|
||
{
|
||
//
|
||
bool allow = AllowDrawSupportZones();
|
||
if (!allow)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mSupportZones);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XOHCL iSupportZone = mSupportZones[i];
|
||
|
||
//
|
||
string iName = iSupportZone.GetTag(ToString(X_POI_SUPPORT_ZONE));
|
||
int iIDX = HasSupportZoneObject(
|
||
iName //
|
||
);
|
||
if (IsValidIndex(iIDX))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
CreateSupportZoneObject(iSupportZone, iName);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check a Suport Zone is Drawn Before or not ...
|
||
*
|
||
* @param name: String ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasSupportZoneObject(
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(name))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = mSupportZoneObjects.Total();
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
string objName = ((XCSupportZoneObject *)mSupportZoneObjects.At(i)).ObjName();
|
||
if (objName == name)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Draw Resistance Zones ...
|
||
*/
|
||
void DrawResistanceZones()
|
||
{
|
||
//
|
||
bool allow = AllowDrawResistanceZones();
|
||
if (!allow)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mResistanceZones);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XOHCL iResistanceZone = mResistanceZones[i];
|
||
|
||
//
|
||
string iName = iResistanceZone.GetTag(ToString(X_POI_RESISTANCE_ZONE));
|
||
int iIDX = HasResistanceZoneObject(
|
||
iName //
|
||
);
|
||
if (IsValidIndex(iIDX))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
CreateResistanceZoneObject(iResistanceZone, iName);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check a Resistance Zone is Drawn Before or not ...
|
||
*
|
||
* @param name: String ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasResistanceZoneObject(
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(name))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = mResistanceZoneObjects.Total();
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
string objName = ((XCResistanceZoneObject *)mResistanceZoneObjects.At(i)).ObjName();
|
||
if (objName == name)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Draw Supply Zones ...
|
||
*/
|
||
void DrawSupplyZones()
|
||
{
|
||
//
|
||
bool allow = AllowDrawSupplyZones();
|
||
if (!allow)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mSupplyZones);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XZone iSupplyZone = mSupplyZones[i];
|
||
|
||
//
|
||
string iName = iSupplyZone.GetTag();
|
||
int iIDX = HasSupplyZoneObject(
|
||
iName //
|
||
);
|
||
if (IsValidIndex(iIDX))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
CreateSupplyZoneObject(iSupplyZone, iName);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check a Supply Zone is Drawn Before or not ...
|
||
*
|
||
* @param name: String ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasSupplyZoneObject(
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(name))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = mSupplyZoneObjects.Total();
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
string objName = ((XCSupplyZoneObject *)mSupplyZoneObjects.At(i)).ObjName();
|
||
if (objName == name)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Draw Demand Zones ...
|
||
*/
|
||
void DrawDemandZones()
|
||
{
|
||
//
|
||
bool allow = AllowDrawDemandZones();
|
||
if (!allow)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mDemandZones);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XZone iDemandZone = mDemandZones[i];
|
||
|
||
//
|
||
string iName = iDemandZone.GetTag();
|
||
int iIDX = HasDemandZoneObject(
|
||
iName //
|
||
);
|
||
if (IsValidIndex(iIDX))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
CreateDemandZoneObject(iDemandZone, iName);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check a Demand Zone is Drawn Before or not ...
|
||
*
|
||
* @param name: String ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasDemandZoneObject(
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(name))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = mDemandZoneObjects.Total();
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
string objName = ((XCDemandZoneObject *)mDemandZoneObjects.At(i)).ObjName();
|
||
if (objName == name)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Draw Bullish Order Blocks ...
|
||
*/
|
||
void DrawBullishOrderBlocks()
|
||
{
|
||
//
|
||
bool allow = AllowDrawBullishOrderBlocks();
|
||
if (!allow)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mBullishOrderBlocks);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XZone iBullishOB = mBullishOrderBlocks[i];
|
||
|
||
//
|
||
string iName = iBullishOB.GetTag();
|
||
int iIDX = HasBullishOrderBlockObject(
|
||
iName //
|
||
);
|
||
if (IsValidIndex(iIDX))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
CreateBullishOrderBlockObject(iBullishOB, iName);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check a Bullish Order Block is Drawn Before or not ...
|
||
*
|
||
* @param name: String ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasBullishOrderBlockObject(
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(name))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = mBullishOrderBlockObjects.Total();
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
string objName = ((XCBullishOrderBlockObject *)mBullishOrderBlockObjects.At(i)).ObjName();
|
||
if (objName == name)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Draw Bearish Order Blocks ...
|
||
*/
|
||
void DrawBearishOrderBlocks()
|
||
{
|
||
//
|
||
bool allow = AllowDrawBearishOrderBlocks();
|
||
if (!allow)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mBearishOrderBlocks);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XZone iBearishOB = mBearishOrderBlocks[i];
|
||
|
||
//
|
||
string iName = iBearishOB.GetTag();
|
||
int iIDX = HasBearishOrderBlockObject(
|
||
iName //
|
||
);
|
||
if (IsValidIndex(iIDX))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
CreateBearishOrderBlockObject(iBearishOB, iName);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check a Bearish Order Block is Drawn Before or not ...
|
||
*
|
||
* @param name: String ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasBearishOrderBlockObject(
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(name))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = mBearishOrderBlockObjects.Total();
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
string objName = ((XCBearishOrderBlockObject *)mBearishOrderBlockObjects.At(i)).ObjName();
|
||
if (objName == name)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Draw Bullish FVGs ...
|
||
*/
|
||
void DrawBullishFVGs()
|
||
{
|
||
//
|
||
bool allow = AllowDrawBullishFVGs();
|
||
if (!allow)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mBullishFVGs);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XZone iFVG = mBullishFVGs[i];
|
||
|
||
//
|
||
string iName = iFVG.GetTag();
|
||
int iIDX = HasBullishFVGObject(
|
||
iName //
|
||
);
|
||
if (IsValidIndex(iIDX))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
CreateBullishFVGObject(iFVG, iName);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check a Bullish FVG is Drawn Before or not ...
|
||
*
|
||
* @param name: String ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasBullishFVGObject(
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(name))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = mBullishFVGObjects.Total();
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
string objName = ((XCBullishFVGObject *)mBullishFVGObjects.At(i)).ObjName();
|
||
if (objName == name)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Draw Bearish FVGs ...
|
||
*/
|
||
void DrawBearishFVGs()
|
||
{
|
||
//
|
||
bool allow = AllowDrawBearishFVGs();
|
||
if (!allow)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mBearishFVGs);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XZone iFVG = mBearishFVGs[i];
|
||
|
||
//
|
||
string iName = iFVG.GetTag();
|
||
int iIDX = HasBearishFVGObject(
|
||
iName //
|
||
);
|
||
if (IsValidIndex(iIDX))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//
|
||
CreateBearishFVGObject(iFVG, iName);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check a Bearish FVG is Drawn Before or not ...
|
||
*
|
||
* @param name: String ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasBearishFVGObject(
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(name))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = mBearishFVGObjects.Total();
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
string objName = ((XCBearishFVGObject *)mBearishFVGObjects.At(i)).ObjName();
|
||
if (objName == name)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
//
|
||
|
||
/**
|
||
* Clean All Drawn Objects ...
|
||
*/
|
||
void DestroyObjects()
|
||
{
|
||
//
|
||
// Trading Days ...
|
||
DestroyTradingTradingDayObjects();
|
||
|
||
//
|
||
// Market Sessions ...
|
||
DestroyMarketSessionObjects();
|
||
|
||
//
|
||
// Momentum Bars ...
|
||
DestroyMomentumBarObjects();
|
||
|
||
//
|
||
// Rejection Bars ...
|
||
DestroyRejectionBarObjects();
|
||
|
||
//
|
||
// Swing High and Low (s) ...
|
||
DestroySwingLowObjects();
|
||
DestroySwingHighObjects();
|
||
|
||
//
|
||
// Support and Resistanc (s) ...
|
||
DestroySupportZoneObjects();
|
||
DestroyResistanceZoneObjects();
|
||
|
||
//
|
||
// Supply and Demand Zones ..
|
||
DestroySupplyZoneObjects();
|
||
DestroyDemandZoneObjects();
|
||
|
||
//
|
||
// Order Blocks ...
|
||
DestroyBullishOrderBlockObjects();
|
||
DestroyBearishOrderBlockObjects();
|
||
|
||
//
|
||
// Fair Value Gaps ...
|
||
DestroyBullishFVGObjects();
|
||
DestroyBearishFVGObjects();
|
||
}
|
||
|
||
/**
|
||
* Clean Swing Highs Drawn Objects ...
|
||
*/
|
||
void DestroySwingHighObjects()
|
||
{
|
||
mSwingHighObjects.Clear();
|
||
}
|
||
|
||
/**
|
||
* Clean Swing Lows Drawn Objects ...
|
||
*/
|
||
void DestroySwingLowObjects()
|
||
{
|
||
mSwingLowObjects.Clear();
|
||
}
|
||
|
||
/**
|
||
* Clean Momentum Bars Drawn Objects ...
|
||
*/
|
||
void DestroyMomentumBarObjects()
|
||
{
|
||
mMomentumBarObjects.Clear();
|
||
}
|
||
|
||
/**
|
||
* Clean Rejection Bars Drawn Objects ...
|
||
*/
|
||
void DestroyRejectionBarObjects()
|
||
{
|
||
mRejectionBarObjects.Clear();
|
||
}
|
||
|
||
/**
|
||
* Clean Trading Day Drawn Objects ...
|
||
*/
|
||
void DestroyTradingTradingDayObjects()
|
||
{
|
||
mTradingDayObjects.Clear();
|
||
}
|
||
|
||
/**
|
||
* Destroy Market Sessions Drawn Objects ...
|
||
*/
|
||
void DestroyMarketSessionObjects()
|
||
{
|
||
mMarketSessionObjects.Clear();
|
||
}
|
||
|
||
/**
|
||
* Destroy Support Zone Drawn Objects ...
|
||
*/
|
||
void DestroySupportZoneObjects()
|
||
{
|
||
mSupportZoneObjects.Clear();
|
||
}
|
||
|
||
/**
|
||
* Destroy Resistance Zone Drawn Objects ...
|
||
*/
|
||
void DestroyResistanceZoneObjects()
|
||
{
|
||
mResistanceZoneObjects.Clear();
|
||
}
|
||
|
||
/**
|
||
* Destroy Supply Zone Drawn Objects ...
|
||
*/
|
||
void DestroySupplyZoneObjects()
|
||
{
|
||
mSupplyZoneObjects.Clear();
|
||
}
|
||
|
||
/**
|
||
* Destroy Demand Zone Drawn Objects ...
|
||
*/
|
||
void DestroyDemandZoneObjects()
|
||
{
|
||
mDemandZoneObjects.Clear();
|
||
}
|
||
|
||
/**
|
||
* Destroy Bullish Order Block Drawn Objects ...
|
||
*/
|
||
void DestroyBullishOrderBlockObjects()
|
||
{
|
||
mBullishOrderBlockObjects.Clear();
|
||
}
|
||
|
||
/**
|
||
* Destroy Bearish Order Block Drawn Objects ...
|
||
*/
|
||
void DestroyBearishOrderBlockObjects()
|
||
{
|
||
mBearishOrderBlockObjects.Clear();
|
||
}
|
||
|
||
/**
|
||
* Destroy Bullish FVG Drawn Objects ...
|
||
*/
|
||
void DestroyBullishFVGObjects()
|
||
{
|
||
mBullishFVGObjects.Clear();
|
||
}
|
||
|
||
/**
|
||
* Destroy Bearish FVG Drawn Objects ...
|
||
*/
|
||
void DestroyBearishFVGObjects()
|
||
{
|
||
mBearishFVGObjects.Clear();
|
||
}
|
||
|
||
//
|
||
// ...
|
||
|
||
/**
|
||
* Detect an Object Exists in Array or not ...
|
||
*
|
||
* @param name: String ...
|
||
* @param array: CArrayObj instance ...
|
||
*
|
||
* @return ( int ): index of Object ...
|
||
*/
|
||
int HasObject(
|
||
string name,
|
||
CArrayObj &array //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(name))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = array.Total();
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
// XCBaseObject *iObj = ((XCBaseObject *)array.At(i));
|
||
// string objName = iObj.ObjName();
|
||
// if (objName == name)
|
||
// {
|
||
// //
|
||
// result = i;
|
||
// break;
|
||
// }
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
//
|
||
// Event Handler Notifiers ...
|
||
|
||
//
|
||
// Trading Days ...
|
||
|
||
/**
|
||
* Notify New Trading Day Event Handlers ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
*/
|
||
void NotifyTradingDayEventListeners(
|
||
ENUM_XPOI_EVENTS event //
|
||
)
|
||
{
|
||
//
|
||
int count = ArraySize(mTradingDayEventListeners);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
TXPOIEventHandler iListener = mTradingDayEventListeners[i];
|
||
iListener(event);
|
||
}
|
||
}
|
||
|
||
//
|
||
// Market Sessions ...
|
||
|
||
/**
|
||
* Notify New Market Session Event Handlers ...
|
||
*
|
||
* @param session: ENUM_XSESSION member ...
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
*/
|
||
void NotifyMarketSessionEventListeners(
|
||
ENUM_XSESSION session,
|
||
ENUM_XPOI_EVENTS event //
|
||
)
|
||
{
|
||
//
|
||
int count = ArraySize(mMarketSessionEventListeners);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
TXSessionEventHandler iListener = mMarketSessionEventListeners[i];
|
||
iListener(session, event);
|
||
}
|
||
}
|
||
|
||
//
|
||
// Swings ...
|
||
|
||
//
|
||
// Swing Highs ...
|
||
|
||
/**
|
||
* Notify New Swing High Point Event Handlers ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XOHCL instance ...
|
||
*/
|
||
void NotifySwingHighEventListeners(
|
||
ENUM_XPOI_EVENTS event,
|
||
XOHCL &bar //
|
||
)
|
||
{
|
||
//
|
||
if (!bar.IsValid())
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mSwingHighEventListeners);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
TXOHCLEventHandler iListener = mSwingHighEventListeners[i];
|
||
iListener(event, bar);
|
||
}
|
||
}
|
||
|
||
//
|
||
// Swing Lows ...
|
||
|
||
/**
|
||
* Notify New Swing Low Point Event Handlers ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XOHCL instance ...
|
||
*/
|
||
void NotifySwingLowEventListeners(
|
||
ENUM_XPOI_EVENTS event,
|
||
XOHCL &bar //
|
||
)
|
||
{
|
||
//
|
||
if (!bar.IsValid())
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mSwingLowEventListeners);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
TXOHCLEventHandler iListener = mSwingLowEventListeners[i];
|
||
iListener(event, bar);
|
||
}
|
||
}
|
||
|
||
//
|
||
// Momentum Bars ...
|
||
|
||
/**
|
||
* Notify New Momentum Bar Event Handlers ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XOHCL instance ...
|
||
*/
|
||
void NotifyMomentumBarEventListeners(
|
||
ENUM_XPOI_EVENTS event,
|
||
XOHCL &bar //
|
||
)
|
||
{
|
||
//
|
||
if (!bar.IsValid())
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mMomentumBarEventListeners);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
TXOHCLEventHandler iListener = mMomentumBarEventListeners[i];
|
||
iListener(event, bar);
|
||
}
|
||
}
|
||
|
||
//
|
||
// Rejection Bars ...
|
||
|
||
/**
|
||
* Notify New Rejection Bar Event Handlers ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XOHCL instance ...
|
||
*/
|
||
void NotifyRejectionBarEventListeners(
|
||
ENUM_XPOI_EVENTS event,
|
||
XOHCL &bar //
|
||
)
|
||
{
|
||
//
|
||
if (!bar.IsValid())
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mRejectionBarEventListeners);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
TXOHCLEventHandler iListener = mRejectionBarEventListeners[i];
|
||
iListener(event, bar);
|
||
}
|
||
}
|
||
|
||
//
|
||
// Support and Resistance Zones ...
|
||
|
||
//
|
||
// Support Zones ...
|
||
|
||
/**
|
||
* Notify New Support Zone Event Handlers ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XOHCL instance ...
|
||
*/
|
||
void NotifySupportZoneEventListeners(
|
||
ENUM_XPOI_EVENTS event,
|
||
XOHCL &bar //
|
||
)
|
||
{
|
||
//
|
||
if (!bar.IsValid())
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mSupportZoneEventListeners);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
TXOHCLEventHandler iListener = mSupportZoneEventListeners[i];
|
||
iListener(event, bar);
|
||
}
|
||
}
|
||
|
||
//
|
||
// Resistance Zones ...
|
||
|
||
/**
|
||
* Notify New Resistance Zone Event Handlers ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XOHCL instance ...
|
||
*/
|
||
void NotifyResistanceZoneEventListeners(
|
||
ENUM_XPOI_EVENTS event,
|
||
XOHCL &bar //
|
||
)
|
||
{
|
||
//
|
||
if (!bar.IsValid())
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mResistanceZoneEventListeners);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
TXOHCLEventHandler iListener = mResistanceZoneEventListeners[i];
|
||
iListener(event, bar);
|
||
}
|
||
}
|
||
|
||
//
|
||
// Supply and Demand Zones ...
|
||
|
||
//
|
||
// Supply Zones ...
|
||
|
||
/**
|
||
* Notify New Supply Zone Event Handlers ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XZone instance ...
|
||
*/
|
||
void NotifySupplyZoneEventListeners(
|
||
ENUM_XPOI_EVENTS event,
|
||
XZone &zone //
|
||
)
|
||
{
|
||
//
|
||
if (!zone.IsValid())
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mSupplyZoneEventListeners);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
TXZoneEventHandler iListener = mSupplyZoneEventListeners[i];
|
||
iListener(event, zone);
|
||
}
|
||
}
|
||
|
||
//
|
||
// Demand Zones ...
|
||
|
||
/**
|
||
* Notify New Demand Zone Event Handlers ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XZone instance ...
|
||
*/
|
||
void NotifyDemandZoneEventListeners(
|
||
ENUM_XPOI_EVENTS event,
|
||
XZone &zone //
|
||
)
|
||
{
|
||
//
|
||
if (!zone.IsValid())
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mDemandZoneEventListeners);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
TXZoneEventHandler iListener = mDemandZoneEventListeners[i];
|
||
iListener(event, zone);
|
||
}
|
||
}
|
||
|
||
//
|
||
// Order Blocks ...
|
||
|
||
//
|
||
// Bullish Order Blocks ...
|
||
|
||
/**
|
||
* Notify New Bullish Order Block Event Handlers ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XZone instance ...
|
||
*/
|
||
void NotifyBullishOrderBlockEventListeners(
|
||
ENUM_XPOI_EVENTS event,
|
||
XZone &zone //
|
||
)
|
||
{
|
||
//
|
||
if (!zone.IsValid())
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mBullishOrderBlockEventListeners);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
TXZoneEventHandler iListener = mBullishOrderBlockEventListeners[i];
|
||
iListener(event, zone);
|
||
}
|
||
}
|
||
|
||
//
|
||
// Bearish Order Blocks ...
|
||
|
||
/**
|
||
* Notify New Bearish Order Block Event Handlers ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XZone instance ...
|
||
*/
|
||
void NotifyBearishOrderBlockEventListeners(
|
||
ENUM_XPOI_EVENTS event,
|
||
XZone &zone //
|
||
)
|
||
{
|
||
//
|
||
if (!zone.IsValid())
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mBearishOrderBlockEventListeners);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
TXZoneEventHandler iListener = mBearishOrderBlockEventListeners[i];
|
||
iListener(event, zone);
|
||
}
|
||
}
|
||
|
||
//
|
||
// Fair Value Gaps ...
|
||
|
||
/**
|
||
* Notify New Bullish FVG Event Handlers ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XZone instance ...
|
||
*/
|
||
void NotifyBullishFVGEventListeners(
|
||
ENUM_XPOI_EVENTS event,
|
||
XZone &zone //
|
||
)
|
||
{
|
||
//
|
||
if (!zone.IsValid())
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mBullishFVGEventListeners);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
TXZoneEventHandler iListener = mBullishFVGEventListeners[i];
|
||
iListener(event, zone);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Notify New Bearish FVG Event Handlers ...
|
||
*
|
||
* @param event: ENUM_XPOI_EVENTS member ...
|
||
* @param bar: XZone instance ...
|
||
*/
|
||
void NotifyBearishFVGEventListeners(
|
||
ENUM_XPOI_EVENTS event,
|
||
XZone &zone //
|
||
)
|
||
{
|
||
//
|
||
if (!zone.IsValid())
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mBearishFVGEventListeners);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
TXZoneEventHandler iListener = mBearishFVGEventListeners[i];
|
||
iListener(event, zone);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Destroy all Registered Event Listeners ...
|
||
*/
|
||
void DestroyEventListeners()
|
||
{
|
||
//
|
||
// Trading Days ...
|
||
Clean(mTradingDayEventListeners);
|
||
|
||
//
|
||
// Market Sessions ...
|
||
Clean(mMarketSessionEventListeners);
|
||
|
||
//
|
||
// Momentum Bars ...
|
||
Clean(mMomentumBarEventListeners);
|
||
|
||
//
|
||
// Rejection Bars ...
|
||
Clean(mRejectionBarEventListeners);
|
||
|
||
//
|
||
// Swing High and Low (s) ...
|
||
Clean(mSwingLowEventListeners);
|
||
Clean(mSwingHighEventListeners);
|
||
|
||
//
|
||
// Support and Resistance Zones ...
|
||
Clean(mSupportZoneEventListeners);
|
||
Clean(mResistanceZoneEventListeners);
|
||
|
||
//
|
||
// Supply and Demand Zones ...
|
||
Clean(mSupplyZoneEventListeners);
|
||
Clean(mDemandZoneEventListeners);
|
||
|
||
//
|
||
// Order Blocks ...
|
||
Clean(mBullishOrderBlockEventListeners);
|
||
Clean(mBearishOrderBlockEventListeners);
|
||
|
||
//
|
||
// Fair Value Gaps ...
|
||
Clean(mBullishFVGEventListeners);
|
||
Clean(mBearishFVGEventListeners);
|
||
}
|
||
|
||
//
|
||
// ...
|
||
//
|
||
|
||
//
|
||
// Session ...
|
||
|
||
/**
|
||
* Find Specific Session Index ...
|
||
*
|
||
* @param session: ENUM_XSESSION member ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int FindSession(ENUM_XSESSION session)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
int count = ArraySize(mSessions);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XSession iSession = mSessions[i];
|
||
|
||
//
|
||
if (iSession.session == session)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Destroy Sessions ...
|
||
*/
|
||
void DestroySessions()
|
||
{
|
||
Clean(mSessions);
|
||
}
|
||
|
||
/**
|
||
* Find Specified Trade Day based on Start Time ...
|
||
*
|
||
* @param start: DateTime ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasTradeDay(datetime start)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(start))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mTradingDays);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XTradeDay iDay = mTradingDays[i];
|
||
|
||
//
|
||
if (iDay.from == start)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Find Specified Trade Day based on End Time ...
|
||
*
|
||
* @param start: DateTime ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasTradeDayBayEndTime(datetime end)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(end))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mTradingDays);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XTradeDay iDay = mTradingDays[i];
|
||
|
||
//
|
||
if (iDay.to == end)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
//
|
||
|
||
/**
|
||
* Find Market Session by Providing Start Time ...
|
||
*
|
||
* @param session: ENUM_XSESSION member ...
|
||
* @param start: DateTime ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasMarketSessionByStartTime(
|
||
ENUM_XSESSION session,
|
||
datetime start //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(start))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mMarketSessions);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XMarketSession iMarketSession = mMarketSessions[i];
|
||
|
||
//
|
||
if (iMarketSession.session == session &&
|
||
iMarketSession.from == start)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Find Market Session by Providing Start Time ...
|
||
*
|
||
* @param session: ENUM_XSESSION member ...
|
||
* @param end: DateTime ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int HasMarketSessionByEndTime(
|
||
ENUM_XSESSION session,
|
||
datetime end //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
if (!IsValid(end))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(mMarketSessions);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XMarketSession iMarketSession = mMarketSessions[i];
|
||
|
||
//
|
||
if (iMarketSession.session == session &&
|
||
iMarketSession.to == end)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Count Specified Market Sessions ...
|
||
*
|
||
* @param session: ENUM_XSESSION member ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int CountMarketSessions(ENUM_XSESSION session)
|
||
{
|
||
//
|
||
int result = 0;
|
||
|
||
//
|
||
int count = ArraySize(mMarketSessions);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XMarketSession iMarketSession = mMarketSessions[i];
|
||
|
||
//
|
||
if (iMarketSession.session == session)
|
||
{
|
||
result++;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int FindBarIndex(
|
||
ENUM_XPOIS type,
|
||
XOHCL &bar,
|
||
XOHCL &list[] //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
bool isValidType =
|
||
type == X_POI_SWING_LOW ||
|
||
type == X_POI_SWING_HIGH ||
|
||
type == X_POI_SUPPORT_ZONE ||
|
||
type == X_POI_MOMENTUM_BAR ||
|
||
type == X_POI_REJECTION_BAR ||
|
||
type == X_POI_RESISTANCE_ZONE;
|
||
if (!isValidType)
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int count = ArraySize(list);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XOHCL iBar = list[i];
|
||
|
||
//
|
||
bool isSameLow =
|
||
bar.low == iBar.low;
|
||
|
||
//
|
||
bool isSameHigh =
|
||
bar.high == iBar.high;
|
||
|
||
//
|
||
bool isSameUp =
|
||
bar.GetUp() == iBar.GetUp();
|
||
|
||
//
|
||
bool isSameDown =
|
||
bar.GetDown() == iBar.GetDown();
|
||
|
||
//
|
||
// Check Conditions Based On Type ...
|
||
bool canBreak = false;
|
||
if (type == X_POI_SWING_LOW ||
|
||
type == X_POI_SWING_HIGH ||
|
||
type == X_POI_MOMENTUM_BAR ||
|
||
type == X_POI_REJECTION_BAR)
|
||
{
|
||
//
|
||
canBreak =
|
||
isSameUp &&
|
||
isSameLow &&
|
||
isSameHigh &&
|
||
isSameDown;
|
||
}
|
||
else if (type == X_POI_SUPPORT_ZONE)
|
||
{
|
||
//
|
||
canBreak =
|
||
isSameLow &&
|
||
isSameDown;
|
||
}
|
||
else if (type == X_POI_RESISTANCE_ZONE)
|
||
{
|
||
//
|
||
canBreak =
|
||
isSameUp &&
|
||
isSameHigh;
|
||
}
|
||
|
||
//
|
||
if (canBreak)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
//
|
||
bool AddBar(
|
||
ENUM_XPOIS type,
|
||
XOHCL &bar,
|
||
XOHCL &list[] //
|
||
)
|
||
{
|
||
//
|
||
bool result = false;
|
||
|
||
//
|
||
result = bar.IsValid();
|
||
if (!result)
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
result =
|
||
type == X_POI_SWING_LOW ||
|
||
type == X_POI_SWING_HIGH ||
|
||
type == X_POI_SUPPORT_ZONE ||
|
||
type == X_POI_MOMENTUM_BAR ||
|
||
type == X_POI_REJECTION_BAR ||
|
||
type == X_POI_RESISTANCE_ZONE;
|
||
if (!result)
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int idx = FindBarIndex(
|
||
type,
|
||
bar,
|
||
list //
|
||
);
|
||
result = !IsValidIndex(idx);
|
||
if (!result)
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
AddRef(
|
||
bar,
|
||
list //
|
||
);
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
//
|
||
|
||
/**
|
||
* Find Specified Zone Index ...
|
||
*
|
||
* @param zone: XZone instance
|
||
* @param list: XZone Collection ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int FindZoneIndex(
|
||
XZone &zone,
|
||
XZone &list[] //
|
||
)
|
||
{
|
||
//
|
||
int result = -1;
|
||
|
||
//
|
||
int count = ArraySize(list);
|
||
if (!IsValidSize(count))
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
XZone iZone = list[i];
|
||
|
||
//
|
||
if (iZone.upper == zone.upper &&
|
||
iZone.lower == zone.lower)
|
||
{
|
||
//
|
||
result = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Add Specific Zone to List ...
|
||
*
|
||
* @param ob: XOHCL ...
|
||
* @param endTime: Datetime ...
|
||
* @param type: ENUM_X_POI member ...
|
||
* @param list: XZone instance Collection ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AddZone(
|
||
XZone &zone,
|
||
XOHCL &ob,
|
||
datetime endTime,
|
||
ENUM_XPOIS type,
|
||
XZone &list[] //
|
||
)
|
||
{
|
||
//
|
||
bool result = false;
|
||
|
||
//
|
||
result = type == X_POI_SUPPORT_ZONE ||
|
||
type == X_POI_RESISTANCE_ZONE ||
|
||
type == X_POI_BULLISH_ORDERBLOCK ||
|
||
type == X_POI_BEARISH_ORDERBLOCK;
|
||
if (!result)
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
NormalizeTime(endTime);
|
||
|
||
//
|
||
datetime startTime = (datetime)((int)ob.time - (PeriodSeconds(Period()) * 2));
|
||
|
||
//
|
||
result = zone.Init(
|
||
ob.high,
|
||
ob.low,
|
||
ToString(type),
|
||
startTime,
|
||
endTime //
|
||
);
|
||
if (!result)
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int idx = FindZoneIndex(
|
||
zone,
|
||
list //
|
||
);
|
||
result = !IsValidIndex(idx);
|
||
if (!result)
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
AddRef(
|
||
zone,
|
||
list //
|
||
);
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Initiate and Add Specific Zone to List ...
|
||
*
|
||
* @param zone: XZone instance ...
|
||
* @param upper: Double ...
|
||
* @param lower: Double ...
|
||
* @param start: DateTime ...
|
||
* @param end: DateTime ...
|
||
* @param type: ENUM_XPOIS member ...
|
||
* @param list: XZone instance Collection ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool AddZone(
|
||
XZone &zone,
|
||
double upper,
|
||
double lower,
|
||
datetime start,
|
||
datetime end,
|
||
ENUM_XPOIS type,
|
||
XZone &list[] //
|
||
)
|
||
{
|
||
//
|
||
bool result = false;
|
||
|
||
//
|
||
result = zone.Init(
|
||
upper,
|
||
lower,
|
||
ToString(type),
|
||
start,
|
||
end //
|
||
);
|
||
if (!result)
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
int idx = FindZoneIndex(
|
||
zone,
|
||
list //
|
||
);
|
||
result = !IsValidIndex(idx);
|
||
if (!result)
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
AddRef(
|
||
zone,
|
||
list //
|
||
);
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Cleanup Unused Objects ...
|
||
*/
|
||
void CleanupUnusedPOIs()
|
||
{
|
||
//
|
||
int maxAllowed = MaxNumberOfPOIs();
|
||
if (!IsValidSize(maxAllowed))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
int tradingDaysCount = ArraySize(mTradingDays);
|
||
int marketSessionsCount = ArraySize(mMarketSessions);
|
||
int swingHighsCount = ArraySize(mSwingHighs);
|
||
int swingLowsCount = ArraySize(mSwingLows);
|
||
int momentumBarsCount = ArraySize(mMomentumBars);
|
||
int rejectionBarsCount = ArraySize(mRejectionBars);
|
||
int supportZonesCount = ArraySize(mSupportZones);
|
||
int resistanceZonesCount = ArraySize(mResistanceZones);
|
||
int supplyZonesCount = ArraySize(mSupplyZones);
|
||
int demandZonesCount = ArraySize(mDemandZones);
|
||
int bullishOBsCount = ArraySize(mBullishOrderBlocks);
|
||
int bearishOBsCount = ArraySize(mBearishOrderBlocks);
|
||
int bullishFVGsCount = ArraySize(mBullishFVGs);
|
||
int bearishFVGsCount = ArraySize(mBearishFVGs);
|
||
|
||
//
|
||
int from = 0;
|
||
int requiredPOIs = MaxNumberOfRequiredPOIs();
|
||
int count = maxAllowed - requiredPOIs;
|
||
int to = count - 1;
|
||
|
||
//
|
||
// Trading Days ...
|
||
if (tradingDaysCount >= maxAllowed)
|
||
{
|
||
//
|
||
ArrayRemove(
|
||
mTradingDays,
|
||
from,
|
||
count //
|
||
);
|
||
|
||
//
|
||
mTradingDayObjects.DeleteRange(
|
||
from,
|
||
to //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Market Sessions ...
|
||
if (marketSessionsCount >= maxAllowed)
|
||
{
|
||
//
|
||
ArrayRemove(
|
||
mMarketSessions,
|
||
from,
|
||
count //
|
||
);
|
||
|
||
//
|
||
mMarketSessionObjects.DeleteRange(
|
||
from,
|
||
to //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Momentum Bars ...
|
||
if (momentumBarsCount >= maxAllowed)
|
||
{
|
||
//
|
||
ArrayRemove(
|
||
mMomentumBars,
|
||
from,
|
||
count //
|
||
);
|
||
|
||
//
|
||
mMomentumBarObjects.DeleteRange(
|
||
from,
|
||
to //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Rejection Bars ...
|
||
if (rejectionBarsCount >= maxAllowed)
|
||
{
|
||
//
|
||
ArrayRemove(
|
||
mRejectionBars,
|
||
from,
|
||
count //
|
||
);
|
||
|
||
//
|
||
mRejectionBarObjects.DeleteRange(
|
||
from,
|
||
to //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Swing High and Low (s) ...
|
||
|
||
//
|
||
// Swing Highs ...
|
||
if (swingHighsCount >= maxAllowed)
|
||
{
|
||
//
|
||
ArrayRemove(
|
||
mSwingHighs,
|
||
from,
|
||
count //
|
||
);
|
||
|
||
//
|
||
mSwingHighObjects.DeleteRange(
|
||
from,
|
||
to //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Swing Lows ...
|
||
if (swingLowsCount >= maxAllowed)
|
||
{
|
||
//
|
||
ArrayRemove(
|
||
mSwingLows,
|
||
from,
|
||
count //
|
||
);
|
||
|
||
//
|
||
mSwingLowObjects.DeleteRange(
|
||
from,
|
||
to //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Support and Resistance Zones ...
|
||
|
||
//
|
||
// Support Zones ...
|
||
if (supportZonesCount >= maxAllowed)
|
||
{
|
||
//
|
||
ArrayRemove(
|
||
mSupportZones,
|
||
from,
|
||
count //
|
||
);
|
||
|
||
//
|
||
mSupportZoneObjects.DeleteRange(
|
||
from,
|
||
to //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Resistance Zones ...
|
||
if (resistanceZonesCount >= maxAllowed)
|
||
{
|
||
//
|
||
ArrayRemove(
|
||
mResistanceZones,
|
||
from,
|
||
count //
|
||
);
|
||
|
||
//
|
||
mResistanceZoneObjects.DeleteRange(
|
||
from,
|
||
to //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Supply and Demand Zones ...
|
||
|
||
//
|
||
// Supply Zones ...
|
||
if (supplyZonesCount >= maxAllowed)
|
||
{
|
||
//
|
||
ArrayRemove(
|
||
mSupplyZones,
|
||
from,
|
||
count //
|
||
);
|
||
|
||
//
|
||
mSupplyZoneObjects.DeleteRange(
|
||
from,
|
||
to //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Demand Zones ...
|
||
if (demandZonesCount >= maxAllowed)
|
||
{
|
||
//
|
||
ArrayRemove(
|
||
mDemandZones,
|
||
from,
|
||
count //
|
||
);
|
||
|
||
//
|
||
mDemandZoneObjects.DeleteRange(
|
||
from,
|
||
to //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Order Blocks ...
|
||
|
||
//
|
||
// Bullish Order Blocks ...
|
||
if (bullishOBsCount >= maxAllowed)
|
||
{
|
||
//
|
||
ArrayRemove(
|
||
mBullishOrderBlocks,
|
||
from,
|
||
count //
|
||
);
|
||
|
||
//
|
||
mBullishOrderBlockObjects.DeleteRange(
|
||
from,
|
||
to //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Bearish Order Blocks ...
|
||
if (bearishOBsCount >= maxAllowed)
|
||
{
|
||
//
|
||
ArrayRemove(
|
||
mBearishOrderBlocks,
|
||
from,
|
||
count //
|
||
);
|
||
|
||
//
|
||
mBearishOrderBlockObjects.DeleteRange(
|
||
from,
|
||
to //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Fair Vakue Gaps ...
|
||
|
||
//
|
||
// Bullish FVGs ...
|
||
if (bullishFVGsCount >= maxAllowed)
|
||
{
|
||
//
|
||
ArrayRemove(
|
||
mBullishFVGs,
|
||
from,
|
||
count //
|
||
);
|
||
|
||
//
|
||
mBullishFVGObjects.DeleteRange(
|
||
from,
|
||
to //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Bearish FVGs ...
|
||
if (bearishFVGsCount >= maxAllowed)
|
||
{
|
||
//
|
||
ArrayRemove(
|
||
mBearishFVGs,
|
||
from,
|
||
count //
|
||
);
|
||
|
||
//
|
||
mBearishFVGObjects.DeleteRange(
|
||
from,
|
||
to //
|
||
);
|
||
}
|
||
|
||
//
|
||
}
|
||
|
||
//
|
||
private:
|
||
//
|
||
|
||
//
|
||
// Props ...
|
||
|
||
//
|
||
bool mLock; // Lock State ...
|
||
string mSymbol; // Market Symbol ...
|
||
ENUM_TIMEFRAMES mPeriod; // Market Period ...
|
||
long mChartID; // Chart ID ...
|
||
int mWindow; // Window ID ...
|
||
int mMaxNumberOfPOIs; // Max Allowed Number of POI(s) which Can Holds ...
|
||
int mMaxNumberOfRequiredPOIs; // Max Allowed Number of POI(s) which Must Find at Initializion Time ...
|
||
|
||
//
|
||
XBarTracker mBarTracker; // Market Bar Tracker ...
|
||
|
||
//
|
||
// POI Props ...
|
||
|
||
//
|
||
// Trading Days ...
|
||
|
||
//
|
||
bool mAllowTradingDays; // Detect Trading Days ...
|
||
bool mAllowDrawTradingDays; // Draw Trading Days ...
|
||
color mTradingDaysStartColor; // Trading Days Start Color ...
|
||
ENUM_LINE_STYLE mTradingDaysStartStyle; // Trading Days Start Style ...
|
||
color mTradingDaysEndColor; // Trading Days End Color ...
|
||
ENUM_LINE_STYLE mTradingDaysEndStyle; // Trading Days End Style ...
|
||
XTradeDay mTradingDays[]; // Trading Days ...
|
||
CArrayObj mTradingDayObjects; // Trading Day Chart Objects ...
|
||
TXPOIEventHandler mTradingDayEventListeners[]; // Trading Day Event Listeners ...
|
||
|
||
/**
|
||
* Create an Object to Represent Trading Day on Chart ...
|
||
*
|
||
* @param day: XTradeDay instance ...
|
||
* @param name: String ...
|
||
*/
|
||
void CreateTradingDayObject(
|
||
XTradeDay &day,
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
if (!day.IsValid() ||
|
||
!IsValid(name))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
XCTardeDayObject *iObj;
|
||
iObj = new XCTardeDayObject();
|
||
bool isCreated = iObj.CreateByDay(
|
||
ChartID(),
|
||
name,
|
||
Window(),
|
||
day //
|
||
);
|
||
if (!isCreated)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
iObj.FromColor(TradingDaysStartColor());
|
||
iObj.FromStyle(TradingDaysStartStyle());
|
||
|
||
//
|
||
iObj.ToColor(TradingDaysEndColor());
|
||
iObj.ToStyle(TradingDaysEndStyle());
|
||
|
||
//
|
||
mTradingDayObjects.Add(iObj);
|
||
}
|
||
|
||
//
|
||
// Market Sessions ...
|
||
|
||
//
|
||
bool mAllowMarketSessions; // Detect Market Sessions ...
|
||
bool mAllowDrawMarketSessions; // Draw Market Sessions ...
|
||
int mSessionOpenHours; // How many Hours a Session is Open
|
||
XSession mSessions[]; // Forex Sessions
|
||
XMarketSession mMarketSessions[]; // Founded Market Sessions ...
|
||
CArrayObj mMarketSessionObjects; // Founded Market Session Chart Ojects ...
|
||
TXSessionEventHandler mMarketSessionEventListeners[]; // Market Sessions Event Listeners ...
|
||
|
||
/**
|
||
* Create an Object to Represent Market Session on Chart ...
|
||
*
|
||
* @param session: XMarketSession instance ...
|
||
* @param name: String ...
|
||
*/
|
||
void CreateMarketSessionObject(
|
||
XMarketSession &session,
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
if (!session.IsValid() ||
|
||
!IsValid(name))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
// Find XSession Instance ...
|
||
int sessionIDX = FindSession(session.session);
|
||
if (!IsValidIndex(sessionIDX) ||
|
||
!mSessions[sessionIDX].allowDraw)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
XCMarketSessionObject *iObj;
|
||
iObj = new XCMarketSessionObject();
|
||
bool isCreated = iObj.CreateByMarketSession(
|
||
ChartID(),
|
||
name,
|
||
Window(),
|
||
session //
|
||
);
|
||
if (!isCreated)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
iObj.FromColor(mSessions[sessionIDX].startColor);
|
||
iObj.FromStyle(mSessions[sessionIDX].startStyle);
|
||
|
||
//
|
||
iObj.ToColor(mSessions[sessionIDX].endColor);
|
||
iObj.ToStyle(mSessions[sessionIDX].endStyle);
|
||
|
||
//
|
||
mMarketSessionObjects.Add(iObj);
|
||
}
|
||
|
||
//
|
||
// Swing High and Low(s) ...
|
||
|
||
//
|
||
// Swing Highs ...
|
||
|
||
//
|
||
bool mAllowSwingHighs; // Detect Swing Highs ...
|
||
bool mAllowDrawSwingHighs; // Draw Swing Highs ...
|
||
char mSwingHighArrowCode; // Swing High Arrow Code ...
|
||
color mSwingHighColor; // Swing High Color ...
|
||
int mSwingHighWidth; // Swing High Width ...
|
||
double mSwingHighThreshold; // Threshold Required for Swing High Detection ...
|
||
XOHCL mSwingHighs[]; // Swing Highs ...
|
||
CArrayObj mSwingHighObjects; // Swing High Chart Objects ...
|
||
TXOHCLEventHandler mSwingHighEventListeners[]; // Swing High Event Listeners ...
|
||
|
||
/**
|
||
* Create an Object to Represent Swing High on Chart ...
|
||
*
|
||
* @param bar: XOHCL instance ...
|
||
* @param name: String ...
|
||
*/
|
||
void CreateSwingHighObject(
|
||
XOHCL &bar,
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
if (!bar.IsValid() ||
|
||
!IsValid(name))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
CChartObjectArrow *iObj;
|
||
iObj = new CChartObjectArrow();
|
||
bool isCreated = iObj.Create(
|
||
ChartID(),
|
||
name,
|
||
Window(),
|
||
bar.time,
|
||
bar.high,
|
||
SwingHighArrowCode() //
|
||
);
|
||
if (!isCreated)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
// Configure Object ...
|
||
iObj.Width(SwingHighWidth());
|
||
iObj.Color(SwingHighColor());
|
||
iObj.Anchor(ANCHOR_BOTTOM);
|
||
|
||
//
|
||
mSwingHighObjects.Add(iObj);
|
||
}
|
||
|
||
//
|
||
// Swing Lows ...
|
||
|
||
//
|
||
bool mAllowSwingLows; // Detect Swing Lows ...
|
||
bool mAllowDrawSwingLows; // Draw Swing Lows ...
|
||
char mSwingLowArrowCode; // Swing Low Arrow Code ...
|
||
color mSwingLowColor; // Swing Low Color ...
|
||
int mSwingLowWidth; // Swing Low Width ...
|
||
double mSwingLowThreshold; // Threshold Required for Swing Low Detection ...
|
||
XOHCL mSwingLows[]; // Swing Lows ...
|
||
CArrayObj mSwingLowObjects; // Swing Low Chart Objects ...
|
||
TXOHCLEventHandler mSwingLowEventListeners[]; // Swing Low Event Listeners ...
|
||
|
||
/**
|
||
* Create an Object to Represent Swing Low on Chart ...
|
||
*
|
||
* @param bar: XOHCL instance ...
|
||
* @param name: String ...
|
||
*/
|
||
void CreateSwingLowObject(
|
||
XOHCL &bar,
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
if (!bar.IsValid() ||
|
||
!IsValid(name))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
CChartObjectArrow *iObj;
|
||
iObj = new CChartObjectArrow();
|
||
bool isCreated = iObj.Create(
|
||
ChartID(),
|
||
name,
|
||
Window(),
|
||
bar.time,
|
||
bar.low,
|
||
SwingLowArrowCode() //
|
||
);
|
||
if (!isCreated)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
// Configure Object ...
|
||
iObj.Width(SwingLowWidth());
|
||
iObj.Color(SwingLowColor());
|
||
iObj.Anchor(ANCHOR_TOP);
|
||
|
||
//
|
||
mSwingLowObjects.Add(iObj);
|
||
}
|
||
|
||
//
|
||
// Momentum Bars ...
|
||
|
||
//
|
||
bool mAllowMomentumBars; // Detect Momentum Bars ...
|
||
bool mAllowDrawMomentumBars; // Draw Momentum Bars ...
|
||
int mMomentumBarPercent; // Momentum Bar Percent ...
|
||
double mMomentumBarSharpRatio; // Momentum Bar Sharp Ratio ...
|
||
int mMomentumBarLoopBack; // Momentum Bar Loopback ...
|
||
int mMomentumBarWidth; // Momentum Bar Width ...
|
||
char mMomentumBarBullishArrowCode; // Bullish Momentum Bar Arrow Code ...
|
||
char mMomentumBarBearishArrowCode; // Bullish Momentum Bar Color ...
|
||
color mMomentumBarBullishColor; // Bearish Momentum Bar Arrow Code ...
|
||
color mMomentumBarBearishColor; // Bearish Momentum Bar Color ...
|
||
XOHCL mMomentumBars[]; // Momentum Bars ...
|
||
CArrayObj mMomentumBarObjects; // Momentm Bar Chart Objects ...
|
||
TXOHCLEventHandler mMomentumBarEventListeners[]; // Momentum Bars Event Listeners ...
|
||
|
||
/**
|
||
* Create an Object to Represent Momentum Bar on Chart ...
|
||
*
|
||
* @param bar: XOHCL instance ...
|
||
* @param name: String ...
|
||
*/
|
||
void CreateMomentumBarObject(
|
||
XOHCL &bar,
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
if (!bar.IsValid() ||
|
||
!IsValid(name))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
bool isBullish = bar.IsBullish();
|
||
double price =
|
||
isBullish
|
||
? bar.low
|
||
: bar.high;
|
||
char arrowCode =
|
||
isBullish
|
||
? MomentumBarBullishArrowCode()
|
||
: MomentumBarBearishArrowCode();
|
||
color clr =
|
||
isBullish
|
||
? MomentumBarBullishColor()
|
||
: MomentumBarBearishColor();
|
||
ENUM_ARROW_ANCHOR anchor =
|
||
isBullish
|
||
? ANCHOR_TOP
|
||
: ANCHOR_BOTTOM;
|
||
|
||
//
|
||
CChartObjectArrow *iObj;
|
||
iObj = new CChartObjectArrow();
|
||
bool isCreated = iObj.Create(
|
||
ChartID(),
|
||
name,
|
||
Window(),
|
||
bar.time,
|
||
price,
|
||
arrowCode //
|
||
);
|
||
if (!isCreated)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
// Configure Object ...
|
||
iObj.Width(MomentumBarWidth());
|
||
iObj.Color(clr);
|
||
iObj.Anchor(anchor);
|
||
|
||
//
|
||
mMomentumBarObjects.Add(iObj);
|
||
}
|
||
|
||
//
|
||
// Rejection Bars ....
|
||
|
||
//
|
||
bool mAllowRejectionBars; // Detect Rejection Bars ...
|
||
bool mAllowDrawRejectionBars; // Draw Rejection Bars ...
|
||
int mRejectionBarPercent; // Rejection Bar Percent ...
|
||
double mRejectionBarSharpRatio; // Rejection Bar Sharp Ratio ...
|
||
int mRejectionBarLoopBack; // Rejection Bar Loopback ...
|
||
int mRejectionBarWidth; // Rejection Bar Width ...
|
||
char mRejectionBarBullishArrowCode; // Bullish Rejection Bar Arrow Code ...
|
||
char mRejectionBarBearishArrowCode; // Bullish Rejection Bar Color ...
|
||
color mRejectionBarBullishColor; // Bearish Rejection Bar Arrow Code ...
|
||
color mRejectionBarBearishColor; // Bearish Rejection Bar Color ...
|
||
XOHCL mRejectionBars[]; // Rejection Bars ...
|
||
CArrayObj mRejectionBarObjects; // Rejection Bar Chart Objects ...
|
||
TXOHCLEventHandler mRejectionBarEventListeners[]; // Rejection Bars Event Listeners ...
|
||
|
||
/**
|
||
* Create an Object to Represent Rejection Bar on Chart ...
|
||
*
|
||
* @param bar: XOHCL instance ...
|
||
* @param name: String ...
|
||
*/
|
||
void CreateRejectionBarObject(
|
||
XOHCL &bar,
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
if (!bar.IsValid() ||
|
||
!IsValid(name))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
bool isBullish = bar.GetLowShadow() > bar.GetHighShadow();
|
||
double price =
|
||
isBullish
|
||
? bar.low
|
||
: bar.high;
|
||
char arrowCode =
|
||
isBullish
|
||
? RejectionBarBullishArrowCode()
|
||
: RejectionBarBearishArrowCode();
|
||
color clr =
|
||
isBullish
|
||
? RejectionBarBullishColor()
|
||
: RejectionBarBearishColor();
|
||
ENUM_ARROW_ANCHOR anchor =
|
||
isBullish
|
||
? ANCHOR_TOP
|
||
: ANCHOR_BOTTOM;
|
||
|
||
//
|
||
CChartObjectArrow *iObj;
|
||
iObj = new CChartObjectArrow();
|
||
bool isCreated = iObj.Create(
|
||
ChartID(),
|
||
name,
|
||
Window(),
|
||
bar.time,
|
||
price,
|
||
arrowCode //
|
||
);
|
||
if (!isCreated)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
// Configure Object ...
|
||
iObj.Width(RejectionBarWidth());
|
||
iObj.Color(clr);
|
||
iObj.Anchor(anchor);
|
||
|
||
//
|
||
mRejectionBarObjects.Add(iObj);
|
||
}
|
||
|
||
//
|
||
// Support and Resistance Zones ...
|
||
|
||
//
|
||
// Support Zones ...
|
||
|
||
//
|
||
bool mAllowSupportZones; // Detect Support Zone ...
|
||
bool mAllowDrawSupportZones; // Draw Support Zone ...
|
||
int mSupportZoneLoopBack; // Support Zone Loopback ...
|
||
int mSupportZoneWidth; // Support Zone Width ...
|
||
color mSupportZoneColor; // Support Zone Color ...
|
||
ENUM_LINE_STYLE mSupportZoneStyle; // Support Zone Style ...
|
||
ENUM_X_PRICE mSupportZonePriceType; // Support Zone Price Type ...
|
||
XOHCL mSupportZones[]; // Support Zones ...
|
||
CArrayObj mSupportZoneObjects; // Support Zone Chart Objects ...
|
||
TXOHCLEventHandler mSupportZoneEventListeners[]; // Support Zone Event Listeners ...
|
||
|
||
/**
|
||
* Create an Object to Represent Support Zones on Chart ...
|
||
|
||
* @param bar: XOHCL instance ...
|
||
* @param name: String ...
|
||
*/
|
||
void CreateSupportZoneObject(
|
||
XOHCL &bar,
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
if (!bar.IsValid() ||
|
||
!IsValid(name))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
datetime cBarTime = TimeCurrent();
|
||
if (bar.Index() > 0)
|
||
{
|
||
//
|
||
cBarTime = iTime(
|
||
Symbol(),
|
||
Period(),
|
||
bar.Index() - 10 //
|
||
);
|
||
}
|
||
|
||
//
|
||
XCSupportZoneObject *iObj;
|
||
iObj = new XCSupportZoneObject();
|
||
bool isCreated = iObj.CreateBySupport(
|
||
ChartID(),
|
||
name,
|
||
Window(),
|
||
bar,
|
||
cBarTime,
|
||
true // Force Draw Rect ...
|
||
);
|
||
if (!isCreated)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
// Configure Object ...
|
||
iObj.ZoneColor(SupportZoneColor());
|
||
iObj.ZoneStyle(SupportZoneStyle());
|
||
iObj.ZoneWidth(SupportZoneWidth());
|
||
|
||
//
|
||
mSupportZoneObjects.Add(iObj);
|
||
}
|
||
|
||
//
|
||
// Resistance Zones ...
|
||
|
||
//
|
||
bool mAllowResistanceZones; // Detect Resistance Zone ...
|
||
bool mAllowDrawResistanceZones; // Draw Resistance Zone ...
|
||
int mResistanceZoneLoopBack; // Resistance Zone Loopback ...
|
||
int mResistanceZoneWidth; // Resistance Zone Width ...
|
||
color mResistanceZoneColor; // Resistance Zone Color ...
|
||
ENUM_LINE_STYLE mResistanceZoneStyle; // Resistance Zone Style ...
|
||
ENUM_X_PRICE mResistanceZonePriceType; // Resistance Zone Price Type ...
|
||
XOHCL mResistanceZones[]; // Resistance Zones ...
|
||
CArrayObj mResistanceZoneObjects; // Resistance Zone Chart Objects ...
|
||
TXOHCLEventHandler mResistanceZoneEventListeners[]; // Resistance Zone Event Listeners ...
|
||
|
||
/**
|
||
* Create an Object to Represent Resistance Zones on Chart ...
|
||
|
||
* @param bar: XOHCL instance ...
|
||
* @param name: String ...
|
||
*/
|
||
void CreateResistanceZoneObject(
|
||
XOHCL &bar,
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
if (!bar.IsValid() ||
|
||
!IsValid(name))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
datetime cBarTime = TimeCurrent();
|
||
if (bar.Index() > 0)
|
||
{
|
||
//
|
||
cBarTime = iTime(
|
||
Symbol(),
|
||
Period(),
|
||
bar.Index() - 10 //
|
||
);
|
||
}
|
||
|
||
//
|
||
XCResistanceZoneObject *iObj;
|
||
iObj = new XCResistanceZoneObject();
|
||
bool isCreated = iObj.CreateByResistance(
|
||
ChartID(),
|
||
name,
|
||
Window(),
|
||
bar,
|
||
cBarTime,
|
||
true // Force Draw Rect ...
|
||
);
|
||
if (!isCreated)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
// Configure Object ...
|
||
iObj.ZoneColor(ResistanceZoneColor());
|
||
iObj.ZoneStyle(ResistanceZoneStyle());
|
||
iObj.ZoneWidth(ResistanceZoneWidth());
|
||
|
||
//
|
||
mResistanceZoneObjects.Add(iObj);
|
||
}
|
||
|
||
//
|
||
// Supply and Demand Zones ...
|
||
|
||
//
|
||
// Supply Zones ...
|
||
|
||
//
|
||
bool mAllowSupplyZones; // Detect Supply Zone ...
|
||
bool mAllowDrawSupplyZones; // Draw Supply Zone ...
|
||
int mSupplyZoneWidth; // Supply Zone Width ...
|
||
color mSupplyZoneColor; // Supply Zone Color ...
|
||
ENUM_LINE_STYLE mSupplyZoneStyle; // Supply Zone Style ...
|
||
ENUM_TIMEFRAMES mSupplyZonePeriod; // Supply Zone Detection Period ...
|
||
XZone mSupplyZones[]; // Supply Zones ...
|
||
CArrayObj mSupplyZoneObjects; // Supply Zone Chart Objects ...
|
||
TXZoneEventHandler mSupplyZoneEventListeners[]; // Supply Zone Event Listeners ...
|
||
|
||
/**
|
||
* Create an Object to Represent Supply Zones on Chart ...
|
||
|
||
* @param bar: XZone instance ...
|
||
* @param name: String ...
|
||
*/
|
||
void CreateSupplyZoneObject(
|
||
XZone &zone,
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
if (!zone.IsValid() ||
|
||
!IsValid(name))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
XCSupplyZoneObject *iObj;
|
||
iObj = new XCSupplyZoneObject();
|
||
bool isCreated = iObj.CreateByZone(
|
||
ChartID(),
|
||
name,
|
||
Window(),
|
||
zone,
|
||
NULL, // Object Prefix ...
|
||
true // Force Draw Rect ...
|
||
);
|
||
if (!isCreated)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
// Configure Object ...
|
||
iObj.ZoneColor(SupplyZoneColor());
|
||
iObj.ZoneStyle(SupplyZoneStyle());
|
||
iObj.ZoneWidth(SupplyZoneWidth());
|
||
|
||
//
|
||
mSupplyZoneObjects.Add(iObj);
|
||
}
|
||
|
||
//
|
||
// Demand Zones ...
|
||
|
||
//
|
||
bool mAllowDemandZones; // Detect Demand Zone ...
|
||
bool mAllowDrawDemandZones; // Draw Demand Zone ...
|
||
int mDemandZoneWidth; // Demand Zone Width ...
|
||
color mDemandZoneColor; // Demand Zone Color ...
|
||
ENUM_LINE_STYLE mDemandZoneStyle; // Demand Zone Style ...
|
||
ENUM_TIMEFRAMES mDemandZonePeriod; // Demand Zone Detection Period ...
|
||
XZone mDemandZones[]; // Demand Zones ...
|
||
CArrayObj mDemandZoneObjects; // Demand Zone Chart Objects ...
|
||
TXZoneEventHandler mDemandZoneEventListeners[]; // Demand Zone Event Listeners ...
|
||
|
||
/**
|
||
* Create an Object to Represent Demand Zones on Chart ...
|
||
|
||
* @param bar: XZone instance ...
|
||
* @param name: String ...
|
||
*/
|
||
void CreateDemandZoneObject(
|
||
XZone &zone,
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
if (!zone.IsValid() ||
|
||
!IsValid(name))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
XCDemandZoneObject *iObj;
|
||
iObj = new XCDemandZoneObject();
|
||
bool isCreated = iObj.CreateByZone(
|
||
ChartID(),
|
||
name,
|
||
Window(),
|
||
zone,
|
||
NULL, // Object Prefix ...
|
||
true // Force Draw Rect ...
|
||
);
|
||
if (!isCreated)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
// Configure Object ...
|
||
iObj.ZoneColor(DemandZoneColor());
|
||
iObj.ZoneStyle(DemandZoneStyle());
|
||
iObj.ZoneWidth(DemandZoneWidth());
|
||
|
||
//
|
||
mDemandZoneObjects.Add(iObj);
|
||
}
|
||
|
||
//
|
||
// Order Blocks ...
|
||
|
||
//
|
||
// Bullish Order Blocks ...
|
||
|
||
//
|
||
bool mAllowBullishOrderBlocks; // Detect Bullish Order Blocks ...
|
||
bool mAllowDrawBullishOrderBlocks; // Draw Bullish Order Blocks ...
|
||
int mBullishOrderBlockWidth; // Bullish Order Block Width ...
|
||
color mBullishOrderBlockColor; // Bullish Order Block Color ...
|
||
ENUM_LINE_STYLE mBullishOrderBlockStyle; // Bullish Order Block Style ...
|
||
int mRequiredBarsForBullishOrderBlock; // Minimum Required Same Bars for Bullish Order Blocks ...
|
||
XZone mBullishOrderBlocks[]; // Bullish Order Blocks ...
|
||
CArrayObj mBullishOrderBlockObjects; // Bullish Order Block Objects ...
|
||
TXZoneEventHandler mBullishOrderBlockEventListeners[]; // Bullish Order Block Event Listeners ...
|
||
|
||
/**
|
||
* Create an Object to Represent Bullish Order Block on Chart ...
|
||
|
||
* @param bar: XZone instance ...
|
||
* @param name: String ...
|
||
*/
|
||
void CreateBullishOrderBlockObject(
|
||
XZone &zone,
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
if (!zone.IsValid() ||
|
||
!IsValid(name))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
XCBullishOrderBlockObject *iObj;
|
||
iObj = new XCBullishOrderBlockObject();
|
||
bool isCreated = iObj.CreateByZone(
|
||
ChartID(),
|
||
name,
|
||
Window(),
|
||
zone,
|
||
NULL, // Object Prefix ...
|
||
true // Force Draw Rect ...
|
||
);
|
||
if (!isCreated)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
// Configure Object ...
|
||
iObj.ZoneColor(BullishOrderBlockColor());
|
||
iObj.ZoneStyle(BullishOrderBlockStyle());
|
||
iObj.ZoneWidth(BullishOrderBlockWidth());
|
||
|
||
//
|
||
mBullishOrderBlockObjects.Add(iObj);
|
||
}
|
||
|
||
//
|
||
// Bearish Order Blocks ...
|
||
|
||
//
|
||
bool mAllowBearishOrderBlocks; // Detect Bearish Order Blocks ...
|
||
bool mAllowDrawBearishOrderBlocks; // Draw Bearish Order Blocks ...
|
||
int mBearishOrderBlockWidth; // Bearish Order Block Width ...
|
||
color mBearishOrderBlockColor; // Bearish Order Block Color ...
|
||
ENUM_LINE_STYLE mBearishOrderBlockStyle; // Bearish Order Block Style ...
|
||
int mRequiredBarsForBearishOrderBlock; // Minimum Required Same Bars for Bearish Order Blocks ...
|
||
XZone mBearishOrderBlocks[]; // Bearish Order Blocks ...
|
||
CArrayObj mBearishOrderBlockObjects; // Bearish Order Block Objects ...
|
||
TXZoneEventHandler mBearishOrderBlockEventListeners[]; // Bearish Order Block Event Listeners ...
|
||
|
||
/**
|
||
* Create an Object to Represent Bearish Order Block on Chart ...
|
||
|
||
* @param bar: XZone instance ...
|
||
* @param name: String ...
|
||
*/
|
||
void CreateBearishOrderBlockObject(
|
||
XZone &zone,
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
if (!zone.IsValid() ||
|
||
!IsValid(name))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
XCBearishOrderBlockObject *iObj;
|
||
iObj = new XCBearishOrderBlockObject();
|
||
bool isCreated = iObj.CreateByZone(
|
||
ChartID(),
|
||
name,
|
||
Window(),
|
||
zone,
|
||
NULL, // Object Prefix ...
|
||
true // Force Draw Rect ...
|
||
);
|
||
if (!isCreated)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
// Configure Object ...
|
||
iObj.ZoneColor(BearishOrderBlockColor());
|
||
iObj.ZoneStyle(BearishOrderBlockStyle());
|
||
iObj.ZoneWidth(BearishOrderBlockWidth());
|
||
|
||
//
|
||
mBearishOrderBlockObjects.Add(iObj);
|
||
}
|
||
|
||
//
|
||
// Fair Value Gaps ...
|
||
|
||
//
|
||
// Bullish Fair Value Gaps ...
|
||
|
||
//
|
||
bool mAllowBullishFVGs; // Detect Bullish Fair Value Gaps ...
|
||
bool mAllowDrawBullishFVGs; // Draw Bullish Fair Value Gaps ...
|
||
bool mBullishFVGForceMiddleBarCheck; // Bullish FVG Force Middle Bar Check ...
|
||
bool mBullishFVGForceCheckLastBarDirection; // Bullish FVG Check Last Bar Direction ...
|
||
int mBullishFVGWidth; // Bullish FVG Width ...
|
||
color mBullishFVGColor; // Bullish FVG Color ...
|
||
ENUM_LINE_STYLE mBullishFVGStyle; // Bullish FVG Style ...
|
||
XZone mBullishFVGs[]; // Bullish FVGs ...
|
||
CArrayObj mBullishFVGObjects; // Bullish FVG Objects ...
|
||
TXZoneEventHandler mBullishFVGEventListeners[]; // Bullish FVG Event Listeners ...
|
||
|
||
/**
|
||
* Create an Object to Represent Bullish FVG on Chart ...
|
||
|
||
* @param bar: XZone instance ...
|
||
* @param name: String ...
|
||
*/
|
||
void CreateBullishFVGObject(
|
||
XZone &zone,
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
if (!zone.IsValid() ||
|
||
!IsValid(name))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
XCBullishFVGObject *iObj;
|
||
iObj = new XCBullishFVGObject();
|
||
bool isCreated = iObj.CreateByZone(
|
||
ChartID(),
|
||
name,
|
||
Window(),
|
||
zone,
|
||
NULL, // Object Prefix ...
|
||
true // Force Draw Rect ...
|
||
);
|
||
if (!isCreated)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
// Configure Object ...
|
||
iObj.ZoneColor(BullishFVGColor());
|
||
iObj.ZoneStyle(BullishFVGStyle());
|
||
iObj.ZoneWidth(BullishFVGWidth());
|
||
|
||
//
|
||
mBullishFVGObjects.Add(iObj);
|
||
}
|
||
|
||
//
|
||
// Bearish Fair Value Gaps ...
|
||
|
||
//
|
||
bool mAllowBearishFVGs; // Detect Bearish Fair Value Gaps ...
|
||
bool mAllowDrawBearishFVGs; // Draw Bearish Fair Value Gaps ...
|
||
bool mBearishFVGForceMiddleBarCheck; // Bearish FVG Force Middle Bar Check ...
|
||
bool mBearishFVGForceCheckLastBarDirection; // Bearish FVG Check Last Bar Direction ...
|
||
int mBearishFVGWidth; // Bearish FVG Width ...
|
||
color mBearishFVGColor; // Bearish FVG Color ...
|
||
ENUM_LINE_STYLE mBearishFVGStyle; // Bearish FVG Style ...
|
||
XZone mBearishFVGs[]; // Bearish FVGs ...
|
||
CArrayObj mBearishFVGObjects; // Bearish FVG Objects ...
|
||
TXZoneEventHandler mBearishFVGEventListeners[]; // Bearish FVG Event Listeners ...
|
||
|
||
/**
|
||
* Create an Object to Represent Bearish FVG on Chart ...
|
||
|
||
* @param bar: XZone instance ...
|
||
* @param name: String ...
|
||
*/
|
||
void CreateBearishFVGObject(
|
||
XZone &zone,
|
||
string name //
|
||
)
|
||
{
|
||
//
|
||
if (!zone.IsValid() ||
|
||
!IsValid(name))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
XCBearishFVGObject *iObj;
|
||
iObj = new XCBearishFVGObject();
|
||
bool isCreated = iObj.CreateByZone(
|
||
ChartID(),
|
||
name,
|
||
Window(),
|
||
zone,
|
||
NULL, // Object Prefix ...
|
||
true // Force Draw Rect ...
|
||
);
|
||
if (!isCreated)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//
|
||
// Configure Object ...
|
||
iObj.ZoneColor(BearishFVGColor());
|
||
iObj.ZoneStyle(BearishFVGStyle());
|
||
iObj.ZoneWidth(BearishFVGWidth());
|
||
|
||
//
|
||
mBearishFVGObjects.Add(iObj);
|
||
}
|
||
|
||
//
|
||
};
|
||
|
||
// |