MQL Articles is a repository that contains the basic structure of the complete framework by Leo\Nique_372, in addition to containing the codes that nique_372 implemented in his MQL5 articles (Ict, Risk Management, Position Management).
Buscar un archivo
2026-02-27 12:46:16 +00:00
Defines new files added 2025-11-28 20:22:21 -05:00
Examples 2026-01-31 19:44:40 -05:00
Images new files added 2026-02-26 22:09:18 -05:00
IndicatorsCts 2026-02-26 21:44:04 -05:00
Ob 2026-01-31 19:44:40 -05:00
PosMgmt 2026-02-14 17:00:45 -05:00
RM 2026-02-19 14:41:21 -05:00
Sets/Article_19682 new files added 2025-10-26 16:42:49 -05:00
Strategy Actualizar Strategy/Drv/SimpleFilter/Parser/README.md 2026-02-27 00:07:30 +00:00
Utils 2026-02-26 19:01:46 -05:00
CHANGELOG.md 2026-02-26 19:01:46 -05:00
MQLArticles.mqproj Generated by MQL5 Wizard 2025-09-22 08:42:35 -05:00
README.md Actualizar README.md 2026-02-27 12:46:16 +00:00
requirements.txt Actualizar requirements.txt 2026-01-15 12:52:45 +00:00

MQLArticles Logo

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..


Main features

RM

Oco order


COcoOrder oco;

void Function() 
{
 .
 .
 unsigned long ticket1 = trade.ResultOrder();
 .
 .
 unsigned long ticket2 = trade.ResultOrder();

 oco.AddOrders(ticket1,ticket2);
}  

Risk management

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

  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

// 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

//--- 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

  g_partials.AddLogFlags(InpLogLevelPartials);
  g_partials.Init(InpMagic, _Symbol, InpVolumenQueSeQuitaraDeLaPosicionEnPorcentaje, InpPartesDelTpDondeSeTomaraParciales);

Conditional partial closures

 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

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

RectangleCreate(...);
EventCreate(...);
ArrowRightPriceCreate(..);
.
.
.
// +10 Functions

SetFile

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.


Requirements

See the requirements.txt file.


Installation Methods

  • Clone the git repository into shared projects via cmd.
  • Contact me privately on MQL5 chats (user: nique_372) to be added as a collaborator with your MQL5 nickname (read-only access), which will make the repository automatically appear in your Shared Projects folder.
  • Fork the repository.

Repository Structure

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:
- Breakeven management
- Partial position closure
- Conditional partial closure with indicator-based conditions
RM Complete Risk Management (RM) library modules.
Utils Core utility library for EAs, indicators, and libraries.
Sets Preset configuration files (.set) used in articles published by nique_372.
Strategy Strategy implementation framework for the MQLArticles ecosystem.

Examples

  • Examples\GUI\BE\Ea.mq5

Imagen

  • Examples\GUI\Risk_Management_Panel.mq5

Imagen

  • Ob\Indicator\OrderBlockIndPart2.mq5

Imagen


Implemented Article Series

Risk Management

Part Main Topic Article Link
Part 1 Risk management fundamentals [EN]
Part 2 Lot size calculation [ES]
Part 3 Base class construction [ES]
Part 4 Completing key functions of the CRiskManagement class [ES]
Part 5 Integrating risk management into an EA (Order Block) [ES]

Important Update: The RiskManagement library has been completely renovated since the last publication (part 5).

Position Management - Breakeven

Part Focus Article Link
Part 1 Base class and breakeven by fixed points [ES]
Part 2 Breakeven by ATR and RRR [ES]

Position Management - Partial Closes

Focus Article Link
Implementation of partial closes in MQL5 [ES]

Position Management - Conditional partial closure

Focus Article Link
Implementation of the base class in MQL5 [ES]

Order Block Indicator

Part Focus Article Link
Part 1 Initial implementation of Order Blocks in an indicator [EN]
Part 2 Signal implementation in the Order Block indicator [EN]