44 lines
2.2 KiB
MQL5
44 lines
2.2 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| IMarketEnvironment.mqh |
|
|
//| Synthetic Test Harness for MetaTrader 5 |
|
|
//| Institutional Architecture in MQL5 - Part 1 Series |
|
|
//+------------------------------------------------------------------+
|
|
#ifndef SYNTHETIC_TEST_HARNESS_IMARKET_ENVIRONMENT_MQH
|
|
#define SYNTHETIC_TEST_HARNESS_IMARKET_ENVIRONMENT_MQH
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| IMarketEnvironment: outbound port abstracting the MT5 terminal. |
|
|
//| |
|
|
//| Domain logic (Expert Advisors) programs against this interface, |
|
|
//| never against native global functions like SymbolInfoDouble(), |
|
|
//| TimeCurrent(), or OrderSend(). This is the core of the |
|
|
//| Dependency Injection strategy. |
|
|
//| |
|
|
//| Concrete implementations: |
|
|
//| - CSyntheticEngine (test: reads from injected ticks) |
|
|
//| - CLiveEnvironment (prod: delegates to native MT5 API) |
|
|
//| |
|
|
//| ADR-001: TryExecuteOrder() uses the native MqlTradeRequest and |
|
|
//| MqlTradeResult structures so test and production code share the |
|
|
//| exact same call pattern. No signature mismatch between adapters. |
|
|
//+------------------------------------------------------------------+
|
|
interface IMarketEnvironment
|
|
{
|
|
//--- Price queries
|
|
double GetBid(void);
|
|
double GetAsk(void);
|
|
double GetSpread(void);
|
|
|
|
//--- Time abstraction
|
|
datetime GetTimeCurrent(void);
|
|
|
|
//--- Order execution: mirrors the native OrderSend() contract.
|
|
//--- Returns true on success (result.retcode == TRADE_RETCODE_DONE).
|
|
//--- Returns false on failure (result.retcode contains the server error).
|
|
bool TryExecuteOrder(MqlTradeRequest &request,
|
|
MqlTradeResult &result);
|
|
};
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
#endif
|