// Strategies/AssetRegistry.mqh // Per-asset-class strategy registration for a given symbol/timeframe #property strict #ifndef __ASSET_REGISTRY_MQH__ #define __ASSET_REGISTRY_MQH__ #include #include "..\\IStrategy.mqh" // Concrete strategies - ALL 18 strategies included #include "BollAveragesStrategy.mqh" #include "MeanReversionBBStrategy.mqh" #include "SuperTrendADXKamaStrategy.mqh" #include "RSI2BBReversionStrategy.mqh" #include "DonchianATRBreakoutStrategy.mqh" #include "OpeningRangeBreakoutStrategy.mqh" #include "VWAPReversionStrategy.mqh" #include "EMAPullbackStrategy.mqh" #include "KeltnerMomentumStrategy.mqh" #include "ADXStrategy.mqh" #include "CTestStrategy.mqh" #include "AcceleratorOscillatorStrategy.mqh" #include "AlligatorStrategy.mqh" #include "AroonStrategy.mqh" #include "AwesomeOscillatorStrategy.mqh" #include "BearsPowerStrategy.mqh" #include "BullsPowerStrategy.mqh" #include "ForexTrendStrategy.mqh" #include "GoldVolatilityStrategy.mqh" #include "IndicesEnergiesStrategy.mqh" #include "MultiIndicatorStrategy.mqh" enum AssetClass { ASSET_FX_MAJOR, ASSET_FX_MINOR, ASSET_STOCK, ASSET_COMMODITY, ASSET_CRYPTO, ASSET_OTHER }; AssetClass ClassifySymbol(const string symbol) { string upper = symbol; StringToUpper(upper); // FX classification if (StringFind(upper, "USD") >= 0) { if (StringFind(upper, "EUR") >= 0 || StringFind(upper, "GBP") >= 0 || StringFind(upper, "JPY") >= 0 || StringFind(upper, "CHF") >= 0 || StringFind(upper, "CAD") >= 0 || StringFind(upper, "AUD") >= 0 || StringFind(upper, "NZD") >= 0) return ASSET_FX_MAJOR; return ASSET_FX_MINOR; } return ASSET_OTHER; } struct StrategyInfo { string name; IStrategy* strategy; }; void RegisterStrategiesForSymbol(CArrayObj* out, const string symbol, const ENUM_TIMEFRAMES tf) { if (CheckPointer(out) == POINTER_INVALID) return; StrategyInfo strategies[30]; int count = 0; AssetClass asset = ClassifySymbol(symbol); switch (asset) { case ASSET_FX_MAJOR: strategies[count].name = "SuperTrendADXKama"; strategies[count++].strategy = new CSuperTrendADXKamaStrategy(symbol, tf); strategies[count].name = "RSI2BBReversion"; strategies[count++].strategy = new CRSI2BBReversionStrategy(symbol, tf); strategies[count].name = "DonchianATRBreakout"; strategies[count++].strategy = new CDonchianATRBreakoutStrategy(symbol, tf); strategies[count].name = "MeanReversionBB"; strategies[count++].strategy = new CMeanReversionBBStrategy(symbol, tf); strategies[count].name = "KeltnerMomentum"; strategies[count++].strategy = new CKeltnerMomentumStrategy(symbol, tf); strategies[count].name = "VWAPReversion"; strategies[count++].strategy = new CVWAPReversionStrategy(symbol, tf); strategies[count].name = "EMAPullback"; strategies[count++].strategy = new CEMAPullbackStrategy(symbol, tf); strategies[count].name = "OpeningRangeBreakout"; strategies[count++].strategy = new COpeningRangeBreakoutStrategy(symbol, tf); strategies[count].name = "ADXStrategy"; strategies[count++].strategy = new CADXStrategy(symbol, tf); strategies[count].name = "AcceleratorOscillator"; strategies[count++].strategy = new CAcceleratorOscillatorStrategy(symbol, tf); strategies[count].name = "Alligator"; strategies[count++].strategy = new CAlligatorStrategy(symbol, tf); strategies[count].name = "Aroon"; strategies[count++].strategy = new CAroonStrategy(symbol, tf); strategies[count].name = "AwesomeOscillator"; strategies[count++].strategy = new CAwesomeOscillatorStrategy(symbol, tf); strategies[count].name = "BearsPower"; strategies[count++].strategy = new CBearsPowerStrategy(symbol, tf); strategies[count].name = "BullsPower"; strategies[count++].strategy = new CBullsPowerStrategy(symbol, tf); strategies[count].name = "MultiIndicator"; strategies[count++].strategy = new CMultiIndicatorStrategy(symbol, tf); break; case ASSET_FX_MINOR: strategies[count].name = "MeanReversionBB"; strategies[count++].strategy = new CMeanReversionBBStrategy(symbol, tf); strategies[count].name = "EMAPullback"; strategies[count++].strategy = new CEMAPullbackStrategy(symbol, tf); strategies[count].name = "ForexTrend"; strategies[count++].strategy = new CForexTrendStrategy(symbol, tf); strategies[count].name = "BollAverages"; strategies[count++].strategy = new CBollAveragesStrategy(symbol, tf); break; case ASSET_STOCK: strategies[count].name = "VWAPReversion"; strategies[count++].strategy = new CVWAPReversionStrategy(symbol, tf); strategies[count].name = "OpeningRangeBreakout"; strategies[count++].strategy = new COpeningRangeBreakoutStrategy(symbol, tf); break; case ASSET_COMMODITY: strategies[count].name = "KeltnerMomentum"; strategies[count++].strategy = new CKeltnerMomentumStrategy(symbol, tf); strategies[count].name = "GoldVolatility"; strategies[count++].strategy = new CGoldVolatilityStrategy(symbol, tf); strategies[count].name = "IndicesEnergies"; strategies[count++].strategy = new CIndicesEnergiesStrategy(symbol, tf); break; case ASSET_CRYPTO: strategies[count].name = "SuperTrendADXKama"; strategies[count++].strategy = new CSuperTrendADXKamaStrategy(symbol, tf); break; default: strategies[count].name = "MeanReversionBB"; strategies[count++].strategy = new CMeanReversionBBStrategy(symbol, tf); strategies[count].name = "TestStrategy"; strategies[count++].strategy = new CTestStrategy(symbol, tf); break; } for (int i = 0; i < count; i++) { out.Add(strategies[i].strategy); } } #endif // __ASSET_REGISTRY_MQH__