MQL4/.github/instructions/mql-includes.instructions.md
Rahul Dhangar 669ecde7b7 Initial commit: Documentation and MT4 EA Phases 1-3 complete
- Added comprehensive MQ4/MQ5 comparison documentation (60+ pages)
- Added MT4 EA implementation plan and tracking documents (60+ pages)
- Phase 1: Core infrastructure with input parameters and data structures
- Phase 2: Bar detection system for H4, M30, M15 timeframes
- Phase 3: Pattern detection logic (Regular/Irregular Buy/Sell patterns)
- Reference files: FINAL_H4_ZONES.mq4, MultiTimeframeZoneEA.mq5, Strategy.md
2025-11-04 01:38:41 +05:30

29 lines
No EOL
3.2 KiB
Markdown

---
applyTo: "**/Include/_Thivyam/**/*.mqh"
---
# Instructions for _Thivyam MQL Include Files (.mqh)
- **Purpose:** Include files should contain reusable functions, classes, or constants to promote modular and DRY (Don't Repeat Yourself) code.
- **Modularity:** Functions should be self-contained and perform a single, well-defined task.
- **Documentation:** All public functions and classes **MUST** be documented using a JSDoc-like comment style, explaining the purpose, parameters, and return value.
- Example:
```mql
/**
* Calculates the dynamic lot size based on risk percentage.
* @param riskPercent The risk per trade as a percentage of account equity.
* @param stopLossPips The stop loss distance in pips.
* @return The calculated lot size, or 0.0 on error.
*/
double CalculateLotSize(double riskPercent, int stopLossPips)
```
- **No Global State:** Avoid defining mutable global variables within include files. Pass data through function parameters instead.
- **Pointer Syntax (CRITICAL):** In MQL5, use the dot operator (`.`) for pointer member access, NOT the arrow operator (`->`). Example: `CObject *ptr; ptr.Method();` is correct, `ptr->Method()` causes compilation errors.
- **Pointer Safety:** When classes manage pointers, always initialise members to `NULL`, validate indices before dereferencing, and delete allocations exactly once (set pointers to `NULL` immediately after deletion).
- **Array Operations:** Prefer helper functions that wrap `ArrayResize` and boundary logic. When removing items from dynamic arrays, iterate from the end toward the beginning to avoid skipped elements and keep arrays tightly packed. Use dynamic arrays (`Type[]`) not static arrays (`Type[N]`) for functions like `ArraySetAsSeries()`.
- **Loop Variable Declaration:** Never declare variables inside for-loop initializers. Always declare loop counters before the for statement: `int i; for(i = 0; i < n; i++)`. Use post-increment (`i++`) not pre-increment (`++i`).
- **Boolean Expressions:** Ensure conditionals evaluate to explicit `bool` expressions (e.g., compare values or call methods returning `bool`). Do not rely on implicit pointer-to-bool conversions or assignments within `if` statements.
- **Error Reporting:** Check and log the return values from MQL5 system calls (`ArrayResize`, `CopyRates`, trading functions). Use `Print` or structured logging helpers so runtime failures are visible during backtests.
- **Rendering & State Updates:** Separate state mutation from rendering calls. Update your model object first, then invoke drawing functions on closed bars only.
- **Tooling Recommendations:** Before delivering changes, compile the modified module in MetaEditor (`MetaEditor64.exe /compile:"path"`), enable “Treat warnings as errors”, and run available unit/back-test scripts where practical to surface regressions early.
- **Formatting:** Stick to four-space indentation, keep lines under 120 characters where practical, and group related helper functions together to aid review by agentic coders.
- **Agent Workflow:** Leave breadcrumb comments for complex logic so future automated agents can understand intent without guessing (e.g., “// shift remaining contexts left after removal”). Keep such comments concise and meaningful.