Last Works ...
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -369,21 +369,39 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Trigger ...
|
// Trigger ...
|
||||||
ENUM_XPOI_EVENTS triggerPOIEvents[];
|
ENUM_XPOI_EVENTS mTriggerEvents[];
|
||||||
mTriggerPOIDetector.Update(triggerPOIEvents);
|
mTriggerDetector.Update(mTriggerEvents);
|
||||||
mTriggerPOIDetector.GetState(mTriggerPOIState);
|
mTriggerDetector.GetState(mTriggerState);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Decision ...
|
||||||
|
ENUM_XPOI_EVENTS mDecisionEvents[];
|
||||||
|
mDecisionDetector.Update(mDecisionEvents);
|
||||||
|
mDecisionDetector.GetState(mDecisionState);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Analyse ...
|
// Analyse ...
|
||||||
ENUM_XPOI_EVENTS analysePOIEvents[];
|
ENUM_XPOI_EVENTS mAnalyseEvents[];
|
||||||
mAnalysePOIDetector.Update(analysePOIEvents);
|
mAnalyseDetector.Update(mAnalyseEvents);
|
||||||
mAnalysePOIDetector.GetState(mAnalysePOIState);
|
mAnalyseDetector.GetState(mAnalyseState);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Trigger ...
|
// Verification ...
|
||||||
ENUM_XPOI_EVENTS visionPOIEvents[];
|
ENUM_XPOI_EVENTS mVerificationEvents[];
|
||||||
mVisionPOIDetector.Update(visionPOIEvents);
|
mVerificationDetector.Update(mVerificationEvents);
|
||||||
mVisionPOIDetector.GetState(mVisionPOIState);
|
mVerificationDetector.GetState(mVerificationState);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Consolidation ...
|
||||||
|
ENUM_XPOI_EVENTS mConsolidationEvents[];
|
||||||
|
mConsolidationDetector.Update(mConsolidationEvents);
|
||||||
|
mConsolidationDetector.GetState(mConsolidationState);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Vision ...
|
||||||
|
ENUM_XPOI_EVENTS mVisionEvents[];
|
||||||
|
mVisionDetector.Update(mVisionEvents);
|
||||||
|
mVisionDetector.GetState(mVisionState);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check Current Processing Tick has Signal or not ...
|
// Check Current Processing Tick has Signal or not ...
|
||||||
@@ -474,14 +492,20 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Point Of Interests ...
|
// Point Of Interests ...
|
||||||
XCPOIDetector *mTriggerPOIDetector;
|
XCPOIDetector *mVisionDetector;
|
||||||
XCPOIDetector *mAnalysePOIDetector;
|
XCPOIDetector *mConsolidationDetector;
|
||||||
XCPOIDetector *mVisionPOIDetector;
|
XCPOIDetector *mVerificationDetector;
|
||||||
|
XCPOIDetector *mAnalyseDetector;
|
||||||
|
XCPOIDetector *mDecisionDetector;
|
||||||
|
XCPOIDetector *mTriggerDetector;
|
||||||
|
|
||||||
//
|
//
|
||||||
XPOIState mTriggerPOIState;
|
XPOIState mVisionState;
|
||||||
XPOIState mAnalysePOIState;
|
XPOIState mConsolidationState;
|
||||||
XPOIState mVisionPOIState;
|
XPOIState mVerificationState;
|
||||||
|
XPOIState mAnalyseState;
|
||||||
|
XPOIState mDecisionState;
|
||||||
|
XPOIState mTriggerState;
|
||||||
|
|
||||||
//
|
//
|
||||||
XCPOIDrawer *mPOIDrawer; // POI Drawer Class ...
|
XCPOIDrawer *mPOIDrawer; // POI Drawer Class ...
|
||||||
@@ -1522,32 +1546,58 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Trigger ...
|
// Trigger ...
|
||||||
mTriggerPOIDetector = new XCPOIDetector(
|
mTriggerDetector = new XCPOIDetector(
|
||||||
symbol,
|
symbol,
|
||||||
period //
|
PERIOD_M1 //
|
||||||
);
|
);
|
||||||
mTriggerPOIDetector.MaxNumberOfRequiredPOIs(poiRequired);
|
mTriggerDetector.MaxNumberOfRequiredPOIs(poiRequired);
|
||||||
mTriggerPOIDetector.Init();
|
mTriggerDetector.Init();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Decision ...
|
||||||
|
mDecisionDetector = new XCPOIDetector(
|
||||||
|
symbol,
|
||||||
|
PERIOD_M5 //
|
||||||
|
);
|
||||||
|
mDecisionDetector.MaxNumberOfRequiredPOIs(poiRequired);
|
||||||
|
mDecisionDetector.Init();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Analyse ...
|
// Analyse ...
|
||||||
ENUM_TIMEFRAMES analysePeriod = GetAnalysePeriod(period);
|
mAnalyseDetector = new XCPOIDetector(
|
||||||
mAnalysePOIDetector = new XCPOIDetector(
|
|
||||||
symbol,
|
symbol,
|
||||||
analysePeriod //
|
PERIOD_M15 //
|
||||||
);
|
);
|
||||||
mAnalysePOIDetector.MaxNumberOfRequiredPOIs(poiRequired);
|
mAnalyseDetector.MaxNumberOfRequiredPOIs(poiRequired);
|
||||||
mAnalysePOIDetector.Init();
|
mAnalyseDetector.Init();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Verification ...
|
||||||
|
mVerificationDetector = new XCPOIDetector(
|
||||||
|
symbol,
|
||||||
|
PERIOD_M30 //
|
||||||
|
);
|
||||||
|
mVerificationDetector.MaxNumberOfRequiredPOIs(poiRequired);
|
||||||
|
mVerificationDetector.Init();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Consolidation ...
|
||||||
|
mConsolidationDetector = new XCPOIDetector(
|
||||||
|
symbol,
|
||||||
|
PERIOD_H1 //
|
||||||
|
);
|
||||||
|
mConsolidationDetector.MaxNumberOfRequiredPOIs(poiRequired);
|
||||||
|
mConsolidationDetector.Init();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Vision ...
|
// Vision ...
|
||||||
ENUM_TIMEFRAMES visionPeriod = GetVisionPeriod(period);
|
mVisionDetector = new XCPOIDetector(
|
||||||
mVisionPOIDetector = new XCPOIDetector(
|
|
||||||
symbol,
|
symbol,
|
||||||
visionPeriod //
|
PERIOD_H4 //
|
||||||
);
|
);
|
||||||
mVisionPOIDetector.MaxNumberOfRequiredPOIs(poiRequired);
|
mVisionDetector.MaxNumberOfRequiredPOIs(poiRequired);
|
||||||
mVisionPOIDetector.Init();
|
mVisionDetector.Init();
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
@@ -1558,9 +1608,12 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
|||||||
void DeInit()
|
void DeInit()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
delete mTriggerPOIDetector;
|
delete mVisionDetector;
|
||||||
delete mAnalysePOIDetector;
|
delete mConsolidationDetector;
|
||||||
delete mVisionPOIDetector;
|
delete mVerificationDetector;
|
||||||
|
delete mAnalyseDetector;
|
||||||
|
delete mDecisionDetector;
|
||||||
|
delete mTriggerDetector;
|
||||||
|
|
||||||
//
|
//
|
||||||
delete mPOIDrawer;
|
delete mPOIDrawer;
|
||||||
|
|||||||
@@ -0,0 +1,468 @@
|
|||||||
|
///////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -426,8 +426,9 @@ struct XPVPivot
|
|||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
// Model Signalling Conditions ...
|
// Each Market Cycle (Time Frame) Conditions
|
||||||
struct X121SMCStrategyConditions
|
// Model as this Structure ...
|
||||||
|
struct X121SMCCycleConditions
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
string symbol;
|
string symbol;
|
||||||
@@ -440,6 +441,9 @@ struct X121SMCStrategyConditions
|
|||||||
X3VWAPConditions x3vwapConditions;
|
X3VWAPConditions x3vwapConditions;
|
||||||
XCHSARConditions xchsarConditions;
|
XCHSARConditions xchsarConditions;
|
||||||
|
|
||||||
|
//
|
||||||
|
XPOIState state;
|
||||||
|
|
||||||
//
|
//
|
||||||
void X121SMCStrategyConditions()
|
void X121SMCStrategyConditions()
|
||||||
{
|
{
|
||||||
@@ -460,9 +464,11 @@ struct X121SMCStrategyConditions
|
|||||||
time = NULL;
|
time = NULL;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
state.Clean();
|
||||||
xpvConditions.Clean();
|
xpvConditions.Clean();
|
||||||
x3maConditions.Clean();
|
x3maConditions.Clean();
|
||||||
x3vwapConditions.Clean();
|
x3vwapConditions.Clean();
|
||||||
|
xchsarConditions.Clean();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -479,6 +485,96 @@ struct X121SMCStrategyConditions
|
|||||||
result = IsSpecifiedValid(symbol) &&
|
result = IsSpecifiedValid(symbol) &&
|
||||||
IsSpecifiedValid(period) &&
|
IsSpecifiedValid(period) &&
|
||||||
IsSpecifiedValid(time);
|
IsSpecifiedValid(time);
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Cycle Conditions Has Bullish State ...
|
||||||
|
*
|
||||||
|
* @param bar: XOHCL instance ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsBullish(
|
||||||
|
XOHCL &bar //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
int index = bar.Index();
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
// Check Conditions Validation ...
|
||||||
|
IsValid() &&
|
||||||
|
//
|
||||||
|
// Check Bar Validation ...
|
||||||
|
bar.IsValid() &&
|
||||||
|
//
|
||||||
|
// Check XCHSar Current is Bullish ...
|
||||||
|
xchsarConditions.isCBullish &&
|
||||||
|
//
|
||||||
|
// Check X3VWAP is Bullish State ...
|
||||||
|
x3vwapConditions.isBullishState &&
|
||||||
|
//
|
||||||
|
// Check X3VWAP is Bullish Ordered ...
|
||||||
|
x3vwapConditions.isBullishOrdered &&
|
||||||
|
//
|
||||||
|
// Check Close Over X3MA Fast ...
|
||||||
|
bar.close > x3maConditions.fasts[index]
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Cycle Conditions Has Bearish State ...
|
||||||
|
*
|
||||||
|
* @param bar: XOHCL instance ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsBearish(
|
||||||
|
XOHCL &bar //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
int index = bar.Index();
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
// Check Conditions Validation ...
|
||||||
|
IsValid() &&
|
||||||
|
//
|
||||||
|
// Check Bar Validation ...
|
||||||
|
bar.IsValid() &&
|
||||||
|
//
|
||||||
|
// Check XCHSar Current is Bearish ...
|
||||||
|
xchsarConditions.isCBearish &&
|
||||||
|
//
|
||||||
|
// Check X3VWAP is Bearish State ...
|
||||||
|
x3vwapConditions.isBearishState &&
|
||||||
|
//
|
||||||
|
// Check X3VWAP is Bearish Ordered ...
|
||||||
|
x3vwapConditions.isBearishOrdered &&
|
||||||
|
//
|
||||||
|
// Check Close Under X3MA Fast ...
|
||||||
|
bar.close < x3maConditions.fasts[index]
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
@@ -611,15 +707,18 @@ struct X121SMCStrategyConditions
|
|||||||
//
|
//
|
||||||
string result = NULL;
|
string result = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
string typeName = GetTypeName(this);
|
||||||
|
|
||||||
//
|
//
|
||||||
if (!forObject)
|
if (!forObject)
|
||||||
{
|
{
|
||||||
result = X121SMCStrategyToken;
|
result = typeName;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
result = X121SMCStrategyToken + "_" +
|
result = typeName + "_" +
|
||||||
symbol + "_" + ToString(period) + "_" +
|
symbol + "_" + ToString(period) + "_" +
|
||||||
ToMD5(time);
|
ToMD5(time);
|
||||||
}
|
}
|
||||||
@@ -631,160 +730,398 @@ struct X121SMCStrategyConditions
|
|||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Model Signalling Conditions ...
|
||||||
|
struct X121SMCStrategyConditions
|
||||||
|
{
|
||||||
|
//
|
||||||
|
string symbol;
|
||||||
|
ENUM_TIMEFRAMES period;
|
||||||
|
datetime time;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cycles Conditions here ...
|
||||||
|
X121SMCCycleConditions triggerConditions;
|
||||||
|
X121SMCCycleConditions decisionConditions;
|
||||||
|
X121SMCCycleConditions analyseConditions;
|
||||||
|
X121SMCCycleConditions verificationConditions;
|
||||||
|
X121SMCCycleConditions consolidationConditions;
|
||||||
|
X121SMCCycleConditions visionConditions;
|
||||||
|
|
||||||
|
//
|
||||||
|
void X121SMCStrategyConditions()
|
||||||
|
{
|
||||||
|
Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tools ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleanup ...
|
||||||
|
*/
|
||||||
|
void Clean()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
symbol = NULL;
|
||||||
|
period = NULL;
|
||||||
|
time = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
triggerConditions.Clean();
|
||||||
|
decisionConditions.Clean();
|
||||||
|
analyseConditions.Clean();
|
||||||
|
verificationConditions.Clean();
|
||||||
|
consolidationConditions.Clean();
|
||||||
|
visionConditions.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsValid()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = IsSpecifiedValid(symbol) &&
|
||||||
|
IsSpecifiedValid(period) &&
|
||||||
|
IsSpecifiedValid(time);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HasDirection(
|
||||||
|
ENUM_X_DIRECTION &dir,
|
||||||
|
XOHCL &bar //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
dir = X_DIRECTION_NONE;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = IsValid() &&
|
||||||
|
bar.IsValid() &&
|
||||||
|
bar.Index() > 0;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int index = bar.Index();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Parse Cycles Conditions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Vision ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isVisionBullish =
|
||||||
|
//
|
||||||
|
// XCHSar Current is Bullish ...
|
||||||
|
visionConditions.xchsarConditions.isCBullish &&
|
||||||
|
//
|
||||||
|
// Close Over X3MA Fast ...
|
||||||
|
bar.close > visionConditions.x3maConditions.fasts[index] &&
|
||||||
|
//
|
||||||
|
// X3VWap Fast is Bullish ...
|
||||||
|
visionConditions.x3vwapConditions.fastStates[index] ==
|
||||||
|
X3VWAP_STATE_BULLISH
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isVisionBearish =
|
||||||
|
//
|
||||||
|
// XCHSar Current is Bearish ...
|
||||||
|
visionConditions.xchsarConditions.isCBearish &&
|
||||||
|
//
|
||||||
|
// Close Under X3MA Fast ...
|
||||||
|
bar.close < visionConditions.x3maConditions.fasts[index] &&
|
||||||
|
//
|
||||||
|
// X3VWap Fast is Bearish ...
|
||||||
|
visionConditions.x3vwapConditions.fastStates[index] ==
|
||||||
|
X3VWAP_STATE_BEARISH
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Vision Has Conditions or not ...
|
||||||
|
bool hasVisionConditions =
|
||||||
|
isVisionBullish ||
|
||||||
|
isVisionBearish;
|
||||||
|
result = hasVisionConditions;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Consolidation ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isConsolidationBullish = consolidationConditions.IsBullish(bar);
|
||||||
|
bool isConsolidationBearish = consolidationConditions.IsBearish(bar);
|
||||||
|
bool hasConsolidationConditions =
|
||||||
|
isConsolidationBullish ||
|
||||||
|
isConsolidationBearish;
|
||||||
|
result = hasConsolidationConditions;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Verification ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isVerificationBullish = verificationConditions.IsBullish(bar);
|
||||||
|
bool isVerificationBearish = verificationConditions.IsBearish(bar);
|
||||||
|
bool hasVerificationConditions =
|
||||||
|
isVerificationBullish ||
|
||||||
|
isVerificationBearish;
|
||||||
|
result = hasVerificationConditions;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Analyse ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isAnalyseBullish = analyseConditions.IsBullish(bar);
|
||||||
|
bool isAnalyseBearish = analyseConditions.IsBearish(bar);
|
||||||
|
bool hasAnalyseConditions =
|
||||||
|
isAnalyseBullish ||
|
||||||
|
isAnalyseBearish;
|
||||||
|
result = hasAnalyseConditions;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Decision ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isDecisionBullish = decisionConditions.IsBullish(bar);
|
||||||
|
bool isDecisionBearish = decisionConditions.IsBearish(bar);
|
||||||
|
bool hasDecisionConditions =
|
||||||
|
isDecisionBullish ||
|
||||||
|
isDecisionBearish;
|
||||||
|
result = hasDecisionConditions;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Analyse Conditions ...
|
||||||
|
bool hasBullishConditions =
|
||||||
|
//
|
||||||
|
isVisionBullish &&
|
||||||
|
isConsolidationBullish &&
|
||||||
|
isVerificationBullish &&
|
||||||
|
isAnalyseBullish &&
|
||||||
|
isDecisionBullish
|
||||||
|
//
|
||||||
|
;
|
||||||
|
bool hasBearishConditions =
|
||||||
|
//
|
||||||
|
isVisionBearish &&
|
||||||
|
isConsolidationBearish &&
|
||||||
|
isVerificationBearish &&
|
||||||
|
isAnalyseBearish &&
|
||||||
|
isDecisionBearish
|
||||||
|
//
|
||||||
|
;
|
||||||
|
result = hasBullishConditions ||
|
||||||
|
hasBearishConditions;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Specified Conditions Direction ...
|
||||||
|
dir =
|
||||||
|
hasBullishConditions
|
||||||
|
? X_DIRECTION_BULLISH
|
||||||
|
: X_DIRECTION_BEARISH;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Reporter Functions ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate Provided Scores ...
|
||||||
|
*
|
||||||
|
* @param bullishScore: Integer, reference ...
|
||||||
|
* @param bearishScore: Integer, referenceF ...
|
||||||
|
*/
|
||||||
|
void GenerateScore(
|
||||||
|
double &bullishScore,
|
||||||
|
double &bearishScore //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bullishScore = 0;
|
||||||
|
bearishScore = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double bullScore = 0;
|
||||||
|
double bearScore = 0;
|
||||||
|
|
||||||
|
// //
|
||||||
|
// // XPV ...
|
||||||
|
// pvConditions.GenerateScore(
|
||||||
|
// bullScore,
|
||||||
|
// bearScore //
|
||||||
|
// );
|
||||||
|
// bullishScore += bullScore;
|
||||||
|
// bearishScore += bearScore;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate Summary ...
|
||||||
|
*
|
||||||
|
* @param onlyCommons: Boolean ...
|
||||||
|
* @param onlyConditions: Boolean ...
|
||||||
|
* @param includeScores: Boolean ...
|
||||||
|
* @param ignoreFalseConditions: Boolean ...
|
||||||
|
* @param separator: String ...
|
||||||
|
*
|
||||||
|
* @return ( string )
|
||||||
|
*/
|
||||||
|
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 commonStr = GenerateSpecifiedCommonSummary(
|
||||||
|
this,
|
||||||
|
separator,
|
||||||
|
includeScores,
|
||||||
|
true //
|
||||||
|
);
|
||||||
|
|
||||||
|
// //
|
||||||
|
// // XPV ...
|
||||||
|
// string pvStr = pvConditions.GenerateSummary(
|
||||||
|
// false,
|
||||||
|
// true,
|
||||||
|
// false,
|
||||||
|
// ignoreFalseConditions //
|
||||||
|
// );
|
||||||
|
|
||||||
|
//
|
||||||
|
string conditionsStr =
|
||||||
|
//
|
||||||
|
// pvStr + separator +
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
"[" + GetTag() + "]" + separator +
|
||||||
|
"----------" + separator +
|
||||||
|
(onlyConditions
|
||||||
|
? ""
|
||||||
|
: commonStr) +
|
||||||
|
" " + separator +
|
||||||
|
(onlyCommons
|
||||||
|
? ""
|
||||||
|
: conditionsStr) +
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Unique Identifier ...
|
||||||
|
*
|
||||||
|
* @param forObject: Boolean ...
|
||||||
|
*
|
||||||
|
* @return ( string )
|
||||||
|
*/
|
||||||
|
string GetTag(
|
||||||
|
bool forObject = false //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
string result = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
string typeName = GetTypeName(this);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!forObject)
|
||||||
|
{
|
||||||
|
result = typeName;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = typeName + "_" +
|
||||||
|
symbol + "_" + ToString(period) + "_" +
|
||||||
|
ToMD5(time);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
typedef void (*TOnX121SMCSignal)(
|
typedef void (*TOnX121SMCSignal)(
|
||||||
XSignal &signal,
|
XSignal &signal,
|
||||||
X121SMCStrategyConditions &conditions //
|
X121SMCStrategyConditions &conditions //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
|
||||||
// Time Frames Tools ...
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate Analyse Period ...
|
|
||||||
*
|
|
||||||
* @param value: ENUM_TIMEFRAMES member, Specified Trigger Period ...
|
|
||||||
*
|
|
||||||
* @return ( ENUM_TIMEFRAMES )
|
|
||||||
*/
|
|
||||||
ENUM_TIMEFRAMES GetAnalysePeriod(ENUM_TIMEFRAMES value)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
ENUM_TIMEFRAMES result = NULL;
|
|
||||||
|
|
||||||
//
|
|
||||||
value = NormalizePeriod(value);
|
|
||||||
|
|
||||||
//
|
|
||||||
switch (value)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
case PERIOD_M1:
|
|
||||||
case PERIOD_M2:
|
|
||||||
case PERIOD_M3:
|
|
||||||
case PERIOD_M4:
|
|
||||||
case PERIOD_M5:
|
|
||||||
case PERIOD_M6:
|
|
||||||
case PERIOD_M10:
|
|
||||||
case PERIOD_M12:
|
|
||||||
result = PERIOD_M15;
|
|
||||||
break;
|
|
||||||
|
|
||||||
//
|
|
||||||
case PERIOD_M15:
|
|
||||||
case PERIOD_M20:
|
|
||||||
result = PERIOD_M30;
|
|
||||||
break;
|
|
||||||
|
|
||||||
//
|
|
||||||
case PERIOD_H1:
|
|
||||||
case PERIOD_H2:
|
|
||||||
case PERIOD_H3:
|
|
||||||
result = PERIOD_H4;
|
|
||||||
break;
|
|
||||||
|
|
||||||
//
|
|
||||||
case PERIOD_H4:
|
|
||||||
case PERIOD_H6:
|
|
||||||
case PERIOD_H8:
|
|
||||||
result = PERIOD_H12;
|
|
||||||
break;
|
|
||||||
|
|
||||||
//
|
|
||||||
default:
|
|
||||||
result = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
bool HasValidAnalysePeriod(
|
|
||||||
ENUM_TIMEFRAMES value,
|
|
||||||
ENUM_TIMEFRAMES &period //
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
period = GetAnalysePeriod(value);
|
|
||||||
result = IsValid(period);
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate Vision Period ...
|
|
||||||
*
|
|
||||||
* @param value: ENUM_TIMEFRAMES member, Specified Trigger Period ...
|
|
||||||
*
|
|
||||||
* @return ( ENUM_TIMEFRAMES )
|
|
||||||
*/
|
|
||||||
ENUM_TIMEFRAMES GetVisionPeriod(ENUM_TIMEFRAMES value)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
ENUM_TIMEFRAMES result = NULL;
|
|
||||||
|
|
||||||
//
|
|
||||||
value = NormalizePeriod(value);
|
|
||||||
|
|
||||||
//
|
|
||||||
switch (value)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
case PERIOD_M1:
|
|
||||||
case PERIOD_M2:
|
|
||||||
case PERIOD_M3:
|
|
||||||
case PERIOD_M4:
|
|
||||||
case PERIOD_M5:
|
|
||||||
case PERIOD_M6:
|
|
||||||
case PERIOD_M10:
|
|
||||||
case PERIOD_M12:
|
|
||||||
result = PERIOD_H1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
//
|
|
||||||
case PERIOD_M15:
|
|
||||||
case PERIOD_M20:
|
|
||||||
result = PERIOD_H2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
//
|
|
||||||
case PERIOD_H1:
|
|
||||||
case PERIOD_H2:
|
|
||||||
case PERIOD_H3:
|
|
||||||
result = PERIOD_H6;
|
|
||||||
break;
|
|
||||||
|
|
||||||
//
|
|
||||||
case PERIOD_H4:
|
|
||||||
case PERIOD_H6:
|
|
||||||
case PERIOD_H8:
|
|
||||||
result = PERIOD_D1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
//
|
|
||||||
default:
|
|
||||||
result = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
bool HasValidVisionPeriod(
|
|
||||||
ENUM_TIMEFRAMES value,
|
|
||||||
ENUM_TIMEFRAMES &period //
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
period = GetVisionPeriod(value);
|
|
||||||
result = IsValid(period);
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Extentions ...
|
// Extentions ...
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user