// // 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; }