Compare commits
2 Commits
2a2ea51c24
...
d79bf572ef
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d79bf572ef | ||
|
|
d1dd9b5716 |
147
AGENTS.md
Normal file
147
AGENTS.md
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
# 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.
|
||||||
13
opencode.jsonc
Normal file
13
opencode.jsonc
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://opencode.ai/config.json",
|
||||||
|
"mcp": {
|
||||||
|
"mql5_help": {
|
||||||
|
"type": "local",
|
||||||
|
"command": [
|
||||||
|
"npx",
|
||||||
|
"-y",
|
||||||
|
"github:caoshuo594/mql5-help-mcp"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user