mql5/Experts/Advisors/DualEA/Include/Strategies/AssetRegistry.mqh

160 lines
6 KiB
MQL5
Raw Permalink Normal View History

2025-08-15 00:24:02 -04:00
// Strategies/AssetRegistry.mqh
// Per-asset-class strategy registration for a given symbol/timeframe
#property strict
#ifndef __ASSET_REGISTRY_MQH__
#define __ASSET_REGISTRY_MQH__
#include <Arrays/ArrayObj.mqh>
#include "..\\IStrategy.mqh"
2026-02-05 23:31:20 -05:00
// Concrete strategies - ALL 18 strategies included
2025-10-16 18:03:12 -04:00
#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"
2026-02-05 23:31:20 -05:00
#include "ADXStrategy.mqh"
2026-02-24 12:47:37 -05:00
#include "CTestStrategy.mqh"
2026-02-05 23:31:20 -05:00
#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"
2025-10-16 18:03:12 -04:00
2025-08-15 00:24:02 -04:00
enum AssetClass
2025-10-16 18:03:12 -04:00
{
ASSET_FX_MAJOR,
ASSET_FX_MINOR,
ASSET_STOCK,
ASSET_COMMODITY,
ASSET_CRYPTO,
ASSET_OTHER
};
2025-08-15 00:24:02 -04:00
AssetClass ClassifySymbol(const string symbol)
2025-10-16 18:03:12 -04:00
{
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;
2025-08-15 00:24:02 -04:00
return ASSET_FX_MINOR;
2025-10-16 18:03:12 -04:00
}
2025-08-15 00:24:02 -04:00
return ASSET_OTHER;
2025-10-16 18:03:12 -04:00
}
struct StrategyInfo
{
string name;
IStrategy* strategy;
};
2025-08-15 00:24:02 -04:00
void RegisterStrategiesForSymbol(CArrayObj* out, const string symbol, const ENUM_TIMEFRAMES tf)
2025-10-16 18:03:12 -04:00
{
if (CheckPointer(out) == POINTER_INVALID) return;
2025-08-15 00:24:02 -04:00
2026-02-05 23:31:20 -05:00
StrategyInfo strategies[30];
2025-10-16 18:03:12 -04:00
int count = 0;
AssetClass asset = ClassifySymbol(symbol);
switch (asset)
{
2025-08-15 00:24:02 -04:00
case ASSET_FX_MAJOR:
2025-10-16 18:03:12 -04:00
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);
2026-01-14 13:37:28 -05:00
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);
2026-02-05 23:31:20 -05:00
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);
2025-10-16 18:03:12 -04:00
break;
2025-08-15 00:24:02 -04:00
case ASSET_FX_MINOR:
2025-10-16 18:03:12 -04:00
strategies[count].name = "MeanReversionBB";
strategies[count++].strategy = new CMeanReversionBBStrategy(symbol, tf);
strategies[count].name = "EMAPullback";
strategies[count++].strategy = new CEMAPullbackStrategy(symbol, tf);
2026-02-05 23:31:20 -05:00
strategies[count].name = "ForexTrend";
strategies[count++].strategy = new CForexTrendStrategy(symbol, tf);
strategies[count].name = "BollAverages";
strategies[count++].strategy = new CBollAveragesStrategy(symbol, tf);
2025-10-16 18:03:12 -04:00
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);
2025-08-15 00:24:02 -04:00
break;
2025-10-16 18:03:12 -04:00
case ASSET_COMMODITY:
strategies[count].name = "KeltnerMomentum";
strategies[count++].strategy = new CKeltnerMomentumStrategy(symbol, tf);
2026-02-05 23:31:20 -05:00
strategies[count].name = "GoldVolatility";
strategies[count++].strategy = new CGoldVolatilityStrategy(symbol, tf);
strategies[count].name = "IndicesEnergies";
strategies[count++].strategy = new CIndicesEnergiesStrategy(symbol, tf);
2025-08-15 00:24:02 -04:00
break;
2025-10-16 18:03:12 -04:00
2025-08-15 00:24:02 -04:00
case ASSET_CRYPTO:
2025-10-16 18:03:12 -04:00
strategies[count].name = "SuperTrendADXKama";
strategies[count++].strategy = new CSuperTrendADXKamaStrategy(symbol, tf);
2025-08-15 00:24:02 -04:00
break;
2025-10-16 18:03:12 -04:00
2025-08-15 00:24:02 -04:00
default:
2025-10-16 18:03:12 -04:00
strategies[count].name = "MeanReversionBB";
strategies[count++].strategy = new CMeanReversionBBStrategy(symbol, tf);
2026-02-05 23:31:20 -05:00
strategies[count].name = "TestStrategy";
strategies[count++].strategy = new CTestStrategy(symbol, tf);
2025-08-15 00:24:02 -04:00
break;
2025-10-16 18:03:12 -04:00
}
for (int i = 0; i < count; i++)
{
out.Add(strategies[i].strategy);
}
}
2025-08-15 00:24:02 -04:00
#endif // __ASSET_REGISTRY_MQH__