Optimum lot size calculator
- Utilidades
- Chia Leilypour
- Versión: 1.0
Nota Importante:
Antes de usarlo en una cuenta real pruébalo en tu cuenta demo.
//+------------------------------------------------------------------+
//| Optimum_Lot_Size.mq5
//| Copyright 2023, MetaQuotes Ltd. |
/ /| http s://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#property script_show_inputs
#include <Comercio/Trade.mqh>
#include <Trade/PositionInfo.mqh>
CTrade Trading;
//+------------------------------------------------------------------+
//| Función de inicio del programa de script |.
//+------------------------------------------------------------------+
input bool IsBuy=true;
input double StopLoss;
input double TakeProfit;
input double RiskPercent=0.01;
double LotSize;
void OnStart()
{
double temp_RiesgoPercent=RiesgoPercent;
double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
double Oferta=SymbolInfoDouble(Símbolo(),SYMBOL_BID);
if(temp_PorcentajeRiesgo>0,04) temp_PorcentajeRiesgo=0,04;
if (IsBuy && StopLoss !=0.0)
{
LotSize=OptimumLotSize(Symbol(),Ask,StopLoss,temp_RiskPercent);
Trading.Buy(LotSize,Symbol(),Ask,StopLoss,TakeProfit);
}
if (!IsBuy && StopLoss !=0.0)
{
TamañoLote=TamañoLoteOptimo(Símbolo(),Oferta,StopLoss,temp_RiesgoPercent);
Trading.Sell(LotSize,Symbol(),Bid,StopLoss,TakeProfit);
}
}
double OptimumLotSize(string symbol,double EntryPoint, double StoppLoss, double RiskPercent)
{
int Diigit =SymbolInfoInteger(símbolo,SYMBOL_DIGITS);
doble OneLotValue =MathPow(10,Diigit);
double ask =SymbolInfoDouble("GBPUSD",SYMBOL_ASK);
double bid =SymbolInfoDouble(símbolo,SYMBOL_BID);
string MonedaBase =SymbolInfoString(símbolo,SYMBOL_CURRENCY_BASE);
string BeneficioCurency =SymbolInfoString(símbolo,SYMBOL_CURRENCY_PROFIT);
cadena AccountCurency =AccountInfoString(CUENTA_CURRENCIA);
double AllowedLoss =RiskPercent*AccountInfoDouble(ACCOUNT_EQUITY);
double LossPoint =MathAbs(PuntoDeEntrada-StoppLoss);
double TamañoLote;
if (ProfitCurency==AccountCurency)
{
TamañoLote=PérdidaPermitida/PuntoDePérdida;
TamañoLote=NormalizarDoble(TamañoLote/ValorUnLote,2);
return(TamañoLote);
}
else if (BaseCurrency==AccountCurency)
{
AllowedLoss=ask*AllowedLoss; //// Pérdida permitida en la divisa Profit Ejemplo: USDCHF-----> Devuelve la pérdida permitida en CHF
TamañoLote=PérdidaPermitida/PuntoDePérdida;
TamañoLote=NormalizarDoble(TamañoLote/ValorLote,2);
return(TamañoLote);
}
else
{
string DivisaTransferencia=DivisaCuenta+DivisaBeneficio;
ask=SymbolInfoDouble(MonedaTransferencia,SYMBOL_ASK);
if(ask!=0)
{
PérdidaPermitida=pregunta*PérdidaPermitida; //// Pérdida permitida en divisa de Beneficio Ejemplo: USDCHF-----> Pérdida permitida en CHF
TamañoLote=PérdidaPermitida/PuntoDePérdida;
TamañoLote=NormalizarDoble(TamañoLote/ValorLote,2);
return(TamañoLote);
}
else
{
DivisaTransferencia=DivisaBeneficio+DivisaCuenta;
ask=SymbolInfoDouble(DivisaTransferencia,SYMBOL_ASK);
ask=1/ask;
AllowedLoss= ask*AllowedLoss; //// Pérdida permitida en la divisa Profit Ejemplo: USDCHF-----> Pérdida permitida en CHF
Lotsize=PérdidaPermitida/LossPoint;
TamañoLote=NormalizarDoble(TamañoLote/ValorUnLote,2);
return(TamañoLote);
}
if (ProfitCurency=="JPY")
{
Lotsize=PérdidaPermitida*1,5/PuntoDePérdida;
Lotsize=NormalizeDouble(Lotsize/OneLotValue,2);
return(TamañoLote);
}
return TamañoLote;
}
}

