289 lines
7.2 KiB
Plaintext
289 lines
7.2 KiB
Plaintext
#include "../Signals/x-121.smc.xobs.signal.lib.mq5"
|
|
|
|
bool useXOBSSignal;
|
|
useXOBSSignal = false;
|
|
|
|
bool hasXOBSSignal = false;
|
|
|
|
//
|
|
// XOBS Signal ...
|
|
if (useXOBSSignal && !hasSignal)
|
|
{
|
|
//
|
|
hasXOBSSignal = DetectXOBSSignal(conditions);
|
|
hasSignal = hasXOBSSignal;
|
|
}
|
|
|
|
Clean(mX121SMCXOBSConditionsCollection);
|
|
|
|
//
|
|
// XOBS Guard Detection ...
|
|
if (useXOBSSignal)
|
|
{
|
|
// //
|
|
// bool hasGuard = DetectX121SMCXOBSGuards(
|
|
// guards,
|
|
// positions,
|
|
// mTriggerCycleHelper,
|
|
// mDecisionCycleHelper,
|
|
// mAnalyseCycleHelper,
|
|
// mVerificationCycleHelper,
|
|
// mConsolidationCycleHelper,
|
|
// mVisionCycleHelper //
|
|
// );
|
|
}
|
|
|
|
//
|
|
// XOBS Signal ...
|
|
bool DetectXOBSSignal(
|
|
X121SMCStrategyConditions &conditions //
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
bool isBullish = false;
|
|
bool isBearish = false;
|
|
|
|
//
|
|
int zIndex = 0;
|
|
int cIndex = zIndex + 1;
|
|
int pIndex = cIndex + 1;
|
|
int ppIndex = pIndex + 1;
|
|
|
|
//
|
|
string symbol = GetSymbol();
|
|
ENUM_TIMEFRAMES period = GetPeriod();
|
|
|
|
//
|
|
XOHCL zBar;
|
|
result = zBar.Init(
|
|
symbol,
|
|
period,
|
|
zIndex //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
XOHCL cBar;
|
|
result = cBar.Init(
|
|
symbol,
|
|
period,
|
|
cIndex //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
XOHCL pBar;
|
|
result = pBar.Init(
|
|
symbol,
|
|
period,
|
|
pIndex //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
double cLL = cBar.FindLowest(7, MODE_LOW);
|
|
double cHH = cBar.FindHighest(7, MODE_HIGH);
|
|
|
|
//
|
|
datetime cTime = TimeCurrent();
|
|
|
|
//
|
|
ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_XOBS;
|
|
string providerStr = ToString(provider);
|
|
|
|
//
|
|
// Detect Setup Conditions ...
|
|
datetime setupTime = mX121SMCXOBSConditions.setupTime;
|
|
bool isSetuped = mX121SMCXOBSConditions.IsSetuped();
|
|
ENUM_X_DIRECTION setupDir = mX121SMCXOBSConditions.dir;
|
|
if (!isSetuped)
|
|
{
|
|
//
|
|
// Detect Signal Setup ...
|
|
// isSetuped = DetectX121SMCXOBSSignalSetup(
|
|
// symbol,
|
|
// period,
|
|
// mX121SMCXOBSConditions,
|
|
// mTriggerCycleHelper,
|
|
// mDecisionCycleHelper,
|
|
// mAnalyseCycleHelper,
|
|
// mVerificationCycleHelper,
|
|
// mConsolidationCycleHelper,
|
|
// mVisionCycleHelper //
|
|
// );
|
|
|
|
//
|
|
setupDir = mX121SMCXOBSConditions.dir;
|
|
setupTime = mX121SMCXOBSConditions.setupTime;
|
|
|
|
//
|
|
if (isSetuped)
|
|
{
|
|
//
|
|
int items = AddX121SMCXOBSConditionsIfNotExists(
|
|
mX121SMCXOBSConditions,
|
|
mX121SMCXOBSConditionsCollection //
|
|
);
|
|
|
|
//
|
|
mX121SMCXOBSConditions.Clean();
|
|
}
|
|
}
|
|
|
|
//
|
|
int conditionsCount = ArraySize(mX121SMCXOBSConditionsCollection);
|
|
result = IsValidSize(conditionsCount);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Looking For Conditions ...
|
|
int selectedIndex = 0;
|
|
X121SMCStrategyXOBSSignalConditions mTmpConditions[];
|
|
Copy(
|
|
mX121SMCXOBSConditionsCollection,
|
|
mTmpConditions //
|
|
);
|
|
X121SMCStrategyXOBSSignalConditions mConditions;
|
|
for (int i = 0; i < conditionsCount; i++)
|
|
{
|
|
//
|
|
// Check Triggers ...
|
|
bool canTrigger = mTmpConditions[i].CanTrigger();
|
|
datetime triggerTime = mTmpConditions[i].triggerTime;
|
|
if (!canTrigger)
|
|
{
|
|
//
|
|
// Detect Signal Trigger ...
|
|
// canTrigger = DetectX121SMCXOBSSignalTrigger(
|
|
// mTmpConditions[i],
|
|
// symbol,
|
|
// period,
|
|
// mTriggerCycleHelper,
|
|
// mDecisionCycleHelper,
|
|
// mAnalyseCycleHelper,
|
|
// mVerificationCycleHelper,
|
|
// mConsolidationCycleHelper,
|
|
// mVisionCycleHelper //
|
|
// );
|
|
|
|
//
|
|
result = canTrigger;
|
|
if (!result)
|
|
{
|
|
//
|
|
bool isISetuped = mTmpConditions[i].IsSetuped();
|
|
if (!isISetuped)
|
|
{
|
|
//
|
|
ArrayRemove(
|
|
mX121SMCXOBSConditionsCollection,
|
|
i,
|
|
1 //
|
|
);
|
|
}
|
|
continue;
|
|
}
|
|
|
|
//
|
|
triggerTime = mTmpConditions[i].triggerTime;
|
|
}
|
|
|
|
//
|
|
if (canTrigger)
|
|
{
|
|
//
|
|
selectedIndex = i;
|
|
mConditions = mTmpConditions[i];
|
|
break;
|
|
}
|
|
}
|
|
|
|
//
|
|
result = IsValid(mConditions.setupTime) &&
|
|
HasDirection(mConditions.dir);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Remove Selected Index from Main Collection ...
|
|
ArrayRemove(
|
|
mX121SMCXOBSConditionsCollection,
|
|
selectedIndex,
|
|
1 //
|
|
);
|
|
|
|
//
|
|
// Check Signal Direction ...
|
|
isBullish = IsBullish(mConditions.dir);
|
|
isBearish = IsBearish(mConditions.dir);
|
|
result = isBullish ||
|
|
isBearish;
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Issues Signal on Conditions ...
|
|
conditions.sl = mConditions.sl;
|
|
conditions.provider = providerStr;
|
|
conditions.signalDir = mConditions.dir;
|
|
conditions.target = mConditions.target;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
X_121_SMC_PROVIDER_XOBS,
|
|
|
|
|
|
//
|
|
case X_121_SMC_PROVIDER_XOBS:
|
|
result = X121SMCXOBSToken;
|
|
break;
|
|
|
|
else if (Contains(X121SMCXOBSToken, value))
|
|
{
|
|
result = X_121_SMC_PROVIDER_XOBS;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|