1281 lines
20 KiB
Plaintext
1281 lines
20 KiB
Plaintext
///////////////////////////////////////////////////////
|
|
//
|
|
// SaherElm IT Center XTest MQL5 Expert Advisor
|
|
// -------------------------------------------------
|
|
// Name: XTestEA
|
|
// Description: an Exper Advisor which used XTestSetup
|
|
// to Analyse Market ...
|
|
//
|
|
// Maintainer:
|
|
// ------------
|
|
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
|
|
//
|
|
//////////////////////////////////////////////////////x
|
|
//
|
|
// Global Properties ...
|
|
#property copyright "Copyright 2023, SaherElm IT Center"
|
|
#property link "https://saherelm.ir"
|
|
#property version "1.00"
|
|
#property description "SaherElm XTestEA"
|
|
#property strict
|
|
|
|
//
|
|
#define ShortName "XTestEA"
|
|
|
|
//
|
|
// Imports ...
|
|
#include "../Libraries/x-saherelm.tools.mq5"
|
|
#include "../Libraries/x-saherelm.common.lib.mq5"
|
|
|
|
//
|
|
// Inputs ...
|
|
long mMagicNumber = 78692110; // Magic Number
|
|
int mSlippage = 10; // Slippgae
|
|
|
|
//
|
|
double eaVolume = 0.01;
|
|
double eaAllowLong = true;
|
|
double eaAllowShort = true;
|
|
|
|
//
|
|
XBarTracker eaBarTracker;
|
|
|
|
//
|
|
// Event Handlers ...
|
|
|
|
//
|
|
// Initialization ...
|
|
int OnInit()
|
|
{
|
|
//
|
|
if (!ValidateInputs())
|
|
{
|
|
return INIT_PARAMETERS_INCORRECT;
|
|
}
|
|
|
|
//
|
|
drawPrefix = ShortName;
|
|
|
|
//
|
|
bool isInited = eaBarTracker.Init(
|
|
_Symbol,
|
|
_Period //
|
|
);
|
|
|
|
//
|
|
// Init Succeed ...
|
|
return INIT_SUCCEEDED;
|
|
}
|
|
|
|
//
|
|
// DeInitialization ...
|
|
void OnDeinit(const int reason)
|
|
{
|
|
//
|
|
// REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function
|
|
// REASON_REMOVE 1 Program removed from a chart
|
|
// REASON_RECOMPILE 2 Program recompiled
|
|
// REASON_CHARTCHANGE 3 A symbol or a chart period is changed
|
|
// REASON_CHARTCLOSE 4 Chart closed
|
|
// REASON_PARAMETERS 5 Inputs changed by a user
|
|
// REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings
|
|
// REASON_TEMPLATE 7 Another chart template applied
|
|
// REASON_INITFAILED 8 The OnInit() handler returned a non-zero value
|
|
// REASON_CLOSE 9 Terminal closed
|
|
|
|
//
|
|
// De Initialize XSampleEA Providers ...
|
|
}
|
|
|
|
//
|
|
// On Tick Handler ...
|
|
void OnTick()
|
|
{
|
|
//
|
|
if (!eaBarTracker.CanProcessBar())
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
// Find Doji Patterns ...
|
|
// FindDoji();
|
|
|
|
//
|
|
// Find Hammer Patters ...
|
|
// FindHammer();
|
|
|
|
//
|
|
// Find Shooting Star Pattern ...
|
|
// FindShootingStar();
|
|
|
|
//
|
|
// Find Bullish Engulfing Pattern ...
|
|
// FindBullishEngulfing();
|
|
|
|
//
|
|
// Find Bearish Engulfing Pattern ...
|
|
// FindBearishEngulfing();
|
|
|
|
//
|
|
// Find Morning Star Pattern ...
|
|
// FindMorningStar();
|
|
|
|
//
|
|
// Find Evening Star Pattern ...
|
|
// FindEveningStar();
|
|
|
|
//
|
|
// Find Swing High Pattern ...
|
|
// FindSwingHigh();
|
|
|
|
//
|
|
// Find Swing Low Pattern ...
|
|
// FindSwingLow();
|
|
|
|
//
|
|
// Find Bullish FVG ...
|
|
// FindBullishFVG();
|
|
|
|
//
|
|
// Find Bearish FVG ...
|
|
// FindBearishFVG();
|
|
|
|
//
|
|
// Find Support ...
|
|
// FindSupport();
|
|
|
|
//
|
|
// Find Resistance ...
|
|
// FindResistance();
|
|
|
|
//
|
|
// Find Bullish Trend ...
|
|
// FindBullishTrend();
|
|
|
|
//
|
|
// Find Bearish Trend ...
|
|
// FindBearishTrend();
|
|
|
|
//
|
|
// Find Bullish Order Block ...
|
|
// FindBullishOrderBlock();
|
|
|
|
//
|
|
// Find Bearish Order Block ...
|
|
// FindBearishOrderBlock();
|
|
|
|
//
|
|
// Find Sharp Going Up Price Action ...
|
|
// FindSharpBullish();
|
|
|
|
//
|
|
// Find Sharp Going Down Price Action ...
|
|
// FindSharpBearish();
|
|
|
|
//
|
|
}
|
|
|
|
//
|
|
// Custom Functions ...
|
|
|
|
//
|
|
bool ValidateInputs()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
result = true;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Custom Testing Functions ...
|
|
|
|
//
|
|
// Find Sharp Going Up Price Action ...
|
|
void FindSharpBullish()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
if (!cBar.IsSharpBullish())
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
Print("Detect Sharp Bullish Price Action ...");
|
|
}
|
|
|
|
//
|
|
// Find Sharp Going Down Price Action ...
|
|
void FindSharpBearish()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
if (!cBar.IsSharpBearish())
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
Print("Detect Sharp Bearish Price Action ...");
|
|
}
|
|
|
|
//
|
|
// Find Doji Pattern ...
|
|
void FindDoji()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
if (!cBar.IsDoji())
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
DrawArrow(
|
|
ChartID(),
|
|
"Doji-" + ToString((int)cBar.time),
|
|
0,
|
|
cBar.time,
|
|
cBar.low,
|
|
233,
|
|
ANCHOR_TOP,
|
|
clrGray,
|
|
STYLE_SOLID,
|
|
2 //
|
|
);
|
|
|
|
//
|
|
Print("Doji Pattern Detected ...");
|
|
}
|
|
|
|
//
|
|
// Find Hammer Pattern ...
|
|
void FindHammer()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
if (!cBar.IsHammer())
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
DrawArrow(
|
|
ChartID(),
|
|
"Hammer-" + ToString((int)cBar.time),
|
|
0,
|
|
cBar.time,
|
|
cBar.low,
|
|
233,
|
|
ANCHOR_TOP,
|
|
clrAqua,
|
|
STYLE_SOLID,
|
|
2 //
|
|
);
|
|
|
|
//
|
|
Print("Hammer Pattern Detected ...");
|
|
}
|
|
|
|
//
|
|
// Find Shooting Star Pattern ...
|
|
void FindShootingStar()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
if (!cBar.IsShootingStar())
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
DrawArrow(
|
|
ChartID(),
|
|
"ShootingStar-" + ToString((int)cBar.time),
|
|
0,
|
|
cBar.time,
|
|
cBar.high,
|
|
234,
|
|
ANCHOR_BOTTOM,
|
|
clrMagenta,
|
|
STYLE_SOLID,
|
|
2 //
|
|
);
|
|
|
|
//
|
|
Print("Shooting Star Pattern Detected ...");
|
|
}
|
|
|
|
//
|
|
// Find Bullish Engulfing Pattern ...
|
|
void FindBullishEngulfing()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
XOHCL pBar;
|
|
isInited = cBar.GetPreviousBar(pBar);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
if (!cBar.IsBullishEngulfing())
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
DrawRectangle(
|
|
ChartID(),
|
|
"BullishEngulfing-" + ToString((int)cBar.time),
|
|
0,
|
|
pBar.time,
|
|
pBar.low,
|
|
cBar.time,
|
|
cBar.high,
|
|
clrAqua,
|
|
STYLE_SOLID,
|
|
1,
|
|
false //
|
|
);
|
|
|
|
//
|
|
Print("Bullish Engulfing Pattern Detected ...");
|
|
}
|
|
|
|
//
|
|
// Find Bearish Engulfing Pattern ...
|
|
void FindBearishEngulfing()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
XOHCL pBar;
|
|
isInited = cBar.GetPreviousBar(pBar);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
if (!cBar.IsBearishEngulfing())
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
DrawRectangle(
|
|
ChartID(),
|
|
"BearishEngulfing-" + ToString((int)cBar.time),
|
|
0,
|
|
pBar.time,
|
|
pBar.low,
|
|
cBar.time,
|
|
cBar.high,
|
|
clrMagenta,
|
|
STYLE_SOLID,
|
|
1,
|
|
false //
|
|
);
|
|
|
|
//
|
|
Print("Bearish Engulfing Pattern Detected ...");
|
|
}
|
|
|
|
//
|
|
// Find Morning Star Pattern ...
|
|
void FindMorningStar()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
XOHCL pBar;
|
|
isInited = cBar.GetPreviousBar(pBar);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
if (!cBar.IsMorningStar())
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
DrawArrow(
|
|
ChartID(),
|
|
"MorningStar-" + ToString((int)cBar.time),
|
|
0,
|
|
cBar.time,
|
|
cBar.low,
|
|
233,
|
|
ANCHOR_TOP,
|
|
clrAqua,
|
|
STYLE_SOLID,
|
|
2 //
|
|
);
|
|
|
|
//
|
|
Print("Morning Star Pattern Detected ...");
|
|
}
|
|
|
|
//
|
|
// Find Evening Star Pattern ...
|
|
void FindEveningStar()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
XOHCL pBar;
|
|
isInited = cBar.GetPreviousBar(pBar);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
if (!cBar.IsEveningStar())
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
DrawArrow(
|
|
ChartID(),
|
|
"EveningStar-" + ToString((int)cBar.time),
|
|
0,
|
|
cBar.time,
|
|
cBar.high,
|
|
234,
|
|
ANCHOR_BOTTOM,
|
|
clrMagenta,
|
|
STYLE_SOLID,
|
|
2 //
|
|
);
|
|
|
|
//
|
|
Print("Evening Star Pattern Detected ...");
|
|
}
|
|
|
|
//
|
|
// Find Swing High Pattern ...
|
|
void FindSwingHigh()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
XOHCL pBar;
|
|
isInited = cBar.GetPreviousBar(pBar);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
if (!cBar.IsSwingHigh())
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
DrawArrow(
|
|
ChartID(),
|
|
"SwingHigh-" + ToString((int)pBar.time),
|
|
0,
|
|
pBar.time,
|
|
pBar.high,
|
|
202,
|
|
ANCHOR_BOTTOM,
|
|
clrMagenta,
|
|
2 //
|
|
);
|
|
|
|
//
|
|
Print("Swing High Detected ...");
|
|
}
|
|
|
|
//
|
|
// Find Swing Low Pattern ...
|
|
void FindSwingLow()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
XOHCL pBar;
|
|
isInited = cBar.GetPreviousBar(pBar);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
if (!cBar.IsSwingLow())
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
DrawArrow(
|
|
ChartID(),
|
|
"SwingLow-" + ToString((int)pBar.time),
|
|
0,
|
|
pBar.time,
|
|
pBar.low,
|
|
200,
|
|
ANCHOR_TOP,
|
|
clrAqua,
|
|
2 //
|
|
);
|
|
|
|
//
|
|
Print("Swing Low Detected ...");
|
|
}
|
|
|
|
//
|
|
// Find Bullish FVG ...
|
|
void FindBullishFVG()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
double upper = 0;
|
|
double lower = 0;
|
|
bool hasFVG = cBar.HasBullishFVG(
|
|
upper,
|
|
lower //
|
|
);
|
|
if (!hasFVG)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
datetime time1 = iTime(
|
|
cBar.symbol,
|
|
cBar.period,
|
|
1 + 2 //
|
|
);
|
|
|
|
//
|
|
DrawRectangle(
|
|
ChartID(),
|
|
"BullishFVG-" + ToString((int)cBar.time),
|
|
0,
|
|
time1,
|
|
lower,
|
|
cBar.time,
|
|
upper,
|
|
clrAqua //
|
|
);
|
|
|
|
//
|
|
Print("Bullish FVG Detected ...");
|
|
}
|
|
|
|
//
|
|
// Find Bearish FVG ...
|
|
void FindBearishFVG()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
double upper = 0;
|
|
double lower = 0;
|
|
bool hasFVG = cBar.HasBearishFVG(
|
|
upper,
|
|
lower //
|
|
);
|
|
if (!hasFVG)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
datetime time1 = iTime(
|
|
cBar.symbol,
|
|
cBar.period,
|
|
1 + 2 //
|
|
);
|
|
|
|
//
|
|
DrawRectangle(
|
|
ChartID(),
|
|
"BearishFVG-" + ToString((int)cBar.time),
|
|
0,
|
|
time1,
|
|
upper,
|
|
cBar.time,
|
|
lower,
|
|
clrMagenta //
|
|
);
|
|
|
|
//
|
|
Print("Bearish FVG Detected ...");
|
|
}
|
|
|
|
//
|
|
// Find Support ...
|
|
void FindSupport()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
datetime at = NULL;
|
|
double support = 0;
|
|
bool hasSupport = cBar.HasSupport(
|
|
support,
|
|
at //
|
|
);
|
|
if (!hasSupport)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
DrawTrendLine(
|
|
ChartID(),
|
|
"Support-" + ToString((int)at),
|
|
0,
|
|
at,
|
|
support,
|
|
TimeCurrent(),
|
|
support,
|
|
clrAqua,
|
|
STYLE_DOT,
|
|
1,
|
|
false,
|
|
false,
|
|
true //
|
|
);
|
|
|
|
//
|
|
Print("Support Detected ...");
|
|
}
|
|
|
|
//
|
|
// Find Resistance ...
|
|
void FindResistance()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
datetime at = NULL;
|
|
double resistance = 0;
|
|
bool hasResistance = cBar.HasResistance(
|
|
resistance,
|
|
at //
|
|
);
|
|
if (!hasResistance)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
DrawTrendLine(
|
|
ChartID(),
|
|
"Resistance-" + ToString((int)at),
|
|
0,
|
|
at,
|
|
resistance,
|
|
TimeCurrent(),
|
|
resistance,
|
|
clrMagenta,
|
|
STYLE_DOT,
|
|
1,
|
|
false,
|
|
false,
|
|
true //
|
|
);
|
|
|
|
//
|
|
Print("Resistance Detected ...");
|
|
}
|
|
|
|
//
|
|
// Find Bullish Trend ...
|
|
void FindBullishTrend()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
double hSwings[];
|
|
datetime hSwingTimes[];
|
|
|
|
//
|
|
double lSwings[];
|
|
datetime lSwingTimes[];
|
|
|
|
//
|
|
bool isBullishTrend = cBar.HasBullishTrend(
|
|
hSwings,
|
|
hSwingTimes,
|
|
lSwings,
|
|
lSwingTimes,
|
|
false // Method 2 ...
|
|
);
|
|
if (!isBullishTrend)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
DrawTrendLine(
|
|
ChartID(),
|
|
"HSING-BULLTrend-" + ToString((int)hSwingTimes[ArraySize(hSwingTimes) - 1]) + "," + ToString((int)hSwingTimes[0]),
|
|
0,
|
|
hSwingTimes[ArraySize(hSwingTimes) - 1],
|
|
hSwings[ArraySize(hSwings) - 1],
|
|
hSwingTimes[0],
|
|
hSwings[0],
|
|
clrAqua,
|
|
STYLE_DOT,
|
|
1,
|
|
false,
|
|
false,
|
|
true //
|
|
);
|
|
|
|
//
|
|
DrawTrendLine(
|
|
ChartID(),
|
|
"LSING-BULLTrend-" + ToString((int)lSwingTimes[ArraySize(lSwingTimes) - 1]) + "," + ToString((int)lSwingTimes[0]),
|
|
0,
|
|
lSwingTimes[ArraySize(lSwingTimes) - 1],
|
|
lSwings[ArraySize(lSwings) - 1],
|
|
lSwingTimes[0],
|
|
lSwings[0],
|
|
clrMagenta,
|
|
STYLE_DOT,
|
|
1,
|
|
false,
|
|
false,
|
|
true //
|
|
);
|
|
|
|
//
|
|
// Draw Arrow On Swing Highs ...
|
|
for (int i = 0; i < ArraySize(hSwings); i++)
|
|
{
|
|
//
|
|
double iPrice = hSwings[i];
|
|
datetime iTime = hSwingTimes[i];
|
|
|
|
//
|
|
DrawArrow(
|
|
ChartID(),
|
|
"HSIGN-BULLTrend-Arrow-" + ToString((int)iTime),
|
|
0,
|
|
iTime,
|
|
iPrice,
|
|
234,
|
|
ANCHOR_BOTTOM,
|
|
clrAqua,
|
|
STYLE_SOLID,
|
|
2 //
|
|
);
|
|
}
|
|
|
|
//
|
|
// Draw Arrow On Swing Highs ...
|
|
for (int i = 0; i < ArraySize(lSwings); i++)
|
|
{
|
|
//
|
|
double iPrice = lSwings[i];
|
|
datetime iTime = lSwingTimes[i];
|
|
|
|
//
|
|
DrawArrow(
|
|
ChartID(),
|
|
"LSIGN-BULLTrend-Arrow-" + ToString((int)iTime),
|
|
0,
|
|
iTime,
|
|
iPrice,
|
|
233,
|
|
ANCHOR_TOP,
|
|
clrMagenta,
|
|
STYLE_SOLID,
|
|
2 //
|
|
);
|
|
}
|
|
|
|
//
|
|
Print("Bullish Trend Detected ...");
|
|
}
|
|
|
|
//
|
|
// Find Bearish Trend ...
|
|
void FindBearishTrend()
|
|
{
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
double hSwings[];
|
|
datetime hSwingTimes[];
|
|
|
|
//
|
|
double lSwings[];
|
|
datetime lSwingTimes[];
|
|
|
|
//
|
|
bool isBearishTrend = cBar.HasBearishTrend(
|
|
hSwings,
|
|
hSwingTimes,
|
|
lSwings,
|
|
lSwingTimes,
|
|
false // Method 2 ...
|
|
);
|
|
if (!isBearishTrend)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
DrawTrendLine(
|
|
ChartID(),
|
|
"HSING-BEARTrend-" + ToString((int)hSwingTimes[ArraySize(hSwingTimes) - 1]) + "," + ToString((int)hSwingTimes[0]),
|
|
0,
|
|
hSwingTimes[ArraySize(hSwingTimes) - 1],
|
|
hSwings[ArraySize(hSwings) - 1],
|
|
hSwingTimes[0],
|
|
hSwings[0],
|
|
clrAqua,
|
|
STYLE_DOT,
|
|
1,
|
|
false,
|
|
false,
|
|
true //
|
|
);
|
|
|
|
//
|
|
DrawTrendLine(
|
|
ChartID(),
|
|
"LSING-BEARTrend-" + ToString((int)lSwingTimes[ArraySize(lSwingTimes) - 1]) + "," + ToString((int)lSwingTimes[0]),
|
|
0,
|
|
lSwingTimes[ArraySize(lSwingTimes) - 1],
|
|
lSwings[ArraySize(lSwings) - 1],
|
|
lSwingTimes[0],
|
|
lSwings[0],
|
|
clrMagenta,
|
|
STYLE_DOT,
|
|
1,
|
|
false,
|
|
false,
|
|
true //
|
|
);
|
|
|
|
//
|
|
// Draw Arrow On Swing Highs ...
|
|
for (int i = 0; i < ArraySize(hSwings); i++)
|
|
{
|
|
//
|
|
double iPrice = hSwings[i];
|
|
datetime iTime = hSwingTimes[i];
|
|
|
|
//
|
|
DrawArrow(
|
|
ChartID(),
|
|
"HSIGN-BEARTrend-Arrow-" + ToString((int)iTime),
|
|
0,
|
|
iTime,
|
|
iPrice,
|
|
234,
|
|
ANCHOR_BOTTOM,
|
|
clrAqua,
|
|
STYLE_SOLID,
|
|
2 //
|
|
);
|
|
}
|
|
|
|
//
|
|
// Draw Arrow On Swing Highs ...
|
|
for (int i = 0; i < ArraySize(lSwings); i++)
|
|
{
|
|
//
|
|
double iPrice = lSwings[i];
|
|
datetime iTime = lSwingTimes[i];
|
|
|
|
//
|
|
DrawArrow(
|
|
ChartID(),
|
|
"LSIGN-BEARTrend-Arrow-" + ToString((int)iTime),
|
|
0,
|
|
iTime,
|
|
iPrice,
|
|
233,
|
|
ANCHOR_TOP,
|
|
clrMagenta,
|
|
STYLE_SOLID,
|
|
2 //
|
|
);
|
|
}
|
|
|
|
//
|
|
Print("Bearish Trend Detected ...");
|
|
}
|
|
|
|
//
|
|
// Find Bullish Order Block ...
|
|
void FindBullishOrderBlock() {
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
XOHCL obBar;
|
|
bool hasOB = cBar.HasBullishOrderBlock(
|
|
obBar //
|
|
);
|
|
if (!hasOB) {
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
DrawTrendLine(
|
|
ChartID(),
|
|
"BULLOB-H-" + ToString((int) obBar.time),
|
|
0,
|
|
obBar.time,
|
|
obBar.high,
|
|
cBar.time,
|
|
obBar.high,
|
|
clrAqua,
|
|
STYLE_SOLID,
|
|
2,
|
|
false,
|
|
false,
|
|
true //
|
|
);
|
|
|
|
//
|
|
DrawTrendLine(
|
|
ChartID(),
|
|
"BULLOB-L-" + ToString((int) obBar.time),
|
|
0,
|
|
obBar.time,
|
|
obBar.low,
|
|
cBar.time,
|
|
obBar.low,
|
|
clrAqua,
|
|
STYLE_SOLID,
|
|
2,
|
|
false,
|
|
false,
|
|
true //
|
|
);
|
|
|
|
//
|
|
Print("Detect new Bullish Order Block ...");
|
|
}
|
|
|
|
//
|
|
// Find Bearish Order Block ...
|
|
void FindBearishOrderBlock() {
|
|
//
|
|
XOHCL cBar;
|
|
bool isInited = cBar.Init(
|
|
_Symbol,
|
|
_Period,
|
|
1 //
|
|
);
|
|
if (!isInited)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
XOHCL obBar;
|
|
bool hasOB = cBar.HasBearishOrderBlock(
|
|
obBar //
|
|
);
|
|
if (!hasOB) {
|
|
return;
|
|
}
|
|
|
|
//
|
|
eaBarTracker.Waits();
|
|
|
|
//
|
|
DrawTrendLine(
|
|
ChartID(),
|
|
"BEAROB-H-" + ToString((int) obBar.time),
|
|
0,
|
|
obBar.time,
|
|
obBar.high,
|
|
cBar.time,
|
|
obBar.high,
|
|
clrMagenta,
|
|
STYLE_SOLID,
|
|
2,
|
|
false,
|
|
false,
|
|
true //
|
|
);
|
|
|
|
//
|
|
DrawTrendLine(
|
|
ChartID(),
|
|
"BEAROB-L-" + ToString((int) obBar.time),
|
|
0,
|
|
obBar.time,
|
|
obBar.low,
|
|
cBar.time,
|
|
obBar.low,
|
|
clrMagenta,
|
|
STYLE_SOLID,
|
|
2,
|
|
false,
|
|
false,
|
|
true //
|
|
);
|
|
|
|
//
|
|
Print("Detect new Bearish Order Block ...");
|
|
}
|
|
|
|
// |