This commit is contained in:
2024-04-23 19:21:28 +03:30
parent c09303b012
commit f7220e8886
@@ -0,0 +1,260 @@
//
// Here we are Capture Conditions and Check Signals ...
// The Signals Must be Unique for each providers ...
bool ProcessSignals(X121MarketConditions &conditions)
{
//
X121MarketConditions mConditions = GetMarketConditions(1);
//
// BUY ...
//
Clean(mConditions.signal);
bool hasLongSignal = HasLongSignal(mConditions);
if (hasLongSignal)
{
//
NotifyOnSignalEvent(
mConditions.signal);
NotifyOnSignalConditionsEvent(mConditions);
mWaitUntilNewCandle = true;
//
conditions = mConditions;
return true;
}
//
// SELL ...
//
Clean(mConditions.signal);
bool hasShortignal = HasShortSignal(mConditions);
if (hasShortignal)
{
//
NotifyOnSignalEvent(
mConditions.signal);
NotifyOnSignalConditionsEvent(mConditions);
mWaitUntilNewCandle = true;
//
conditions = mConditions;
return true;
}
//
return false;
}
//
// Check has Long Signal on Each Strategies ...
bool HasLongSignal(X121MarketConditions &conditions)
{
//
bool result = false;
//
double entry = GetEntry(
mSymbol,
POSITION_TYPE_BUY);
//
XOHCL c1 = GetCandle(
mSymbol,
mPeriod,
1);
//
double pivots[];
FillPivotPoints(pivots);
XOHCLSupRes supRes = ExtractSupportAndResistance(
1,
pivots,
15);
X121MarketConditions mConditions = GetMarketConditions(1);
//
mXPVHelper.Calculate(1);
//
Clean(mConditions.signal);
//
// XPVF Signal Provider ...
bool xPVFSignal = false;
if (!mDisableXPVFLong)
{
//
xPVFSignal =
//
mConditions.xpvInfo.isNewPeak &&
mXPVHelper.peaksBuffer[0] < mXPVHelper.peaksBuffer[1] &&
mXPVHelper.valesBuffer[0] == mXPVHelper.valesBuffer[1]
//
;
//
if (xPVFSignal)
{
//
Add(
ToString(XPVF),
mConditions.signal.providers);
//
mConditions.signal.r2r = 1.5;
mConditions.signal.riskAmount = 0.005;
mConditions.signal.mode = X_ORDER_MODE_MARKET;
mConditions.signal.entry = entry;
mConditions.signal.sl = 0; // mXCHEHelper.longExit2[1];
mConditions.signal.tp = 0;
//
// mConditions.signal.calculateTP = true;
// mConditions.signal.useRiskAmountAsVolume = false;
// mConditions.signal.useSupportAndResistance = true;
//
// mDisableXPVFLong = true;
// mDisableXPVFShort = false;
}
}
//
result =
//
xPVFSignal
//
;
//
if (result)
{
//
conditions = mConditions;
//
conditions.supportResistances = supRes;
conditions.momentumStep = mLastMomentumStep;
//
conditions.signal.symbol = mSymbol;
conditions.signal.period = mPeriod;
conditions.signal.type = POSITION_TYPE_BUY;
//
conditions.hasSignal = true;
}
//
return result;
}
//
// Check has Short Signal on Each Strategies ...
bool HasShortSignal(X121MarketConditions &conditions)
{
//
bool result = false;
//
double entry = GetEntry(
mSymbol,
POSITION_TYPE_SELL);
//
XOHCL c1 = GetCandle(
mSymbol,
mPeriod,
1);
//
double pivots[];
FillPivotPoints(pivots);
XOHCLSupRes supRes = ExtractSupportAndResistance(
1,
pivots,
15);
//
X121MarketConditions mConditions = GetMarketConditions(1);
//
mXPVHelper.Calculate(1);
//
Clean(mConditions.signal);
//
// XPVF Signal Provider ...
bool xPVFSignal = false;
if (!mDisableXPVFShort)
{
//
xPVFSignal =
//
mConditions.xpvInfo.isNewVale &&
mXPVHelper.valesBuffer[0] > mXPVHelper.valesBuffer[1] &&
mXPVHelper.peaksBuffer[0] == mXPVHelper.peaksBuffer[1]
//
;
//
if (xPVFSignal)
{
//
Add(
ToString(XPVF),
mConditions.signal.providers);
//
mConditions.signal.r2r = 1.5;
mConditions.signal.riskAmount = 0.005;
mConditions.signal.mode = X_ORDER_MODE_STOP;
mConditions.signal.entry = entry;
mConditions.signal.sl = 0;
mConditions.signal.tp = mXPVHelper.valesBuffer[1];
//
mConditions.signal.calculateTP = true;
mConditions.signal.useRiskAmountAsVolume = false;
mConditions.signal.useSupportAndResistance = true;
//
// mDisableXPVFShort = true;
// mDisableXPVFLong = false;
}
}
//
result =
//
xPVFSignal
//
;
//
if (result)
{
//
conditions = mConditions;
//
conditions.supportResistances = supRes;
conditions.momentumStep = mLastMomentumStep;
//
conditions.signal.symbol = mSymbol;
conditions.signal.period = mPeriod;
conditions.signal.type = POSITION_TYPE_SELL;
//
conditions.hasSignal = true;
}
//
return result;
}