Complete XSMC SMPV Strategy and Prepare for Testing Phase 1 ...
This commit is contained in:
@@ -30,25 +30,25 @@
|
||||
//
|
||||
// Definitions ...
|
||||
|
||||
//
|
||||
const string X121SMCStrategyToken = "X121SMC";
|
||||
|
||||
const string X121SMCPVToken = "X121SMCPV";
|
||||
const string X121SMCBOSToken = "X121SMCBOS";
|
||||
const string X121SMCSARToken = "X121SMCSAR";
|
||||
const string X121SMCCHOCHToken = "X121SMCCHOCH";
|
||||
const string X121SMCPULLBKToken = "X121SMCPULLBK";
|
||||
//
|
||||
const string X121SMCSMPVToken = "X121SMCSMPV";
|
||||
const string X121SMCVWAPCToken = "X121SMCVWAPC";
|
||||
|
||||
//
|
||||
// X121 SMC Providers ...
|
||||
enum ENUM_X_121_SMC_PROVIDERS
|
||||
{
|
||||
//
|
||||
X_121_SMC_PROVIDER_NONE,
|
||||
X_121_SMC_PROVIDER_PV,
|
||||
X_121_SMC_PROVIDER_BOS,
|
||||
X_121_SMC_PROVIDER_SAR,
|
||||
X_121_SMC_PROVIDER_CHOCH,
|
||||
X_121_SMC_PROVIDER_PULLBK,
|
||||
X_121_SMC_PROVIDER_SMPV,
|
||||
X_121_SMC_PROVIDER_VWAPC,
|
||||
};
|
||||
|
||||
//
|
||||
// Pivot Types ...
|
||||
enum ENUM_XPV_PIVOTS
|
||||
{
|
||||
XPV_NONE,
|
||||
@@ -56,6 +56,8 @@ enum ENUM_XPV_PIVOTS
|
||||
XPV_VALE,
|
||||
};
|
||||
|
||||
//
|
||||
// Model a Pivot structure ...
|
||||
struct XPVPivot
|
||||
{
|
||||
//
|
||||
@@ -634,11 +636,12 @@ struct X121SMCStrategyConditions
|
||||
|
||||
//
|
||||
double sl;
|
||||
double tp;
|
||||
string provider;
|
||||
ENUM_X_DIRECTION signalDir;
|
||||
ENUM_X_DIRECTION marketStructureDir;
|
||||
|
||||
//
|
||||
|
||||
|
||||
//
|
||||
void X121SMCStrategyConditions()
|
||||
@@ -661,7 +664,9 @@ struct X121SMCStrategyConditions
|
||||
|
||||
//
|
||||
sl = 0;
|
||||
tp = 0;
|
||||
provider = NULL;
|
||||
signalDir = X_DIRECTION_NONE;
|
||||
marketStructureDir = X_DIRECTION_NONE;
|
||||
|
||||
//
|
||||
@@ -692,6 +697,64 @@ struct X121SMCStrategyConditions
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Conditions Has Valid Bullish Signal ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool HasBullishSignal()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
(sl > 0 ||
|
||||
tp > 0) &&
|
||||
IsValid() &&
|
||||
HasDirection(signalDir);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result =
|
||||
IsBullish(signalDir);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Conditions Has Valid Bearish Signal ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool HasBearishSignal()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
(sl > 0 ||
|
||||
tp > 0) &&
|
||||
IsValid() &&
|
||||
HasDirection(signalDir);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result =
|
||||
IsBearish(signalDir);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Reporter Functions ...
|
||||
|
||||
@@ -1769,28 +1832,13 @@ string ToString(ENUM_X_121_SMC_PROVIDERS value)
|
||||
switch (value)
|
||||
{
|
||||
//
|
||||
case X_121_SMC_PROVIDER_PV:
|
||||
result = X121SMCPVToken;
|
||||
case X_121_SMC_PROVIDER_SMPV:
|
||||
result = X121SMCSMPVToken;
|
||||
break;
|
||||
|
||||
//
|
||||
case X_121_SMC_PROVIDER_BOS:
|
||||
result = X121SMCBOSToken;
|
||||
break;
|
||||
|
||||
//
|
||||
case X_121_SMC_PROVIDER_SAR:
|
||||
result = X121SMCSARToken;
|
||||
break;
|
||||
|
||||
//
|
||||
case X_121_SMC_PROVIDER_CHOCH:
|
||||
result = X121SMCCHOCHToken;
|
||||
break;
|
||||
|
||||
//
|
||||
case X_121_SMC_PROVIDER_PULLBK:
|
||||
result = X121SMCPULLBKToken;
|
||||
case X_121_SMC_PROVIDER_VWAPC:
|
||||
result = X121SMCVWAPCToken;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1817,208 +1865,14 @@ ENUM_X_121_SMC_PROVIDERS ParseProvider(string value)
|
||||
}
|
||||
|
||||
//
|
||||
if (Contains(X121SMCPVToken, value))
|
||||
if (Contains(X121SMCSMPVToken, value))
|
||||
{
|
||||
result = X_121_SMC_PROVIDER_PV;
|
||||
result = X_121_SMC_PROVIDER_SMPV;
|
||||
}
|
||||
else if (Contains(X121SMCBOSToken, value))
|
||||
else if (Contains(X121SMCVWAPCToken, value))
|
||||
{
|
||||
result = X_121_SMC_PROVIDER_BOS;
|
||||
result = X_121_SMC_PROVIDER_VWAPC;
|
||||
}
|
||||
else if (Contains(X121SMCSARToken, value))
|
||||
{
|
||||
result = X_121_SMC_PROVIDER_SAR;
|
||||
}
|
||||
else if (Contains(X121SMCCHOCHToken, value))
|
||||
{
|
||||
result = X_121_SMC_PROVIDER_CHOCH;
|
||||
}
|
||||
else if (Contains(X121SMCPULLBKToken, value))
|
||||
{
|
||||
result = X_121_SMC_PROVIDER_PULLBK;
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Model Value Changed ...
|
||||
struct XValueChange
|
||||
{
|
||||
//
|
||||
// Props ...
|
||||
double before; // Before Change Value ...
|
||||
double after; // After Change Value ...
|
||||
datetime time; // Change Time ...
|
||||
ENUM_X_DIRECTION dir; // Change Direction ...
|
||||
|
||||
//
|
||||
// Constructor ...
|
||||
XValueChange()
|
||||
{
|
||||
Clean();
|
||||
}
|
||||
|
||||
//
|
||||
// Tools ...
|
||||
|
||||
/**
|
||||
* Initialize ...
|
||||
*
|
||||
* @param _before: Double, Value Before Change ...
|
||||
* @param _after: Double, Value After Change ...
|
||||
* @param _time: Datetime, Change Time ...
|
||||
* @param _dir: ENUM_X_DIRECTION member, Specified Changed Direction ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool Init(
|
||||
double _before, // Before Change Value ...
|
||||
double _after, // After Change Value ...
|
||||
ENUM_X_DIRECTION _dir, // Change Direction ...
|
||||
datetime _time = NULL // Change Time ...
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
_time = NormalizeTime(_time);
|
||||
|
||||
//
|
||||
// Validate Inputs ...
|
||||
result =
|
||||
//
|
||||
_after > 0 &&
|
||||
_before > 0 &&
|
||||
IsValid(_time) &&
|
||||
_after != _before &&
|
||||
HasDirection(_dir)
|
||||
//
|
||||
;
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Set Validated Values ...
|
||||
dir = _dir;
|
||||
time = _time;
|
||||
after = _after;
|
||||
before = _before;
|
||||
|
||||
//
|
||||
result = IsValid();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleaning Up ...
|
||||
*/
|
||||
void Clean()
|
||||
{
|
||||
//
|
||||
after = 0;
|
||||
before = 0;
|
||||
time = NULL;
|
||||
dir = X_DIRECTION_NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate Model ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool IsValid()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
after > 0 &&
|
||||
before > 0 &&
|
||||
IsValid(time) &&
|
||||
after != before &&
|
||||
HasDirection(dir)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
};
|
||||
|
||||
/**
|
||||
* Add Value Change instance to Exists Collection if it's not Exists ...
|
||||
*
|
||||
* @param item: XValueChange instance Reference ...
|
||||
* @param items: XValueChange instance Array Reference ...
|
||||
*
|
||||
* @return ( int )
|
||||
*/
|
||||
int AddIfNotExists(
|
||||
XValueChange &item,
|
||||
XValueChange &items[] //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
result = item.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool canAdd = false;
|
||||
int count = ArraySize(items);
|
||||
if (!IsValidSize(count))
|
||||
{
|
||||
canAdd = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
XValueChange last;
|
||||
bool hasItem = GetLastItem(
|
||||
last,
|
||||
items //
|
||||
);
|
||||
if (!hasItem)
|
||||
{
|
||||
canAdd = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// Compare Last Item with Current ...
|
||||
canAdd = item.time > last.time;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Add Item if Allowed ...
|
||||
if (canAdd)
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
item,
|
||||
items //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(items);
|
||||
|
||||
//
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user