Files
xMQL5/MQLTestWorkspace/X121/Old/Helpers/x-saherelm.x121.xche.helper.class.mq5
T
2024-05-01 14:46:50 +03:30

613 lines
12 KiB
Plaintext

///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Helper Class Library
// ----------------------------------------------
// Name: XSCXCHEHelper
// 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
//
// START Definitions ...
//
//
// Inputs ...
struct XCHEInputs
{
//
// Market ...
int length; // Length
int loopback; // Loopback
double multiplier1; // 1st Multiplier
double multiplier2; // 2nd Multiplier
//
// Calculation ...
ENUM_APPLIED_PRICE upAppliedTo; // Up Zone Applied to
ENUM_APPLIED_PRICE downAppliedTo; // Down Zone Applied to
//
// Presentation ...
bool showLongExit1Line; // Show 1st Long Exit
bool showShortExit1Line; // Show 1st Short Exit
bool showLongExit2Line; // Show 2st Long Exit
bool showShortExit2Line; // Show 2st Short Exit
};
//
// Index of Lines ...
enum ENUM_XCHE_BUFFERS
{
//
// Main Requirements ...
XCHE_1ST_LONG_EXIT_LINE = 0,
XCHE_1ST_SHORT_EXIT_LINE = 1,
XCHE_2ND_LONG_EXIT_LINE = 2,
XCHE_2ND_SHORT_EXIT_LINE = 3,
};
//
// Retrieve Info Model ...
struct XCHEInfo
{
//
// Symbol ...
string symbol;
//
// Period ...
ENUM_TIMEFRAMES period;
//
// Bar Time ...
datetime barTime;
//
// Bar Index ...
int barIndex;
//
// Values ...
double longExit1;
double longExit2;
double shortExit1;
double shortExit2;
//
double le1[];
double le2[];
//
double se1[];
double se2[];
//
// Conditions ...
//
bool isLongExit1Start;
bool isShortExit1Start;
//
bool isLongExit2Start;
bool isShortExit2Start;
};
//
// END Definitions ...
//
//
// START Import and Inclused requirements ...
//
//
// Includes ...
#include "../Libraries/x-saherelm.common.lib.mq5"
#include "../Classes/x-saherelm.xhelper.class.mq5"
//
// END Import and Inclused requirements ...
//
//
// START Overrides ...
//
//
// END Overrides ...
//
//
// a Class for Helping Indicators Requirements ...
class XSCXCHEHelper : public XSCBaseHelper
{
//
// Public ...
public:
//
// Buffers ...
double longExit1Buffer[];
double shortExit1Buffer[];
double longExit2Buffer[];
double shortExit2Buffer[];
//
// Constructor ...
void XSCXCHEHelper(
string symbol, // Trading Symbol
ENUM_TIMEFRAMES period // Trading Time Frame
) : XSCBaseHelper(symbol, period)
{
PrepareTag();
}
//
// Deconstructor ...
void ~XSCXCHEHelper()
{
}
//
// START Properties ...
//
//
// Show 1st Long Exit ...
bool ShowLongExit1Line(
bool show // Show or Hide
)
{
//
bool result = false;
//
if (mShowLongExit1Line == show)
{
return true;
}
//
mShowLongExit1Line = show;
result = Init();
//
return result;
}
//
// Show 1st Short Exit ...
bool ShowShortExit1Line(
bool show // Show or Hide
)
{
//
bool result = false;
//
if (mShowShortExit1Line == show)
{
return true;
}
//
mShowShortExit1Line = show;
result = Init();
//
return result;
}
//
// Show 2st Long Exit ...
bool ShowLongExit2Line(
bool show // Show or Hide
)
{
//
bool result = false;
//
if (mShowLongExit2Line == show)
{
return true;
}
//
mShowLongExit2Line = show;
result = Init();
//
return result;
}
//
// Show 2st Short Exit ...
bool ShowShortExit2Line(
bool show // Show or Hide
)
{
//
bool result = false;
//
if (mShowShortExit1Line == show)
{
return true;
}
//
mShowShortExit1Line = show;
result = Init();
//
return result;
}
//
// END Properties ...
//
//
// START Provided Functions ...
//
//
// Prepare Tag ...
virtual void PrepareTag()
{
mTag = "XCHE" + GetTagPrefix();
}
//
virtual int GetMaxLength()
{
//
int result = -1;
//
result = MathMax(mLength, mLoopback);
//
return result;
}
//
// Initial Indicator Handler ...
bool Init()
{
//
bool result = false;
//
// Validate Inputs ...
//
//
result =
mLength >= 9 &&
mLoopback >= 0;
if (!result)
{
return result;
}
//
// Initialize Handler ...
mHandler = iCustom(
//
mSymbol,
mPeriod,
"x-saherelm.x121.xche",
//
// Inputs ...
//
// Market ...
"",
//
// Length ...
mLength,
//
// Loopback ...
mLoopback,
//
// 1st Multiplier ...
mMultiplier1,
//
// 2nd Multiplier ...
mMultiplier2,
//
// Calculation ...
"",
//
// Up Zone Applied to ...
mUpAppliedTo,
//
// Down Zone Applied to ...
mDownAppliedTo,
//
// Presentation ...
"",
//
// Show 1st Long Exit ...
mShowLongExit1Line,
//
// Show 1st Short Exit ...
mShowShortExit1Line,
//
// Show 2st Long Exit ...
mShowLongExit2Line,
//
// Show 2st Short Exit ...
mShowShortExit2Line
//
);
result = mHandler != INVALID_HANDLE;
//
return result;
}
//
// Retrieve Current Config ...
XCHEInputs GetConfig()
{
//
XCHEInputs result;
//
result.length = mLength;
result.loopback = mLoopback;
result.multiplier1 = mMultiplier1;
result.multiplier2 = mMultiplier2;
result.upAppliedTo = mUpAppliedTo;
result.downAppliedTo = mDownAppliedTo;
result.showLongExit1Line = mShowLongExit1Line;
result.showShortExit1Line = mShowShortExit1Line;
result.showLongExit2Line = mShowLongExit2Line;
result.showShortExit2Line = mShowShortExit2Line;
//
return result;
}
//
// Set Config ...
bool SetConfig(XCHEInputs &config)
{
//
bool result = false;
//
mLength = config.length;
mLoopback = config.loopback;
mMultiplier1 = config.multiplier1;
mMultiplier2 = config.multiplier2;
mUpAppliedTo = config.upAppliedTo;
mDownAppliedTo = config.downAppliedTo;
mShowLongExit1Line = config.showLongExit1Line;
mShowShortExit1Line = config.showShortExit1Line;
mShowLongExit2Line = config.showLongExit2Line;
mShowShortExit2Line = config.showShortExit2Line;
//
result = Init();
//
return result;
}
//
// Reading Buffers based on Given Bar Index ...
virtual void Calculate(
int barIndex // Given Bar Index
)
{
//
// LEVEL 1 ..
//
// LONG Exit ...
ArraySetAsSeries(longExit1Buffer, true);
CopyBuffer(
mHandler,
XCHE_1ST_LONG_EXIT_LINE,
barIndex,
mLoopbackBars,
longExit1Buffer);
//
// SHORT Exit ...
ArraySetAsSeries(shortExit1Buffer, true);
CopyBuffer(
mHandler,
XCHE_1ST_SHORT_EXIT_LINE,
barIndex,
mLoopbackBars,
shortExit1Buffer);
//
// LEVEL 2 ..
//
// LONG Exit ...
ArraySetAsSeries(longExit2Buffer, true);
CopyBuffer(
mHandler,
XCHE_2ND_LONG_EXIT_LINE,
barIndex,
mLoopbackBars,
longExit2Buffer);
//
// SHORT Exit ...
ArraySetAsSeries(shortExit2Buffer, true);
CopyBuffer(
mHandler,
XCHE_2ND_SHORT_EXIT_LINE,
barIndex,
mLoopbackBars,
shortExit2Buffer);
}
//
// Retrieve Info at Specific Bar Index ...
XCHEInfo GetInfo(
int barIndex // Given Bar Index
)
{
//
XCHEInfo result;
//
if (barIndex < 0)
{
barIndex = 0;
}
//
// Do Calculations ...
Calculate(barIndex);
//
// Generate Candle Time ...
datetime barTime = GetCandleTime(
mSymbol,
mPeriod,
barIndex);
//
// Fill Result ...
result.symbol = mSymbol;
result.period = mPeriod;
result.barTime = barTime;
result.barIndex = barIndex;
//
double longExit1 = longExit1Buffer[barIndex];
double longExit1Prev = longExit1Buffer[barIndex + 1];
double shortExit1 = shortExit1Buffer[barIndex];
double shortExit1Prev = shortExit1Buffer[barIndex + 1];
//
double longExit2 = longExit2Buffer[barIndex];
double longExit2Prev = longExit2Buffer[barIndex + 1];
double shortExit2 = shortExit2Buffer[barIndex];
double shortExit2Prev = shortExit2Buffer[barIndex + 1];
//
Copy(
longExit1Buffer,
result.le1);
Copy(
longExit2Buffer,
result.le2);
//
Copy(
shortExit1Buffer,
result.se1);
Copy(
shortExit2Buffer,
result.se2);
//
result.longExit1 = longExit1;
result.shortExit1 = shortExit1;
result.longExit2 = longExit2;
result.shortExit2 = shortExit2;
//
result.isLongExit1Start =
longExit1 != EMPTY_VALUE &&
longExit1Prev == EMPTY_VALUE;
//
result.isShortExit1Start =
shortExit1 != EMPTY_VALUE &&
shortExit1Prev == EMPTY_VALUE;
//
result.isLongExit2Start =
longExit2 != EMPTY_VALUE &&
longExit2Prev == EMPTY_VALUE;
//
result.isShortExit2Start =
shortExit2 != EMPTY_VALUE &&
shortExit2Prev == EMPTY_VALUE;
//
return result;
}
//
// END Provided Functions ...
//
//
// Protected ...
protected:
//
// Private ...
private:
//
// Indicator Properties ...
//
// Market ...
//
// Length ...
int mLength;
//
// Loopback ...
int mLoopback;
//
// 1st Multiplier ...
double mMultiplier1;
//
// 2nd Multiplier ...
double mMultiplier2;
//
// Calculation ...
//
// Up Zone Applied to ...
ENUM_APPLIED_PRICE mUpAppliedTo;
//
// Down Zone Applied to ...
ENUM_APPLIED_PRICE mDownAppliedTo;
//
// Presentation ...
//
// Show 1st Long Exit ...
bool mShowLongExit1Line;
//
// Show 1st Short Exit ...
bool mShowShortExit1Line;
//
// Show 2st Long Exit ...
bool mShowLongExit2Line;
//
// Show 2st Short Exit ...
bool mShowShortExit2Line;
};
//
// START Usefull Functions ...
//
//
// END Usefull Functions ...
//