2026-02-27 03:02:46 +00:00
<p align="center">
2026-02-27 03:19:00 +00:00
<img src="./Images/MQLArticles.png" alt="MQLArticles Logo" width="1150" height="175"/>
2026-02-27 03:02:46 +00:00
</p>
2026-02-27 02:43:29 +00:00
2025-09-22 14:56:48 +00:00
2026-02-27 03:02:46 +00:00
<p align="center">
2026-02-27 03:19:00 +00:00
A comprehensive collection of MQL5 implementations for risk management and position management in algorithmic trading.
This repository contains the source code from articles published on MQL5.com by nique_372..
</p>
<p align="center">
<img src="https://img.shields.io/badge/Language-MQL5-1B6CA8?style=flat-square"/>
<img src="https://img.shields.io/badge/Platform-MetaTrader%205-0D1B2A?style=flat-square"/>
<img src="https://img.shields.io/badge/Author-nique__372-C9D6DF?style=flat-square&logoColor=white"/>
<img src="https://img.shields.io/badge/Articles-mql5.com-1B6CA8?style=flat-square"/>
2026-02-27 03:02:46 +00:00
</p>
2025-09-22 14:56:48 +00:00
2026-02-27 12:46:16 +00:00
---
## Main features
### RM
#### Oco order
2026-07-15 08:09:48 -05:00
``` mql5
2026-02-27 12:46:16 +00:00
COcoOrder oco ;
void Function ( )
{
.
.
unsigned long ticket1 = trade . ResultOrder ( ) ;
.
.
unsigned long ticket2 = trade . ResultOrder ( ) ;
oco . AddOrders ( ticket1 , ticket2 ) ;
}
```
#### Risk management
2026-07-15 08:09:48 -05:00
``` mql5
2026-02-27 12:46:16 +00:00
CRiskManagement rm ;
// Note: "rm" requires that the lot, type, maximum profit and loss be reset, etc., before calling functions like CalculateSL, GetLote, etc.
// Check superated
if ( g_loss_profit_manager . MaxLossIsSuperated ( ) )
{
risk . CloseAllPositions ( ) ;
CanTrade = false ;
}
// Calcule lot size
double entry_price = 1000.0 ;
double l = risk . GetLote ( ORDER_TYPE_BUY , entry_price , 100 , 0 ) ;
// Calcule SL
long sl = risk . GetSL ( ORDER_TYPE_BUY , entry_price , 100 , 0 )
// And more (GetPositionsTotal, SetStopLoss, CloseAllOrders, GetPositions, etc..)
```
### Strategy
#### Basic configuration
2026-07-15 08:09:48 -05:00
``` mql5
2026-02-27 12:46:16 +00:00
CAtrUltraOptimized * atr_ultra = new CAtrUltraOptimized ( ) ;
atr_ultra . SetVariables ( PERIOD_CURRENT , _Symbol , 0 , 14 ) ;
atr_ultra . SetInternalPointer ( ) ;
strategy . AddLogFlags ( InpStrategyLogLevel ) ; // Log Flags
strategy . SetAtrTP_SL ( atr_ultra , INP_STRATEGY_ATR_MULTIPLIER_TP , INP_STRATEGY_ATR_MULTIPLIER_SL ) ; // TP sl by atr
strategy . SetOperateMode ( TR_BUY_SELL , INP_STRATEGY_TYPE_TPSL ) ; // Operate mode
strategy . SetTP_SL ( INP_STRATEGY_SL_POINT , INP_STRATEGY_TP_POINT ) ; // TP SL by point
if ( InpRmLoteType = = Fijo )
strategy . FixedLotSize ( InpRmLote ) ; // Fixed lot size
```
#### Filters
2026-07-15 08:09:48 -05:00
``` mql5
2026-02-27 12:46:16 +00:00
// Filter RSI
if ( INP_FILTER_RSI_ENABLE )
{
CSFilterRsi * f = new CSFilterRsi ( ) ;
strategy . AddFilter ( f ) ;
}
// Filter Stochastic
if ( INP_FILTER_STOCH_ENABLE )
{
CSFilterStochastic * f = new CSFilterStochastic ( ) ;
strategy . AddFilter ( f ) ;
}
// Filter Bollinger Bands
if ( INP_FILTER_BANDS_ENABLE )
{
CSFilterBands * f = new CSFilterBands ( ) ;
strategy . AddFilter ( f ) ;
}
// Codigo
g_strategy_filter_general_parser . AddLogFlags ( InpFIlterLogLevel ) ;
strategy . CodeCompra < CStrategyFilterEmptyFuncFac > ( StringFormat ( " #group oAnd (%s,%s,%s,%s,%s,%s,%s) == 0 oAnd ([%s] == 0 oOr [%s] == 2) " ,
CSFIlterAD_NAME , CSFilterSuperTrend_NAME , CSFilterFvg_NAME , CSFilterBands_NAME , CSFilterRsi_NAME , CSFilterStochastic_NAME , CSFilterLiqEstimed_NAME , CMediationsByZoneFilterName , CMediationsByZoneFilterName ) , 5 ) ;
strategy . CodeVenta < CStrategyFilterEmptyFuncFac > ( StringFormat ( " #group oAnd (%s,%s,%s,%s,%s,%s,%s) == 1 oAnd ([%s] == 1 oOr [%s] == 2) " ,
CSFIlterAD_NAME , CSFilterSuperTrend_NAME , CSFilterFvg_NAME , CSFilterBands_NAME , CSFilterRsi_NAME , CSFilterStochastic_NAME , CSFilterLiqEstimed_NAME , CMediationsByZoneFilterName , CMediationsByZoneFilterName ) , 5 ) ;
// Summary
strategy . PrintFilters ( ) ;
```
### Position management
#### Breakeven
2026-07-15 08:09:48 -05:00
``` mql5
2026-02-27 12:46:16 +00:00
//--- Atr
atr_ultra_optimized . SetVariables ( _Period , _Symbol , 0 , 14 ) ;
atr_ultra_optimized . SetInternalPointer ( ) ;
//--- We set the breakeven values so its use is allowed
break_even . SetBeByAtr ( InpBeAtrMultiplier , InpBeAtrMultiplierExtra , GetPointer ( atr_ultra_optimized ) ) ;
break_even . SetBeByFixedPoints ( InpBeFixedPointsToPutBe , InpBeFixedPointsExtra ) ;
break_even . SetBeByRR ( InpBeRrDbl , InpBeTypeExtraRr , InpBeExtraPointsRrOrAtrMultiplier , GetPointer ( atr_ultra_optimized ) ) ;
break_even . SetInternalPointer ( InpTypeBreakEven ) ;
break_even . obj . AddLogFlags ( InpLogLevelBe ) ;
```
#### Partial closures
2026-07-15 08:09:48 -05:00
``` mql5
2026-02-27 12:46:16 +00:00
g_partials . AddLogFlags ( InpLogLevelPartials ) ;
g_partials .Init ( InpMagic , _Symbol , InpVolumenQueSeQuitaraDeLaPosicionEnPorcentaje , InpPartesDelTpDondeSeTomaraParciales ) ;
```
#### Conditional partial closures
2026-07-15 08:09:48 -05:00
``` mql5
2026-02-27 12:46:16 +00:00
if ( InpPartialsIsEnable )
{
// Atr creation
g_atr = new CAtr ( ) ;
g_atr . Create ( _Period , _Symbol , 14 , true , true ) ;
g_atr . SetAsSeries ( true ) ;
CAutoCleaner : : AddPtr ( g_atr ) ; // Añadimos para que se auto elimine
// We assign to g_partilas the dynamic instance returned by CConditionalPartialsFactory::Create(...)
g_partials = CConditionalPartialsFactory : : Create ( InpPartialsClassManagerType ) ; // Sera elimnado globalmente
// Initial log flags
g_partials . AddLogFlags ( InpPartialsLogLevel ) ;
// Create condition
CConditionalPartialsIndRsi * rsi_condition = new CConditionalPartialsIndRsi ( ) ; // True dado que sera eliminado por partials
// Rsi condition config
if ( ! rsi_condition .Init ( InpPartialsRsiTimeframe , _Symbol , InpPartialsRsiPeriod , InpPartialsRsiOverBoughtLevel , InpPartialsRsiOverSoldLevel ) )
return INIT_PARAMETERS_INCORRECT ;
// Condition config
ConditionalPartialConfig config ;
config . condition = rsi_condition ;
config . min_distance_to_close_pos = CreateDiffptr ( MODE_DIFF_BY_ATR , _Symbol , g_atr , 0 , InpPartialsMinDistanceInAtrMul ) ;
config . str_percentage_volume_to_close = InpPartialsVolumeToClosePercentage ;
config . magic_number = InpMagic ;
// Init partials
if ( ! g_partials .Init ( config ) )
return INIT_PARAMETERS_INCORRECT ;
else
CAutoCleaner : : AddPtr ( g_partials ) ; // Añadimos al cleaner
if ( InpPartialsClassManagerType = = CONDITIONAL_PARTIAL_CLASS_TYPE_CONSTANT )
{
CConditionalPartialsConst * partial = ( CConditionalPartialsConst * ) g_partials ;
partial . ForzeToClose ( true ) ;
}
}
```
### Utils
#### Fibbonaci
2026-07-15 08:09:48 -05:00
``` mql5
2026-02-27 12:46:16 +00:00
CFibbo fibbo ;
fibbo . Create ( ChartID ( ) , " Fibbo " , 0 , clrGreen , STYLE_SOLID , 1 , " Fibbonaci " ) ;
fibbo . SetLevels ( " 0.0,0.2,1.0,2.0 " , " clrRed,clrRed,clrRed,clrRed " , STYLE_SOLID , 1 , ' , ' ) ;
fibbo . Move ( D ' 2025.01 .01 10 : 00 : 00 ' , D ' 2026.01 .01 10 : 00 : 00 ' , 1000.0 , 1050.0 ) ;
double tp = fibbo . GetLevelPrice ( 2.0 ) ;
double sl = fibbo . GetLevelPrice ( 0.2 ) ;
```
#### GraphicObjects
2026-07-15 08:09:48 -05:00
``` mql5
2026-02-27 12:46:16 +00:00
RectangleCreate ( . . . ) ;
EventCreate ( . . . ) ;
ArrowRightPriceCreate ( . . ) ;
.
.
.
// +10 Functions
```
#### SetFile
2026-07-15 08:09:48 -05:00
``` mql5
2026-02-27 12:46:16 +00:00
void OnStart ( )
{
//---
CSetFile sf ;
sf .Init ( " BotSimple " ) ;
sf . AddParamLineNumber ( " InpMagic " , 100 , 100 , 1 , 999 ) ;
sf . AddParamLineReal ( " InpRisk " , 1.0 , 2 , 0.1 , 0.1 , 10.0 ) ;
sf . AddParamLineBool ( " InpUseFilter " , false ) ;
sf . AddParamLineDatetime ( " InpStartDate " , D ' 2024.01 .01 ' , D ' 2020.01 .01 ' , 86400 , D ' 2025.12 .31 ' ) ;
sf . AddParamLineColor ( " InpLineColor " , clrRed ) ;
sf . ModifyParamValueNumber ( " InpMagic " , 999 ) ;
sf . ModifyParamValueRealNumber ( " InpRisk " , 5.5 , 2 ) ;
sf . ModifyParamValueBoolean ( " InpUseFilter " , true ) ;
sf . ModifyParamValueDatetime ( " InpStartDate " , D ' 2025.06 .01 ' ) ;
sf . ModifyParamValueColor ( " InpLineColor " , clrBlue ) ;
sf . ModifyParamOptDatetimeStart ( " InpStartDate " , D ' 2023.01 .01 ' ) ;
sf . ModifyParamOptDatetimeStep ( " InpStartDate " , 3600 ) ;
sf . ModifyParamOptDatetimeStop ( " InpStartDate " , D ' 2026.01 .01 ' ) ;
sf . Imprimir ( ) ;
}
```
> These are only 5-10% of the classes available in MQLArticles; only the most important classes in the library were represented.
---
2026-02-27 02:43:29 +00:00
## Repository Structure
2025-12-21 17:55:44 +00:00
| Folder | Description |
|---------|-------------|
| **Defines ** | Markdown files containing optional defines to activate or increase logging verbosity for specific classes in the repository. |
| **Examples ** | Basic examples that implement various libraries from the MQLArticles repository, such as risk management, position management, etc. |
| **Images ** | Screenshots and visual assets from repository examples (breakeven manager, lot size calculator, order blocks indicator). |
| **IndicatorsCts ** | Wrapper library for implementing technical indicators. |
| **Ob ** | Order Blocks indicator implementation and example Expert Advisors from published articles (author: nique_372). |
| **PosMgmt ** | Position management libraries including:<br>- Breakeven management<br>- Partial position closure<br>- Conditional partial closure with indicator-based conditions |
| **RM ** | Complete Risk Management (RM) library modules. |
| **Utils ** | Core utility library for EAs, indicators, and libraries.
2025-12-21 17:56:57 +00:00
| **Sets ** | Preset configuration files (.set) used in articles published by nique_372. |
2025-12-21 17:55:44 +00:00
| **Strategy ** | Strategy implementation framework for the MQLArticles ecosystem. |
2026-02-27 12:46:16 +00:00
2026-05-28 17:41:01 +00:00
2025-12-21 17:55:44 +00:00
---
2025-10-08 13:00:59 +00:00
2026-02-27 12:46:16 +00:00
## Examples
- Examples\\GUI\\BE\\Ea.mq5

