MetaTrader 5 / Librerías
Maximum Percentage of Equity Risk - librería para MetaTrader 5
1362
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