MetaTrader 5 / Librerías

Maximum Percentage of Equity Risk - librería para MetaTrader 5

1362
(34)

Este código permite establecer el porcentaje máximo del riesgo de la equidad.

El código comprueba si los lotes de compra/venta solicitados se ajustan al riesgo. Si no es así, los lotes se corrigen automáticamente de tal manera que se queden ajustados al riesgo establecido.

Código:

bool UseMaximumPercentageRisk=true; double MaximumPercentageRisk=25; #include <Trade\SymbolInfo.mqh> //+------------------------------------------------------------------+ //|  GetLotSize RPTrade                                              | //+------------------------------------------------------------------+ double GetLotSize(double lotsize)   { //--- Gets pair specs      CSymbolInfo symInfo;    int  digits_bn=symInfo.Digits();    double  points_bn=symInfo.Point();    string symbol_bn=_Symbol; //--- adjust lot     int tmpdecimal=1;    double old_lot=lotsize; //---    if((NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*(MaximumPercentageRisk/100)/1000.0,tmpdecimal)<lotsize) && UseMaximumPercentageRisk) //¿se ajusta el lote al riesgo?      {       lotsize=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*(MaximumPercentageRisk/100)/1000.0,tmpdecimal);  //calcular nuevo tamaño del lote        if(lotsize<SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_MIN)) //¿se ajusta el tamaño del lote al tamaño mínimo del lote del broker?         {          lotsize=SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_MIN);   //¡No! Ajuste del tamaño del lote al tamaño mínimo del lote del broker          Print(_Symbol," Lot adjusted from ",old_lot," para reducir el tamaño permitido por el servidor ",lotsize);         }       else         {          Print(_Symbol," Lot adjusted from ",old_lot," to ",lotsize," para la correspondencia a la condición del riesgo máximo. En cada operación se puede arriesgar sólo con ",MaximumPercentageRisk,"% del margen libre.");   //Да!           if(MathAbs(lotsize/SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP)-MathRound(lotsize/SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP)))>1.0E-10) //¿se ajusta el tamaño del lote al paso permitido por el broker?            {             lotsize=SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP)*NormalizeDouble(lotsize/SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP),0);   //¡NO! Recalcular el tamaño del lote.                 Print("M-",_Symbol," Warning: Your calculated percentage at risk lot size of was not a multiple of minimal step",SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP),". El tamaño del lote se ha cambiado a",lotsize);            }         }      }    return(lotsize);   }

Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/code/2142