- Examples\\GUI\\Risk_Management_Panel.mq5

- Ob\\Indicator\\OrderBlockIndPart2.mq5

---
2026-05-28 17:41:01 +00:00
2025-10-17 22:03:34 +00:00
## Implemented Article Series
2025-09-22 14:56:48 +00:00
2025-10-17 22:03:34 +00:00
### Risk Management
2025-09-22 14:56:48 +00:00
2025-10-17 22:03:34 +00:00
| Part | Main Topic | Article Link |
|-------|----------------|-------------------|
| **Part 1 ** | Risk management fundamentals | [[EN]](https://www.mql5.com/en/articles/16820) |
| **Part 2 ** | Lot size calculation | [[ES]](https://www.mql5.com/es/articles/16985) |
| **Part 3 ** | Base class construction | [[ES]](https://www.mql5.com/es/articles/17249) |
| **Part 4 ** | Completing key functions of the CRiskManagement class | [[ES]](https://www.mql5.com/es/articles/17508) |
| **Part 5 ** | Integrating risk management into an EA (Order Block) | [[ES]](https://www.mql5.com/es/articles/17640) |
2025-09-22 14:56:48 +00:00
2025-10-17 22:03:34 +00:00
> **Important Update**: The RiskManagement library has been completely renovated since the last publication (part 5).
2025-09-22 14:56:48 +00:00
2025-10-17 22:03:34 +00:00
### Position Management - Breakeven
2025-09-22 17:09:08 +00:00
2025-10-17 22:03:34 +00:00
| Part | Focus | Article Link |
2025-09-22 17:09:08 +00:00
|-------|---------|-------------------|
2025-10-17 22:03:34 +00:00
| **Part 1 ** | Base class and breakeven by fixed points | [[ES]](https://www.mql5.com/es/articles/17957) |
| **Part 2 ** | Breakeven by ATR and RRR | [[ES]](https://www.mql5.com/es/articles/18111) |
2025-09-22 17:09:08 +00:00
2025-10-17 22:03:34 +00:00
### Position Management - Partial Closes
| Focus | Article Link |
|-------|--------------------|
2025-10-17 22:04:18 +00:00
| Implementation of partial closes in MQL5 | [[ES]](https://www.mql5.com/es/articles/19682) |
2025-09-22 19:14:33 +00:00
2025-09-22 14:56:48 +00:00
2025-12-13 17:33:45 +00:00
### Position Management - Conditional partial closure
| Focus | Article Link |
|-------|--------------------|
| Implementation of the base class in MQL5 | [[ES]](https://www.mql5.com/es/articles/20048) |
2025-10-17 22:03:34 +00:00
### Order Block Indicator
2025-09-22 14:56:48 +00:00
2025-10-17 22:03:34 +00:00
| Part | Focus | Article Link |
|-------|---------|-------------------|
| **Part 1 ** | Initial implementation of Order Blocks in an indicator | [[EN]](https://www.mql5.com/en/articles/15899) |
| **Part 2 ** | Signal implementation in the Order Block indicator | [[EN]](https://www.mql5.com/en/articles/16268) |
2025-09-22 14:50:12 +00:00
2025-09-22 13:42:25 +00:00
2026-05-28 17:41:01 +00:00
---
## License
* * [Read Full License ](./LICENSE )**
By downloading or using this repository, you accept the license terms.
---
## Requirements
See the [dependencies.json ](./dependencies.json ) file.
---
## Installation of repo code
``` bash
cd "C:\Users\YOUR USER\AppData\Roaming\MetaQuotes\Terminal\YOUR ID\MQL5\Shared Projects"
tsndep install "https://forge.mql5.io/nique_372/MQLArticles.git"
```
- For use tsndep command requerid tsndep pacakage (avaible in [pypi ](https://pypi.org/project/tsndep )).. This command automatically downloads all dependencies and installs all requirements from the repositories.
- If any part of the system is private, then it will fail... contact me so I can give you access (if it's a product, you can buy it; if you have any questions, don't hesitate to contact me), Check the dependencies.json file for more info.
---
## Contact
- **Platform:** [MQL5 Community ](https://www.mql5.com/es/users/nique_372 )
- **Profile:** https://www.mql5.com/es/users/nique_372
- **My Articles** https://www.mql5.com/es/users/nique_372/publications