Files
MQL5Data/X121SMCEA/Classes/x-121.smc.market.cycle.helper.class.mq5
T
2024-11-28 07:16:23 +03:30

469 lines
11 KiB
Plaintext

///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class Library
// --------------------------------------
// Name: XC121SMCCycleHelper
// Description: provides all based classes for use ...
//
//
// 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-121.smc.lib.mq5"
//
// Definitions ...
//
// Implementations ...
class XC121SMCCycleHelper : public XCBase
{
//
public:
//
// Props ...
//
// XPV ...
XCXPVHelper *mXPVHelper;
//
// X3MA ...
XCX3MAHelper *mX3MAHelper;
//
// X3VWAP ...
XCX3VWAPHelper *mX3VWAPHelper;
//
// XCHSAR ...
XCXCHSARHelper *mXCHSARHelper;
//
// Constructor(s) ...
XC121SMCCycleHelper()
{
}
//
// Deconstructor ...
~XC121SMCCycleHelper()
{
DeInit();
}
//
// Getter/Setter(s) ...
//
// Actions ...
/**
* Initialize ...
*
* @param symbol: String ...
* @param period: ENUM_TIMEFRAMES member ...
* @param xpvInputs: XPVInputs instance ...
* @param x3maInputs: X3MAInputs instance ...
* @param x3vwapInputs: X3VWAPInputs instance ...
* @param xchsarInputs: XCHSARInputs instance ...
*
* @return ( bool )
*/
bool Init(
string symbol,
ENUM_TIMEFRAMES period,
XPVInputs &xpvInputs,
X3MAInputs &x3maInputs,
X3VWAPInputs &x3vwapInputs,
XCHSARInputs &xchsarInputs //
)
{
//
bool result = false;
//
result = IsValid(symbol) &&
IsValid(period);
if (!result)
{
return result;
}
//
// XPV ...
//
result = xpvInputs.IsValid();
if (!result)
{
return result;
}
//
mXPVHelper = new XCXPVHelper();
result = mXPVHelper.Init(
symbol,
period,
xpvInputs //
);
if (!result)
{
return result;
}
//
// X3MA ...
//
result = x3maInputs.IsValid();
if (!result)
{
return result;
}
//
mX3MAHelper = new XCX3MAHelper();
result = mX3MAHelper.Init(
symbol,
period,
x3maInputs //
);
if (!result)
{
return result;
}
//
// X3VWAP ...
//
result = x3vwapInputs.IsValid();
if (!result)
{
return result;
}
//
mX3VWAPHelper = new XCX3VWAPHelper();
result = mX3VWAPHelper.Init(
symbol,
period,
x3vwapInputs //
);
if (!result)
{
return result;
}
//
// XCHSAR ...
//
result = xchsarInputs.IsValid();
if (!result)
{
return result;
}
//
mXCHSARHelper = new XCXCHSARHelper();
result = mXCHSARHelper.Init(
symbol,
period,
xchsarInputs //
);
if (!result)
{
return result;
}
//
// Set Chart Style ...
ApplyChartStyle();
//
return result;
}
/**
* Retrieve Cycle Conditions ...
*
* @param conditions: X121SMCCycleConditions instance ...
* @param barIndex: Integer ...
* @param loopback: Integer ...
*
* @return ( bool )
*/
bool GetConditions(
X121SMCCycleConditions &conditions,
int barIndex = 0,
int loopback = 7 //
)
{
//
bool result = false;
//
if (barIndex < 0)
{
barIndex = 0;
}
//
if (loopback < 5)
{
loopback = 5;
}
//
conditions.Clean();
//
result = mXPVHelper.GetConditions(
conditions.xpvConditions,
barIndex,
loopback //
);
if (!result)
{
//
conditions.Clean();
return result;
}
//
result = mX3MAHelper.GetConditions(
conditions.x3maConditions,
barIndex,
loopback //
);
if (!result)
{
//
conditions.Clean();
return result;
}
//
result = mX3VWAPHelper.GetConditions(
conditions.x3vwapConditions,
barIndex,
loopback //
);
if (!result)
{
//
conditions.Clean();
return result;
}
//
result = mXCHSARHelper.GetConditions(
conditions.xchsarConditions,
barIndex,
loopback //
);
if (!result)
{
//
conditions.Clean();
return result;
}
//
conditions.symbol = conditions.xpvConditions.symbol;
conditions.period = conditions.xpvConditions.period;
conditions.time = TimeCurrent();
//
result = conditions.IsValid();
//
return result;
}
//
// POI Tools ...
/**
* Detect Nearest Current SAR Change ...
*
* @param changeBar: XOHCL instance, Holds Nearest Change Bar ...
* @param bar: XOHCL instance, represents Current Bar for Loopback ...
*
* @return ( bool )
*/
bool DetectNearestCSARChange(
XOHCL &changeBar,
XOHCL &bar //
)
{
//
bool result = false;
//
changeBar.Clean();
//
result =
bar.IsValid();
if (!result)
{
return result;
}
//
int barIndex = bar.Index();
double sar = mXCHSARHelper.GetC(barIndex);
bool isBullish = sar > 0 &&
sar < bar.low;
bool isBearish = sar > 0 &&
sar > bar.high;
result = isBullish ||
isBearish;
if (!result)
{
return result;
}
//
// Loop Back to Find Nearest Sar Change ...
bool canContinue = true;
while (canContinue)
{
//
barIndex++;
//
XOHCL iBar;
canContinue = iBar.Init(
bar.symbol,
bar.period,
barIndex //
);
if (!canContinue)
{
break;
}
//
double iSar = mXCHSARHelper.GetC(barIndex);
bool isISarBullish =
iSar > 0 &&
iSar < iBar.low;
bool isISarBearish =
iSar > 0 &&
iSar > iBar.high;
bool isSarChanged =
isBullish
? !isISarBullish
: !isISarBearish;
//
if (isSarChanged)
{
//
changeBar = iBar;
canContinue = false;
break;
}
}
//
result = changeBar.IsValid();
//
return result;
}
//
// Virtuals ...
//
protected:
//
//
private:
//
// Props ...
//
// Actions ...
/**
* Release All Resources ...
*/
void DeInit()
{
}
/**
* Apply Chart Style ...
*/
void ApplyChartStyle()
{
//
// Retrieve Current Chart ID ...
long chartId = ChartID();
//
ENUM_CHART_MODE mMode = CHART_CANDLES; // chart's mMode
bool mShowBidLine = true; // show bid line
bool mShowAskLine = true; // show ask line
bool mShowGrid = false; // show grids on chart
bool mShowVolumes = false; // show volumes
bool mShowTradeLevels = true; // Displaying trade levels in the chart (levels of open positions, Stop Loss, Take Profit and pending orders)
bool mAutoScroll = true; // chart autoscroll
bool mQuickNavigation = true; // chart quick navigation state
color mForeGroundColor = clrWhite; // chart's foreground color
color mBackGroundColor = clrBlack; // chart's background color
color mUpColor = clrGreen; // Up Color
color mDownColor = clrRed; // Down Color
color mBullishColor = clrGreen; // Bullish color
color mBearishColor = clrRed; // Bearish color
color mGridColor = clrGray; // grid color
color mBidLineColor = clrGray; // bid line color
color mAskLineColor = clrRed; // ask line color
color mLineColor = clrLime; // line mMode and doji candlestick color
color mStopColor = clrGold; // Color of stop order levels (Stop Loss and Take Profit)
color mVolumesColor = clrGreen; // volumes color
//
ChartSetInteger(chartId, CHART_MODE, mMode);
ChartSetInteger(chartId, CHART_SHOW_BID_LINE, mShowBidLine);
ChartSetInteger(chartId, CHART_SHOW_ASK_LINE, mShowAskLine);
ChartSetInteger(chartId, CHART_SHOW_GRID, mShowGrid);
ChartSetInteger(chartId, CHART_SHOW_VOLUMES, mShowVolumes);
ChartSetInteger(chartId, CHART_SHOW_TRADE_LEVELS, mShowTradeLevels);
ChartSetInteger(chartId, CHART_AUTOSCROLL, mAutoScroll);
ChartSetInteger(chartId, CHART_QUICK_NAVIGATION, mQuickNavigation);
ChartSetInteger(chartId, CHART_COLOR_FOREGROUND, mForeGroundColor);
ChartSetInteger(chartId, CHART_COLOR_BACKGROUND, mBackGroundColor);
ChartSetInteger(chartId, CHART_COLOR_CHART_UP, mUpColor);
ChartSetInteger(chartId, CHART_COLOR_CHART_DOWN, mDownColor);
ChartSetInteger(chartId, CHART_COLOR_CANDLE_BULL, mBullishColor);
ChartSetInteger(chartId, CHART_COLOR_CANDLE_BEAR, mBearishColor);
ChartSetInteger(chartId, CHART_COLOR_GRID, mGridColor);
ChartSetInteger(chartId, CHART_COLOR_BID, mBidLineColor);
ChartSetInteger(chartId, CHART_COLOR_ASK, mAskLineColor);
ChartSetInteger(chartId, CHART_COLOR_STOP_LEVEL, mStopColor);
ChartSetInteger(chartId, CHART_COLOR_CHART_LINE, mLineColor);
ChartSetInteger(chartId, CHART_COLOR_VOLUME, mVolumesColor);
}
};