prepare backup workspace for cleaning up ...
This commit is contained in:
Binary file not shown.
@@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
Binary file not shown.
@@ -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;
|
||||
}
|
||||
};
|
||||
Binary file not shown.
@@ -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;
|
||||
};
|
||||
Binary file not shown.
@@ -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;
|
||||
}
|
||||
};
|
||||
Binary file not shown.
@@ -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 //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
};
|
||||
Binary file not shown.
@@ -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 ...
|
||||
};
|
||||
Reference in New Issue
Block a user