Files
EA/OI EA/AGENTS.md
Kunthawat Greethong 39ce46877e Add files
2026-01-12 09:14:10 +07:00

147 lines
3.6 KiB
Markdown

# MeanRevisionEA - Agent Guide
This repository contains a MetaTrader 5 Expert Advisor (EA) for XAUUSD trading using mean reversion strategies with Open Interest levels.
## Build / Lint / Test Commands
MQL5 files are compiled via MetaEditor IDE, not command line. Use MetaEditor (F4 in MT5) → Open OI_MeanReversion_Pro_XAUUSD_A.mq5 → Press F7 to compile.
**File Encoding:** UTF-16LE with CRLF line endings. MetaEditor handles this automatically.
**Testing:** Use MetaTrader 5 Strategy Tester. No automated test framework.
## Code Style Guidelines
### Naming Conventions
**Input Parameters:** `Inp` prefix + PascalCase
```mql5
input double InpLotSize = 0.1;
input bool InpUseStopLoss = true;
input ENUM_OI_SOURCE InpOISource = OI_SOURCE_MANUAL;
```
**Global Variables:** PascalCase (no prefix)
```mql5
double DeltaPrice = 0.0;
double SpotPrice = 0.0;
int DailyTradeCount = 0;
```
**Functions:** PascalCase with descriptive names
```mql5
void InitializeOILevels()
bool CheckGlobalConditions()
double CalculateLotSize(ENUM_POSITION_TYPE tradeType)
```
**Local Variables:** camelCase
```mql5
double lotSize = NormalizeLot(ManualLotSize);
double riskAmount = balance * (InpRiskPercent / 100.0);
```
**Object Names:** Descriptive names with prefixes (e.g., "CP_" for control panel)
```mql5
CreateButton("CP_Sell", x, y, width, height, "Sell Now", clrRed, clrWhite);
```
### Enums and Constants
**Enums:** `ENUM_` prefix, uppercase values
```mql5
enum ENUM_MARKET_PHASE {
PHASE_BULLISH,
PHASE_BEARISH,
PHASE_SIDEWAYS,
PHASE_NEUTRAL
};
```
### Imports and Includes
Use angle brackets with backslashes:
```mql5
#include <Trade\Trade.mqh>
#include <Trade\AccountInfo.mqh>
```
### Function Documentation
Use MetaTrader's standard format:
```mql5
//+------------------------------------------------------------------+
//| Calculate Lot Size |
//+------------------------------------------------------------------+
double CalculateLotSize(ENUM_POSITION_TYPE tradeType) { }
```
### Error Handling
Check return values and validate inputs:
```mql5
if(Trade.Buy(lotSize, _Symbol, SpotPrice, sl, tp, "BUY")) {
Print("BUY executed");
} else {
Print("BUY failed. Error: ", Trade.ResultRetcodeDescription());
}
if(PendingPriceValue <= 0) {
Print("Invalid price");
return;
}
```
### Conditionals and Loops
No space after `if`/`for`, space after condition:
```mql5
if(DeltaDeviation <= threshold)
return false;
for(int i = PositionsTotal() - 1; i >= 0; i--) { }
```
### Arrays and Strings
Use MQL5 functions for arrays and strings:
```mql5
ArrayResize(result, count + 1);
ArraySort(CallLevels);
StringToDouble(), StringToInteger(), DoubleToString(value, _Digits)
```
### Color and Object Management
Use MQL5 color constants and check object existence:
```mql5
color PanelColor = C'30,30,30';
color TextColor = clrWhite;
if(ObjectFind(chart_id, name) < 0)
ObjectCreate(chart_id, name, OBJ_LABEL, 0, 0, 0);
ObjectSetInteger(chart_id, name, OBJPROP_ZORDER, 1001);
```
### Trade Operations
Normalize values and use CTrade library:
```mql5
NormalizeDouble(price, _Digits)
NormalizeLot(lotSize)
CTrade Trade;
Trade.SetExpertMagicNumber(InpMagicNumber);
Trade.Buy(lotSize, _Symbol, price, sl, tp, comment);
```
### Event Handlers
Implement required MQL5 handlers:
```mql5
int OnInit() // Initialization
void OnDeinit() // Cleanup
void OnTick() // Price tick
void OnTimer() // Timer events
void OnChartEvent() // UI interactions
```
### Comments
Use `//` for single-line, `/* */` for multi-line. Thai comments acceptable for user messages.