Files
MQL5Data/Helpers/x-saherelm.xchich.helper.mq5
T
2024-08-05 18:21:36 +03:30

1081 lines
23 KiB
Plaintext

///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Helper Class Library
// ----------------------------------------------
// Name: XSCXCHICHHelper
// Description: provides all Indicator
// Helper requirements ...
//
//
// 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.xhelper.class.mq5"
//
// Ichimoku Lines Calculator Mode ...
enum ENUM_X_ICHIMOKU_CALCULATION_MODE
{
//
X_XICH_HH_LL_MODE = 1, // Highest High and Lowest Low
X_XICH_HO_LC_MODE = 2, // Highest Open and Lowest Close
};
//
enum ENUM_XCHICH_BUFFERS
{
//
// Current ...
XCHICH_C_TK_LINE = 0,
XCHICH_C_KJ_LINE = 1,
XCHICH_C_CH_LINE = 2,
XCHICH_C_SSA_LINE = 3,
XCHICH_C_SSB_LINE = 4,
//
// Short ...
XCHICH_S_TK_LINE = 5,
XCHICH_S_KJ_LINE = 6,
XCHICH_S_CH_LINE = 7,
XCHICH_S_SSA_LINE = 8,
XCHICH_S_SSB_LINE = 9,
//
// Medium ...
XCHICH_M_TK_LINE = 10,
XCHICH_M_KJ_LINE = 11,
XCHICH_M_CH_LINE = 12,
XCHICH_M_SSA_LINE = 13,
XCHICH_M_SSB_LINE = 14,
//
// Long ...
XCHICH_L_TK_LINE = 15,
XCHICH_L_KJ_LINE = 16,
XCHICH_L_CH_LINE = 17,
XCHICH_L_SSA_LINE = 18,
XCHICH_L_SSB_LINE = 19,
//
// Hind ...
XCHICH_H_TK_LINE = 20,
XCHICH_H_KJ_LINE = 21,
XCHICH_H_CH_LINE = 22,
XCHICH_H_SSA_LINE = 23,
XCHICH_H_SSB_LINE = 24,
};
//
// Input Models ...
struct XCHICHInputs
{
//
// Props ...
//
// Market ...
//
// TENKANSEN ...
//
// Tenkan Sen ...
int tenkanSenLength; // Length
ENUM_X_ICHIMOKU_CALCULATION_MODE tenkanSenMode; // Calculation Mode
//
// KIJUNSEN ...
//
// Kijun Sen ...
int kijunSenLength; // Length
ENUM_X_ICHIMOKU_CALCULATION_MODE kijunSenMode; // Calculation Mode
//
// SENKOUSPANB ...
//
// Senkou Span B ...
int senkouSpanBLength; // Length
ENUM_X_ICHIMOKU_CALCULATION_MODE senkouSpanBMode; // Calculation Mode
//
// CHIKOUSPAN ...
//
// Chikou Span ...
ENUM_APPLIED_PRICE chikuoSpanAppliedTo; // Price Type
//
// Cycles ...
//
// Short ...
ENUM_X_PERIOD_METHOD scMethod; // How to Find Period
ENUM_TIMEFRAMES scPeriod; // Time Period
//
// Medium ...
ENUM_X_PERIOD_METHOD mcMethod; // How to Find Period
ENUM_TIMEFRAMES mcPeriod; // Time Period
//
// Long ...
ENUM_X_PERIOD_METHOD lcMethod; // How to Find Period
ENUM_TIMEFRAMES lcPeriod; // Time Period
//
// Hind ...
ENUM_X_PERIOD_METHOD hcMethod; // How to Find Period
ENUM_TIMEFRAMES hcPeriod; // Time Period
//
// Presentation ...
//
// All Cycles ...
bool showTenkanSen; // Show Tenkan Sen
bool showKijunSen; // Show Kijun Sen
bool showChikouSpan; // Show Chikou Span
bool showSenkouSpanA; // Show Senkou Span A
bool showSenkouSpanB; // Show Senkou Span B
bool showKumo; // Show Kumo
//
// Current ...
bool showCTenkanSen; // Show Tenkan Sen
bool showCKijunSen; // Show Kijun Sen
bool showCChikouSpan; // Show Chikou Span
bool showCSenkouSpanA; // Show Senkou Span A
bool showCSenkouSpanB; // Show Senkou Span B
bool showCKumo; // Show Kumo
bool shiftCKumo; // Shift Kumo to Future
//
// Short ...
bool showSTenkanSen; // Show Tenkan Sen
bool showSKijunSen; // Show Kijun Sen
bool showSChikouSpan; // Show Chikou Span
bool showSSenkouSpanA; // Show Senkou Span A
bool showSSenkouSpanB; // Show Senkou Span B
bool showSKumo; // Show Kumo
bool shiftSKumo; // Shift Kumo to Future
//
// Medium ...
bool showMTenkanSen; // Show Tenkan Sen
bool showMKijunSen; // Show Kijun Sen
bool showMChikouSpan; // Show Chikou Span
bool showMSenkouSpanA; // Show Senkou Span A
bool showMSenkouSpanB; // Show Senkou Span B
bool showMKumo; // Show Kumo
bool shiftMKumo; // Shift Kumo to Future
//
// Long ...
bool showLTenkanSen; // Show Tenkan Sen
bool showLKijunSen; // Show Kijun Sen
bool showLChikouSpan; // Show Chikou Span
bool showLSenkouSpanA; // Show Senkou Span A
bool showLSenkouSpanB; // Show Senkou Span B
bool showLKumo; // Show Kumo
bool shiftLKumo; // Shift Kumo to Future
//
// Hind ...
bool showHTenkanSen; // Show Tenkan Sen
bool showHKijunSen; // Show Kijun Sen
bool showHChikouSpan; // Show Chikou Span
bool showHSenkouSpanA; // Show Senkou Span A
bool showHSenkouSpanB; // Show Senkou Span B
bool showHKumo; // Show Kumo
bool shiftHKumo; // Shift Kumo to Future
//
// Constructor(s) ...
XCHICHInputs()
{
//
Clean();
}
//
// Tools ...
//
// Clean ...
void Clean()
{
//
kijunSenLength = 0;
tenkanSenLength = 0;
senkouSpanBLength = 0;
kijunSenMode = X_XICH_HH_LL_MODE;
tenkanSenMode = X_XICH_HH_LL_MODE;
chikuoSpanAppliedTo = PRICE_CLOSE;
senkouSpanBMode = X_XICH_HH_LL_MODE;
//
scMethod = X_PERIOD_AUTO;
scPeriod = NULL;
mcMethod = X_PERIOD_AUTO;
mcPeriod = NULL;
lcMethod = X_PERIOD_AUTO;
lcPeriod = NULL;
hcMethod = X_PERIOD_AUTO;
hcPeriod = NULL;
//
showTenkanSen = false;
showKijunSen = false;
showChikouSpan = false;
showSenkouSpanA = false;
showSenkouSpanB = false;
showKumo = false;
//
showCTenkanSen = false;
showCKijunSen = false;
showCChikouSpan = false;
showCSenkouSpanA = false;
showCSenkouSpanB = false;
showCKumo = false;
shiftCKumo = true;
//
showSTenkanSen = false;
showSKijunSen = false;
showSChikouSpan = false;
showSSenkouSpanA = false;
showSSenkouSpanB = false;
showSKumo = false;
shiftSKumo = true;
//
showMTenkanSen = false;
showMKijunSen = false;
showMChikouSpan = false;
showMSenkouSpanA = false;
showMSenkouSpanB = false;
showMKumo = false;
shiftMKumo = true;
//
showLTenkanSen = false;
showLKijunSen = false;
showLChikouSpan = false;
showLSenkouSpanA = false;
showLSenkouSpanB = false;
showLKumo = false;
shiftLKumo = true;
//
showHTenkanSen = false;
showHKijunSen = false;
showHChikouSpan = false;
showHSenkouSpanA = false;
showHSenkouSpanB = false;
showHKumo = false;
shiftHKumo = true;
}
//
// Default ...
void Default()
{
//
kijunSenLength = 26;
tenkanSenLength = 9;
senkouSpanBLength = 52;
kijunSenMode = X_XICH_HH_LL_MODE;
tenkanSenMode = X_XICH_HH_LL_MODE;
chikuoSpanAppliedTo = PRICE_CLOSE;
senkouSpanBMode = X_XICH_HH_LL_MODE;
//
scMethod = X_PERIOD_AUTO;
scPeriod = NULL;
mcMethod = X_PERIOD_AUTO;
mcPeriod = NULL;
lcMethod = X_PERIOD_AUTO;
lcPeriod = NULL;
hcMethod = X_PERIOD_AUTO;
hcPeriod = NULL;
//
showTenkanSen = true;
showKijunSen = true;
showChikouSpan = true;
showSenkouSpanA = true;
showSenkouSpanB = true;
showKumo = true;
//
showCTenkanSen = true;
showCKijunSen = true;
showCChikouSpan = true;
showCSenkouSpanA = true;
showCSenkouSpanB = true;
showCKumo = true;
shiftCKumo = true;
//
showSTenkanSen = true;
showSKijunSen = true;
showSChikouSpan = true;
showSSenkouSpanA = true;
showSSenkouSpanB = true;
showSKumo = true;
shiftSKumo = true;
//
showMTenkanSen = true;
showMKijunSen = true;
showMChikouSpan = true;
showMSenkouSpanA = true;
showMSenkouSpanB = true;
showMKumo = true;
shiftMKumo = true;
//
showLTenkanSen = true;
showLKijunSen = true;
showLChikouSpan = true;
showLSenkouSpanA = true;
showLSenkouSpanB = true;
showLKumo = true;
shiftLKumo = true;
//
showHTenkanSen = true;
showHKijunSen = true;
showHChikouSpan = true;
showHSenkouSpanA = true;
showHSenkouSpanB = true;
showHKumo = true;
shiftHKumo = true;
}
//
// Validate ...
bool IsValid()
{
//
bool result = false;
//
result =
//
(tenkanSenLength > 2 &&
kijunSenLength > tenkanSenLength &&
senkouSpanBLength > kijunSenLength)
//
&&
//
(IsValid(scMethod, scPeriod) &&
IsValid(mcMethod, mcPeriod) &&
IsValid(lcMethod, lcPeriod) &&
IsValid(hcMethod, hcPeriod))
//
;
//
return result;
}
//
// Retrieve MAx Length ...
int Max()
{
//
int result = 0;
//
result = MathMax(tenkanSenLength, kijunSenLength);
result = MathMax(result, senkouSpanBLength);
//
return result;
}
};
//
// Define Conditions ...
struct XCHICHConditions
{
//
// Common ...
string symbol;
ENUM_TIMEFRAMES period;
datetime time;
//
// Buffers ...
//
// Current ...
double cTK[];
double cKJ[];
double cChik[];
double cSSA[];
double cSSB[];
//
// Short ...
double sTK[];
double sKJ[];
double sChik[];
double sSSA[];
double sSSB[];
//
// Medium ...
double mTK[];
double mKJ[];
double mChik[];
double mSSA[];
double mSSB[];
//
// Long ...
double lTK[];
double lKJ[];
double lChik[];
double lSSA[];
double lSSB[];
//
// Hind ...
double hTK[];
double hKJ[];
double hChik[];
double hSSA[];
double hSSB[];
//
void Clean()
{
//
// Buffers ...
Clean(cTK);
Clean(cKJ);
Clean(cChik);
Clean(cSSA);
Clean(cSSB);
Clean(sTK);
Clean(sKJ);
Clean(sChik);
Clean(sSSA);
Clean(sSSB);
Clean(mTK);
Clean(mKJ);
Clean(mChik);
Clean(mSSA);
Clean(mSSB);
Clean(lTK);
Clean(lKJ);
Clean(lChik);
Clean(lSSA);
Clean(lSSB);
Clean(hTK);
Clean(hKJ);
Clean(hChik);
Clean(hSSA);
Clean(hSSB);
//
ArraySetAsSeries(cTK, true);
ArraySetAsSeries(cKJ, true);
ArraySetAsSeries(cChik, true);
ArraySetAsSeries(cSSA, true);
ArraySetAsSeries(cSSB, true);
ArraySetAsSeries(sTK, true);
ArraySetAsSeries(sKJ, true);
ArraySetAsSeries(sChik, true);
ArraySetAsSeries(sSSA, true);
ArraySetAsSeries(sSSB, true);
ArraySetAsSeries(mTK, true);
ArraySetAsSeries(mKJ, true);
ArraySetAsSeries(mChik, true);
ArraySetAsSeries(mSSA, true);
ArraySetAsSeries(mSSB, true);
ArraySetAsSeries(lTK, true);
ArraySetAsSeries(lKJ, true);
ArraySetAsSeries(lChik, true);
ArraySetAsSeries(lSSA, true);
ArraySetAsSeries(lSSB, true);
ArraySetAsSeries(hTK, true);
ArraySetAsSeries(hKJ, true);
ArraySetAsSeries(hChik, true);
ArraySetAsSeries(hSSA, true);
ArraySetAsSeries(hSSB, true);
}
//
void GenerateScore(
double &bullishScore,
double &bearishScore //
)
{
//
bullishScore = 0;
bearishScore = 0;
}
//
string GenerateSummary(
bool onlyCommons = false,
bool onlyConditions = false,
bool includeScores = true,
bool ignoreFalseConditions = true,
string separator = "\n" //
)
{
//
string result = NULL;
//
double bullishScore = 0;
double bearishScore = 0;
GenerateScore(
bullishScore,
bearishScore //
);
//
string scoresStr =
//
"Scores: " + separator +
"---------------" + separator +
"Bullish: " + ToString(bullishScore) + separator +
"Bearish: " + ToString(bearishScore) + separator +
""
//
;
//
string commonStr = GenerateSpecifiedCommonSummary(
this,
separator,
includeScores //
);
//
string conditionsStr =
//
// Current ...
//
// Short ...
//
// Medium ...
//
// Long ...
//
// Hind ...
//
""
//
;
//
result =
//
"[" + GetTag() + "]" + separator +
(onlyConditions
? ""
: commonStr) +
(!includeScores
? ""
: scoresStr) +
" " + separator +
(onlyCommons
? ""
: conditionsStr) +
""
//
;
//
return result;
}
//
string GetTag()
{
return "XCHICH";
}
};
//
// Class ...
class XSCXCHICHHelper : public XSCBaseHelper
{
//
// Public ...
public:
//
// Props ...
//
// Constructors ...
XSCXCHICHHelper() : XSCBaseHelper(_Symbol, _Period)
{
}
//
// Deconstructor ...
~XSCXCHICHHelper()
{
//
Clean(cTKBuffer);
Clean(cKJBuffer);
Clean(cChikBuffer);
Clean(cSSABuffer);
Clean(cSSBBuffer);
Clean(sTKBuffer);
Clean(sKJBuffer);
Clean(sChikBuffer);
Clean(sSSABuffer);
Clean(sSSBBuffer);
Clean(mTKBuffer);
Clean(mKJBuffer);
Clean(mChikBuffer);
Clean(mSSABuffer);
Clean(mSSBBuffer);
Clean(lTKBuffer);
Clean(lKJBuffer);
Clean(lChikBuffer);
Clean(lSSABuffer);
Clean(lSSBBuffer);
Clean(hTKBuffer);
Clean(hKJBuffer);
Clean(hChikBuffer);
Clean(hSSABuffer);
Clean(hSSBBuffer);
}
//
// Tools ...
bool Init(
string symbol, // Trading Symbol
ENUM_TIMEFRAMES period, // Trading Period
XCHICHInputs &inputs // Inputs
)
{
//
bool result = false;
//
mSymbol = symbol;
mPeriod = period;
//
result = inputs.IsValid();
if (!result)
{
return result;
}
//
mInputs = inputs;
//
ArraySetAsSeries(cTKBuffer, true);
ArraySetAsSeries(cKJBuffer, true);
ArraySetAsSeries(cChikBuffer, true);
ArraySetAsSeries(cSSABuffer, true);
ArraySetAsSeries(cSSBBuffer, true);
ArraySetAsSeries(sTKBuffer, true);
ArraySetAsSeries(sKJBuffer, true);
ArraySetAsSeries(sChikBuffer, true);
ArraySetAsSeries(sSSABuffer, true);
ArraySetAsSeries(sSSBBuffer, true);
ArraySetAsSeries(mTKBuffer, true);
ArraySetAsSeries(mKJBuffer, true);
ArraySetAsSeries(mChikBuffer, true);
ArraySetAsSeries(mSSABuffer, true);
ArraySetAsSeries(mSSBBuffer, true);
ArraySetAsSeries(lTKBuffer, true);
ArraySetAsSeries(lKJBuffer, true);
ArraySetAsSeries(lChikBuffer, true);
ArraySetAsSeries(lSSABuffer, true);
ArraySetAsSeries(lSSBBuffer, true);
ArraySetAsSeries(hTKBuffer, true);
ArraySetAsSeries(hKJBuffer, true);
ArraySetAsSeries(hChikBuffer, true);
ArraySetAsSeries(hSSABuffer, true);
ArraySetAsSeries(hSSBBuffer, true);
//
mHandler = iCustom(
mSymbol,
mPeriod,
"x-saherelm.xchich",
//
// Inputs ...
//
// Market ...
"",
//
// TENKANSEN ...
"",
mInputs.tenkanSenLength, // Length
mInputs.tenkanSenMode, // Calculation Mode
//
// KIJUNSEN ...
"",
mInputs.kijunSenLength, // Length
mInputs.kijunSenMode, // Calculation Mode
//
// SENKOUSPANB ...
"",
mInputs.senkouSpanBLength, // Length
mInputs.senkouSpanBMode, // Calculation Mode
//
// CHIKOUSPAN ...
"",
mInputs.chikuoSpanAppliedTo, // Price Type
//
// Cycles ...
"",
//
// Short ...
"",
mInputs.scMethod,
mInputs.scPeriod,
//
// Medium ...
"",
mInputs.mcMethod,
mInputs.mcPeriod,
//
// Long ...
"",
mInputs.lcMethod,
mInputs.lcPeriod,
//
// Hind ...
"",
mInputs.hcMethod,
mInputs.hcPeriod,
//
// Presentation ...
"",
//
// All Cycles ...
"",
mInputs.showTenkanSen, // Show Tenkan Sen
mInputs.showKijunSen, // Show Kijun Sen
mInputs.showChikouSpan, // Show Chikou Span
mInputs.showSenkouSpanA, // Show Senkou Span A
mInputs.showSenkouSpanB, // Show Senkou Span B
mInputs.showKumo, // Show Kumo
//
// Current ...
"",
//
);
result = mHandler != INVALID_HANDLE;
if (!result)
{
return result;
}
//
return result;
}
//
// Protected ...
protected:
//
// Private ...
private:
//
// Props ...
XCHICHInputs mInputs; // Inputs ...
//
// Buffers ...
//
// Current ...
double cTKBuffer[];
double cKJBuffer[];
double cChikBuffer[];
double cSSABuffer[];
double cSSBBuffer[];
//
// Short ...
double sTKBuffer[];
double sKJBuffer[];
double sChikBuffer[];
double sSSABuffer[];
double sSSBBuffer[];
//
// Medium ...
double mTKBuffer[];
double mKJBuffer[];
double mChikBuffer[];
double mSSABuffer[];
double mSSBBuffer[];
//
// Long ...
double lTKBuffer[];
double lKJBuffer[];
double lChikBuffer[];
double lSSABuffer[];
double lSSBBuffer[];
//
// Hind ...
double hTKBuffer[];
double hKJBuffer[];
double hChikBuffer[];
double hSSABuffer[];
double hSSBBuffer[];
//
// Tools ...
//
// Calculate Values Until Now ...
void Calculate()
{
//
int totalBars = CountBars();
if (totalBars > 1000)
{
totalBars = 1000;
}
//
// Current ...
CopyBuffer(
mHandler,
XCHICH_C_TK_LINE,
0,
totalBars,
cTKBuffer
//
);
CopyBuffer(
mHandler,
XCHICH_C_KJ_LINE,
0,
totalBars,
cKJBuffer
//
);
CopyBuffer(
mHandler,
XCHICH_C_CH_LINE,
0,
totalBars,
cChikBuffer
//
);
CopyBuffer(
mHandler,
XCHICH_C_SSA_LINE,
0,
totalBars,
cSSABuffer
//
);
CopyBuffer(
mHandler,
XCHICH_C_SSB_LINE,
0,
totalBars,
cSSBBuffer
//
);
//
// Short ...
CopyBuffer(
mHandler,
XCHICH_S_TK_LINE,
0,
totalBars,
sTKBuffer
//
);
CopyBuffer(
mHandler,
XCHICH_S_KJ_LINE,
0,
totalBars,
sKJBuffer
//
);
CopyBuffer(
mHandler,
XCHICH_S_CH_LINE,
0,
totalBars,
sChikBuffer
//
);
CopyBuffer(
mHandler,
XCHICH_S_SSA_LINE,
0,
totalBars,
sSSABuffer
//
);
CopyBuffer(
mHandler,
XCHICH_S_SSB_LINE,
0,
totalBars,
sSSBBuffer
//
);
//
// Medium ...
CopyBuffer(
mHandler,
XCHICH_M_TK_LINE,
0,
totalBars,
mTKBuffer
//
);
CopyBuffer(
mHandler,
XCHICH_M_KJ_LINE,
0,
totalBars,
mKJBuffer
//
);
CopyBuffer(
mHandler,
XCHICH_M_CH_LINE,
0,
totalBars,
mChikBuffer
//
);
CopyBuffer(
mHandler,
XCHICH_M_SSA_LINE,
0,
totalBars,
mSSABuffer
//
);
CopyBuffer(
mHandler,
XCHICH_M_SSB_LINE,
0,
totalBars,
mSSBBuffer
//
);
//
// Long ...
CopyBuffer(
mHandler,
XCHICH_L_TK_LINE,
0,
totalBars,
lTKBuffer
//
);
CopyBuffer(
mHandler,
XCHICH_L_KJ_LINE,
0,
totalBars,
lKJBuffer
//
);
CopyBuffer(
mHandler,
XCHICH_L_CH_LINE,
0,
totalBars,
lChikBuffer
//
);
CopyBuffer(
mHandler,
XCHICH_L_SSA_LINE,
0,
totalBars,
lSSABuffer
//
);
CopyBuffer(
mHandler,
XCHICH_L_SSB_LINE,
0,
totalBars,
lSSBBuffer
//
);
//
// Hind ...
CopyBuffer(
mHandler,
XCHICH_H_TK_LINE,
0,
totalBars,
hTKBuffer
//
);
CopyBuffer(
mHandler,
XCHICH_H_KJ_LINE,
0,
totalBars,
hKJBuffer
//
);
CopyBuffer(
mHandler,
XCHICH_H_CH_LINE,
0,
totalBars,
hChikBuffer
//
);
CopyBuffer(
mHandler,
XCHICH_H_SSA_LINE,
0,
totalBars,
hSSABuffer
//
);
CopyBuffer(
mHandler,
XCHICH_H_SSB_LINE,
0,
totalBars,
hSSBBuffer
//
);
};
};
//