prepare backup workspace for cleaning up ...

This commit is contained in:
2024-06-11 22:44:09 +03:30
parent 135e38c305
commit c2fa9fdd56
90 changed files with 77836 additions and 0 deletions
@@ -0,0 +1,358 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class Library
// ----------------------------------------------
// Name: X110Signaller
// Description: Signalling using X121 rules ...
//
//
// 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 "../Libraries/x-saherelm.xtrade.lib.mq5"
#include "../Classes/x-saherelm.x121.xmcycle.class.mq5"
//
// Definitions ...
//
// Class ...
class X110Signaller : public XSignallerDescriptor
{
//
// Public ...
public:
//
// Props ...
//
// Constructor(s) ...
void X110Signaller()
{
name = X110;
Default();
}
//
// Deconstructor ...
void ~X110Signaller() {}
//
// Override(s) ...
//
bool HasLongConditions(
X121MCycleConditions &conditions, // Market Conditions
double &sl, // Hold SL ...
double &tp // Hold TP ...
) override
{
//
bool result = false;
//
sl = 0;
tp = 0;
//
result = allowLong;
if (!result)
{
return result;
}
//
double bullishScore = 0;
double bearishScore = 0;
conditions.GenerateScore(
bullishScore,
bearishScore //
);
//
bool isCloseOverSenkouSpanA = conditions.bars[1].close > conditions.ichSenkouSpanAs[1];
//
bool isBaseBullish = isCloseOverSenkouSpanA &&
conditions.isSenkouSpanAOverB &&
conditions.isSenkouSpanAOverLast;
//
bool isKijunSenOverSenkouSpanA = conditions.ichKijunSens[1] > conditions.ichSenkouSpanAs[1];
//
bool isCloseOverTenkanSen = conditions.bars[1].close > conditions.ichTenkanSens[1];
//
bool isPriceCloseCrossedUpTenkanSen = conditions.bars[2].close <= conditions.ichTenkanSens[2] &&
conditions.bars[1].close > conditions.ichTenkanSens[1];
//
double cKumoUpper = MathMax(conditions.ichSenkouSpanAs[1], conditions.ichSenkouSpanBs[1]);
double pKumoUpper = MathMax(conditions.ichSenkouSpanAs[2], conditions.ichSenkouSpanBs[2]);
//
double cKumoLower = MathMin(conditions.ichSenkouSpanAs[1], conditions.ichSenkouSpanBs[1]);
double pKumoLower = MathMin(conditions.ichSenkouSpanAs[2], conditions.ichSenkouSpanBs[2]);
//
bool isTenkanSenOverKumo = conditions.ichTenkanSens[1] > cKumoUpper;
bool isTenkanSenOverKumoPrev = conditions.ichTenkanSens[2] > pKumoUpper;
//
bool isTenkanSenUnderKumo = conditions.ichTenkanSens[1] < cKumoLower;
bool isTenkanSenUnderKumoPrev = conditions.ichTenkanSens[2] < pKumoLower;
//
bool isTenkanSenCrossedOverKumo = isTenkanSenOverKumo &&
!isTenkanSenOverKumoPrev;
//
bool isTenkanSenCrossedUnderKumo = isTenkanSenUnderKumo &&
!isTenkanSenUnderKumoPrev;
//
bool condition1 =
isBaseBullish &&
isCloseOverTenkanSen &&
isKijunSenOverSenkouSpanA &&
conditions.isTenkanSenCrossedOverKijunSen;
//
bool condition2 =
isBaseBullish &&
isCloseOverTenkanSen &&
isKijunSenOverSenkouSpanA &&
conditions.isTenkanSenOverKijunSen &&
conditions.isSenkouSpanACrossedOverB;
//
bool condition3 =
isBaseBullish &&
isKijunSenOverSenkouSpanA &&
isPriceCloseCrossedUpTenkanSen &&
conditions.isTenkanSenOverKijunSen;
//
bool condition4 =
isCloseOverTenkanSen &&
isTenkanSenCrossedOverKumo &&
conditions.isTenkanSenOverKijunSen &&
conditions.isFutureSenkouSpanAOverB &&
conditions.isFutureSenkouSpanAOverLast;
//
result =
//
condition1
//
||
//
condition2
//
||
//
condition3
//
||
//
condition4
//
;
//
bool isOSCVerified =
//
(conditions.oscCcis[0] > 0 &&
conditions.oscCcis[1] > 0)
//
||
//
(conditions.oscMacdMains[0] > 0 &&
conditions.oscMacdMains[1] > 0)
//
;
//
if (result)
{
result =
isOSCVerified &&
bullishScore > bearishScore * 1.5;
}
//
if (result)
{
sl = conditions.ichSenkouSpanBs[1];
}
//
return result;
}
//
bool HasShortConditions(
X121MCycleConditions &conditions, // Market Conditions
double &sl, // Hold SL ...
double &tp // Hold TP ...
) override
{
//
bool result = false;
//
sl = 0;
tp = 0;
//
result = allowLong;
if (!result)
{
return result;
}
//
double bullishScore = 0;
double bearishScore = 0;
conditions.GenerateScore(
bullishScore,
bearishScore //
);
//
bool isCloseUnderSenkouSpanB = conditions.bars[1].close < conditions.ichSenkouSpanBs[1];
//
bool isBaseBearish = isCloseUnderSenkouSpanB &&
conditions.isSenkouSpanAUnderB &&
conditions.isSenkouSpanAUnderLast;
//
bool isKijunSenUnderSenkouSpanB = conditions.ichKijunSens[1] < conditions.ichSenkouSpanBs[1];
//
bool isCloseUnderTenkanSen = conditions.bars[1].close < conditions.ichTenkanSens[1];
//
bool isPriceCloseCrossedDownTenkanSen = conditions.bars[2].close >= conditions.ichTenkanSens[2] &&
conditions.bars[1].close < conditions.ichTenkanSens[1];
//
double cKumoUpper = MathMax(conditions.ichSenkouSpanAs[1], conditions.ichSenkouSpanBs[1]);
double pKumoUpper = MathMax(conditions.ichSenkouSpanAs[2], conditions.ichSenkouSpanBs[2]);
//
double cKumoLower = MathMin(conditions.ichSenkouSpanAs[1], conditions.ichSenkouSpanBs[1]);
double pKumoLower = MathMin(conditions.ichSenkouSpanAs[2], conditions.ichSenkouSpanBs[2]);
//
bool isTenkanSenOverKumo = conditions.ichTenkanSens[1] > cKumoUpper;
bool isTenkanSenOverKumoPrev = conditions.ichTenkanSens[2] > pKumoUpper;
//
bool isTenkanSenUnderKumo = conditions.ichTenkanSens[1] < cKumoLower;
bool isTenkanSenUnderKumoPrev = conditions.ichTenkanSens[2] < pKumoLower;
//
bool isTenkanSenCrossedOverKumo = isTenkanSenOverKumo &&
!isTenkanSenOverKumoPrev;
//
bool isTenkanSenCrossedUnderKumo = isTenkanSenUnderKumo &&
!isTenkanSenUnderKumoPrev;
//
bool condition1 =
isBaseBearish &&
isCloseUnderTenkanSen &&
isKijunSenUnderSenkouSpanB &&
conditions.isTenkanSenCrossedUnderKijunSen;
//
bool condition2 =
isBaseBearish &&
isCloseUnderTenkanSen &&
isKijunSenUnderSenkouSpanB &&
conditions.isTenkanSenUnderKijunSen &&
conditions.isSenkouSpanACrossedUnderB;
//
bool condition3 =
isBaseBearish &&
isKijunSenUnderSenkouSpanB &&
isPriceCloseCrossedDownTenkanSen &&
conditions.isTenkanSenUnderKijunSen;
//
bool condition4 =
isCloseUnderTenkanSen &&
isTenkanSenCrossedUnderKumo &&
conditions.isTenkanSenUnderKijunSen &&
conditions.isFutureSenkouSpanAUnderB &&
conditions.isFutureSenkouSpanAUnderLast;
//
result =
//
condition1
||
//
condition2
//
||
//
condition3
//
||
//
condition4
//
;
//
bool isOSCVerified =
//
(conditions.oscCcis[0] < 0 &&
conditions.oscCcis[1] < 0)
//
||
//
(conditions.oscMacdMains[0] < 0 &&
conditions.oscMacdMains[1] < 0)
//
;
//
if (result)
{
result =
isOSCVerified &&
bearishScore > bullishScore * 1.5;
}
//
if (result)
{
sl = conditions.ichSenkouSpanAs[1];
}
//
return result;
}
};
//
@@ -0,0 +1,231 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class Library
// ----------------------------------------------
// Name: X121Signaller
// Description: Signalling using X121 rules ...
//
//
// 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 "../Libraries/x-saherelm.xtrade.lib.mq5"
#include "../Classes/x-saherelm.x121.xmcycle.class.mq5"
//
// Definitions ...
//
// Class ...
class X121Signaller : public XSignallerDescriptor
{
//
// Public ...
public:
//
// Props ...
//
// Constructor(s) ...
void X121Signaller()
{
name = X121;
Default();
}
//
// Deconstructor ...
void ~X121Signaller() {}
//
// Override(s) ...
//
bool HasLongConditions(
X121MCycleConditions &conditions, // Market Conditions
double &sl, // Hold SL ...
double &tp // Hold TP ...
) override
{
//
bool result = false;
//
sl = 0;
tp = 0;
//
result = allowLong;
if (!result)
{
return result;
}
//
double bullishScore = 0;
double bearishScore = 0;
conditions.GenerateScore(
bullishScore,
bearishScore //
);
//
result =
//
(conditions.isMRBFastCrossedOverSlow &&
(conditions.isCHEBullish &&
conditions.isTrendBullish &&
conditions.isMCFastOverSlow))
//
||
//
(conditions.isMRBSlowCrossedtOverVerifier &&
(conditions.isCHEBullish &&
conditions.isTrendBullish &&
conditions.isMCFastOverSlow &&
conditions.isMRBFastOverSlow))
//
||
//
(conditions.isCHESwitchedToBullish &&
(conditions.isTrendBullish &&
conditions.isMCFastOverSlow &&
conditions.isMRBFastOverSlow))
//
;
//
bool isOSCVerified =
//
(conditions.oscCcis[0] > 0 &&
conditions.oscCcis[1] > 0)
//
||
//
(conditions.oscMacdMains[0] > 0 &&
conditions.oscMacdMains[1] > 0)
//
;
//
if (result)
{
//
result =
isOSCVerified &&
bullishScore > bearishScore * 1.5;
}
//
if (result)
{
sl = conditions.mrbSlows[1];
}
//
return result;
}
//
bool HasShortConditions(
X121MCycleConditions &conditions, // Market Conditions
double &sl, // Hold SL ...
double &tp // Hold TP ...
) override
{
//
bool result = false;
//
sl = 0;
tp = 0;
//
result = allowShort;
if (!result)
{
return result;
}
//
double bullishScore = 0;
double bearishScore = 0;
conditions.GenerateScore(
bullishScore,
bearishScore //
);
//
result =
//
(conditions.isSMHKSwitchedToBearish &&
(conditions.isTDBearish &&
conditions.isCHEBearish &&
conditions.isTrendBearish))
//
||
//
(conditions.isTDSwitchedToBearish &&
(conditions.isSMHKBearish &&
conditions.isCHEBearish &&
conditions.isTrendBearish))
//
||
//
(conditions.isCHESwitchedToBearish &&
(conditions.isTDBearish &&
conditions.isSMHKBearish &&
conditions.isTrendBearish))
//
||
//
(conditions.isTrendSwitchedToBearish &&
(conditions.isTDBearish &&
conditions.isCHEBearish &&
conditions.isSMHKBearish))
//
;
//
bool isOSCVerified =
//
(conditions.oscCcis[0] < 0 &&
conditions.oscCcis[1] < 0)
//
||
//
(conditions.oscMacdMains[0] < 0 &&
conditions.oscMacdMains[1] < 0)
//
;
//
if (result)
{
result =
isOSCVerified &&
bearishScore > bullishScore * 1.5;
}
//
if (result)
{
sl = conditions.mrbFasts[1];
}
//
return result;
}
};
@@ -0,0 +1,149 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class Library
// ----------------------------------------------
// Name: X128Signaller
// Description: Signalling using X121 rules ...
//
//
// 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 "../Libraries/x-saherelm.xtrade.lib.mq5"
#include "../Classes/x-saherelm.x121.xmcycle.class.mq5"
//
// Definitions ...
//
// Class ...
class X128Signaller : public XSignallerDescriptor
{
//
// Public ...
public:
//
// Props ...
//
// Constructor(s) ...
void X128Signaller()
{
//
name = X128;
Default();
}
//
// Deconstructor ...
void ~X128Signaller() {}
//
// Override(s) ...
//
bool HasLongConditions(
X121MCycleConditions &conditions, // Market Conditions
double &sl, // Hold SL ...
double &tp // Hold TP ...
) override
{
//
bool result = false;
//
sl = 0;
tp = 0;
//
result = allowLong;
if (!result)
{
return result;
}
//
result =
//
false
//
;
//
if (result)
{
//
sl = 0;
}
//
return result;
}
//
bool HasShortConditions(
X121MCycleConditions &conditions, // Market Conditions
double &sl, // Hold SL ...
double &tp // Hold TP ...
) override
{
//
bool result = false;
//
sl = 0;
tp = 0;
//
result = allowLong;
if (!result)
{
return result;
}
//
result =
//
false
//
;
//
if (result)
{
//
sl = 0;
}
//
return result;
}
//
// Protected ...
protected:
//
// Props ...
//
double lastPeakOnPeakTouched;
double lastValeOnPeakTouched;
datetime lastTouchedPeak;
//
double lastPeakOnValeTouched;
double lastValeOnValeTouched;
datetime lastTouchedVale;
};
@@ -0,0 +1,237 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class Library
// ----------------------------------------------
// Name: X786Signaller
// Description: Signalling using X786 rules ...
//
//
// 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 "../Libraries/x-saherelm.xtrade.lib.mq5"
#include "../Classes/x-saherelm.x121.xmcycle.class.mq5"
//
// Definitions ...
//
// Class ...
class X786Signaller : public XSignallerDescriptor
{
//
// Public ...
public:
//
// Props ...
//
// Constructor(s) ...
void X786Signaller()
{
//
name = X786;
Default();
}
//
// Deconstructor ...
void ~X786Signaller() {}
//
// Override(s) ...
//
bool HasLongConditions(
X121MCycleConditions &conditions, // Market Conditions
double &sl, // Hold SL ...
double &tp // Hold TP ...
) override
{
//
bool result = false;
//
sl = 0;
tp = 0;
//
result = allowLong;
if (!result)
{
return result;
}
//
double bullishScore = 0;
double bearishScore = 0;
conditions.GenerateScore(
bullishScore,
bearishScore //
);
//
result =
//
(conditions.isSMHKSwitchedToBullish &&
(conditions.isTDBullish &&
conditions.isCHEBullish &&
conditions.isTrendBullish))
//
||
//
(conditions.isTDSwitchedToBullish &&
(conditions.isSMHKBullish &&
conditions.isCHEBullish &&
conditions.isTrendBullish))
//
||
//
(conditions.isCHESwitchedToBullish &&
(conditions.isTDBullish &&
conditions.isSMHKBullish &&
conditions.isTrendBullish))
//
||
//
(conditions.isTrendSwitchedToBullish &&
(conditions.isTDBullish &&
conditions.isCHEBullish &&
conditions.isSMHKBullish))
//
;
//
bool isOSCVerified =
//
(conditions.oscCcis[0] > 0 &&
conditions.oscCcis[1] > 0)
//
||
//
(conditions.oscMacdMains[0] > 0 &&
conditions.oscMacdMains[1] > 0)
//
;
//
if (result)
{
result =
isOSCVerified &&
bullishScore > bearishScore * 1.5;
}
//
if (result)
{
sl = conditions.donLowerHs[1];
}
//
return result;
}
//
bool HasShortConditions(
X121MCycleConditions &conditions, // Market Conditions
double &sl, // Hold SL ...
double &tp // Hold TP ...
) override
{
//
bool result = false;
//
tp = 0;
sl = 0;
//
result = allowShort;
if (!result)
{
return result;
}
//
double bullishScore = 0;
double bearishScore = 0;
conditions.GenerateScore(
bullishScore,
bearishScore //
);
//
result =
//
(conditions.isSMHKSwitchedToBearish &&
(conditions.isTDBearish &&
conditions.isCHEBearish &&
conditions.isTrendBearish))
//
||
//
(conditions.isTDSwitchedToBearish &&
(conditions.isSMHKBearish &&
conditions.isCHEBearish &&
conditions.isTrendBearish))
//
||
//
(conditions.isCHESwitchedToBearish &&
(conditions.isTDBearish &&
conditions.isSMHKBearish &&
conditions.isTrendBearish))
//
||
//
(conditions.isTrendSwitchedToBearish &&
(conditions.isTDBearish &&
conditions.isCHEBearish &&
conditions.isSMHKBearish))
//
;
//
bool isOSCVerified =
//
(conditions.oscCcis[0] < 0 &&
conditions.oscCcis[1] < 0)
//
||
//
(conditions.oscMacdMains[0] < 0 &&
conditions.oscMacdMains[1] < 0)
//
;
//
if (result)
{
result =
isOSCVerified &&
bearishScore > bullishScore * 1.5;
}
//
if (result)
{
sl = conditions.donUpperLs[1];
}
//
return result;
}
};
@@ -0,0 +1,425 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class Library
// ----------------------------------------------
// Name: X92Signaller
// Description: Signalling using X121 rules ...
//
//
// 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 "../Libraries/x-saherelm.xtrade.lib.mq5"
#include "../Classes/x-saherelm.x121.xmcycle.class.mq5"
//
// Definitions ...
//
// Class ...
class X92Signaller : public XSignallerDescriptor
{
//
// Public ...
public:
//
// Props ...
//
// Constructor(s) ...
void X92Signaller()
{
//
name = X92;
Default();
}
//
// Deconstructor ...
void ~X92Signaller() {}
//
void SetSymbol(string value)
{
this.symbol = value;
}
//
void SetPeriod(ENUM_TIMEFRAMES value)
{
this.period = value;
}
//
// Override(s) ...
//
bool HasLongConditions(
X121MCycleConditions &conditions, // Market Conditions
double &sl, // Hold SL ...
double &tp // Hold TP ...
) override
{
//
bool result = false;
//
sl = 0;
tp = 0;
//
result = allowLong;
if (!result)
{
return result;
}
//
if (IsLookingForBoundary())
{
//
FindBoundary(conditions);
//
return result;
}
//
double bullishScore = 0;
double bearishScore = 0;
conditions.GenerateScore(
bullishScore,
bearishScore //
);
//
bool isRejected =
//
(conditions.bars[1].low > lastLower &&
conditions.bars[2].low > lastLower &&
conditions.bars[3].low > lastLower &&
conditions.bars[4].low > lastLower &&
conditions.bars[5].low > lastLower)
//
||
//
conditions.bars[1].IsSupportRejected(lastLower)
//
;
bool isBreaked =
//
(conditions.bars[1].low > lastUpper &&
conditions.bars[2].low > lastUpper &&
conditions.bars[3].low > lastUpper &&
conditions.bars[4].low > lastUpper &&
conditions.bars[5].low > lastUpper)
//
||
//
conditions.bars[1].IsResistanceBreaked(lastUpper)
//
;
//
result =
//
isBreaked
//
||
//
isRejected
//
;
//
bool isOSCVerified =
//
(conditions.oscCcis[0] > 0 &&
conditions.oscCcis[1] > 0)
//
||
//
(conditions.oscMacdMains[0] > 0 &&
conditions.oscMacdMains[1] > 0)
//
;
//
if (result)
{
result =
isOSCVerified &&
bullishScore > bearishScore * 1.5;
}
//
if (result)
{
//
sl = isBreaked
? lastUpper
: lastLower;
}
//
HandleResetBundary();
//
return result;
}
//
bool HasShortConditions(
X121MCycleConditions &conditions, // Market Conditions
double &sl, // Hold SL ...
double &tp // Hold TP ...
) override
{
//
bool result = false;
//
sl = 0;
tp = 0;
//
result = allowLong;
if (!result)
{
return result;
}
//
if (IsLookingForBoundary())
{
//
FindBoundary(conditions);
//
return result;
}
//
double bullishScore = 0;
double bearishScore = 0;
conditions.GenerateScore(
bullishScore,
bearishScore //
);
//
bool isRejected =
//
(conditions.bars[1].high < lastUpper &&
conditions.bars[2].high < lastUpper &&
conditions.bars[3].high < lastUpper &&
conditions.bars[4].high < lastUpper &&
conditions.bars[5].high < lastUpper)
//
||
//
conditions.bars[1].IsResistanceRejected(lastUpper)
//
;
bool isBreaked =
//
(conditions.bars[1].high < lastLower &&
conditions.bars[2].high < lastLower &&
conditions.bars[3].high < lastLower &&
conditions.bars[4].high < lastLower &&
conditions.bars[5].high < lastLower)
//
||
//
conditions.bars[1].IsSupportBreaked(lastLower)
//
;
//
result =
//
isBreaked
//
||
//
isRejected
//
;
//
bool isOSCVerified =
//
(conditions.oscCcis[0] < 0 &&
conditions.oscCcis[1] < 0)
//
||
//
(conditions.oscMacdMains[0] < 0 &&
conditions.oscMacdMains[1] < 0)
//
;
//
if (result)
{
result =
isOSCVerified &&
bearishScore > bullishScore * 1.5;
}
//
if (result)
{
//
sl = isBreaked
? lastLower
: lastUpper;
}
//
HandleResetBundary();
//
return result;
}
//
// Protected ...
protected:
//
// Props ...
double lastUpper;
double lastLower;
datetime lastTime;
//
string symbol;
ENUM_TIMEFRAMES period;
//
bool IsLookingForBoundary()
{
//
bool result = lastUpper == 0 && lastLower == 0;
return result;
}
//
void FindBoundary(const X121MCycleConditions &conditions)
{
//
int zIndex = 0;
int cIndex = 1;
int pIndex = 2;
int ppIndex = 3;
//
// Detect Inside Bar ...
if (conditions.bars[cIndex].IsInsideBar())
{
//
lastUpper = conditions.bars[pIndex].high;
lastLower = conditions.bars[pIndex].low;
//
lastTime = TimeCurrent();
//
DrawPivot(lastUpper, clrOrangeRed);
DrawPivot(lastLower, clrLimeGreen);
}
}
//
void HandleResetBundary()
{
//
if (!IsSpecifiedValid(lastTime))
{
return;
}
//
int age = iBarShift(
symbol,
period,
lastTime,
false //
);
//
if (age < 7)
{
return;
}
//
RemoveDraws("X92_");
//
lastLower = 0;
lastUpper = 0;
lastTime = NULL;
}
//
void DrawPivot(
double price,
color clr //
)
{
//
long chartID = ChartID();
datetime time1 = iTime(
symbol,
period,
2 //
);
datetime time = iTime(
symbol,
period,
0 //
);
//
string pPrefix = "X92_P_" +
ToString(price);
//
if (IsDrawExists(pPrefix))
{
return;
}
//
DrawTrendLine(
chartID,
pPrefix,
0,
time1,
price,
time,
price,
clr,
STYLE_SOLID,
2,
false,
false,
true //
);
}
//
};
@@ -0,0 +1,139 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class Library
// ----------------------------------------------
// Name: XSPSignaller
// Description: Signalling using X121 rules ...
//
//
// 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 "../Libraries/x-saherelm.xtrade.lib.mq5"
#include "../Classes/x-saherelm.x121.xmcycle.class.mq5"
//
// Definitions ...
//
// Class ...
class XSPSignaller : public XSignallerDescriptor
{
//
// Public ...
public:
//
// Props ...
//
// Constructor(s) ...
void XSPSignaller()
{
//
name = XSP;
Default();
}
//
// Deconstructor ...
void ~XSPSignaller() {}
//
// Override(s) ...
//
bool HasLongConditions(
X121MCycleConditions &conditions, // Market Conditions
double &sl, // Hold SL ...
double &tp // Hold TP ...
) override
{
//
bool result = false;
//
sl = 0;
tp = 0;
//
result = allowLong;
if (!result)
{
return result;
}
//
result =
//
false
//
;
//
if (result)
{
//
sl = 0;
}
//
return result;
}
//
bool HasShortConditions(
X121MCycleConditions &conditions, // Market Conditions
double &sl, // Hold SL ...
double &tp // Hold TP ...
) override
{
//
bool result = false;
//
sl = 0;
tp = 0;
//
result = allowLong;
if (!result)
{
return result;
}
//
result =
//
false
//
;
//
if (result)
{
//
sl = 0;
}
//
return result;
}
//
// Protected ...
protected:
//
// Props ...
};