¡Necesito la fórmula del tamaño de LOT de moneymanagement basada en el SL y el riesgo de la cuenta!

 

Hola, necesito un código/fórmula que redimensione el tamaño del lote en base al % de riesgo de la cuenta calculado incluyendo el STOPLOSS, y teniendo en cuenta que mi cuenta está en EUR.

Lo que tengo es esto:

extern double RISK=1;  //1% RISK
double LOT;

LOT = NormalizeDouble(AccountEquity()*RISK/10000,2);

Pero este no considera el stoploss

Así que encontré esta en la búsqueda de Google

lot=NormalizeDouble(AccountBalance( )*MaximumRisk/StopLoss/(MarketInfo(Symbol(), MODE_TICKVALUE)),2);

Y este otro

lot = Risk * AccountEquity() / MarketInfo(Symbol(), MODE_TICKVALUE) / Stop;

Pero ninguno de estos funciona, por favor ayúdenme a arreglarlos, o denme uno mejor, ¡gracias!

 
  1. Saldo de la cuenta * porcentaje = RISK = (OrderOpenPrice - OrderStopLoss)*DIR * OrderLots * DeltaPerlot (Nota: OOP-OSL incluye el SPREAD)
  2. NO utilice TickValue por sí mismo - DeltaPerlot
  3. También debe comprobar FreeMargin para evitar el stop out
 
   double Spread=MarketInfo(Symbol(),MODE_SPREAD)/Q;
   double Risk=(RiskPercent*AccountEquity())/100;//this means if your balance 1000$ & RiskPercent=10% >> you going to risk 100$
   double lot=Risk/((StopLoss+Spread)*MarketInfo(Symbol(),MODE_TICKVALUE)*Q);//Make Sure to Define Your StopLoss & Q=10 in 5 digits or Q=1 in 4 Digits 
 
yousefh:, lea el comentario en mi DeltaPerlot. NO utilice el valor de la garrapata por sí mismo.
 
yousefh:

Lo siento, no es bueno

WHRoeder:
  1. Saldo de la cuenta * porcentaje = RIESGO = (OrderOpenPrice - OrderStopLoss)*DIR * OrderLots * DeltaPerlot (Nota OOP-OSL incluye el SPREAD)
  2. NO utilice TickValue por sí mismo - DeltaPerlot
  3. También debe comprobar FreeMargin para evitar stop out

Ok veo su punto, así que aquí está mi lógica y el cálculo de cómo calcular el RISK %


Que en el código MQL4 se ve así:

extern double MYSTOPLOSS = 50;  // CUSTOM SL SIZE IN PIPS AFTER THE STOPLEVEL
extern double  RISK =2; // 2% ACCOUNT RISK

double LOT =(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MYSTOPLOSS)* Point *100000 );


Un simple 1 liner, nada complicado, ahora por favor ayúdame a insertar eso de DELTA que has estado hablando, sé que la fórmula no está completa así que por favor ayúdame.Y por favor ten en cuenta que mi cuenta está en EURO así que en la mayoría de los casos es la moneda básica.

 
Ayúdame por favor rápido, me gustaría terminar este proyecto antes de Navidad :)
 
Proximus: Ayúdame por favor rápido, me gustaría terminar este proyecto antes de X-mas :)
  1. Falta de planificación
  2. ahora, por favor, ayúdame a insertar eso de DELTA
    ¿Te has molestado en hacer clic en los enlaces proporcionados?
 
WHRoeder:

  1. Ahora, por favor, ayúdame a insertar esa cosa DELTA
    ¿Te has molestado en hacer clic en los enlaces proporcionados?

Sí, lo hice, pero no entiendo cómo lo has introducido en mi ecuación, ya que dijiste que necesitabas esto:

  MarketInfo(pair, MODE_TICKVALUE)
           / MarketInfo(pair, MODE_TICKSIZE) 
Pero no entiendo cómo esto ayuda a mi ecuación, porque dividiendo estos dos números dará un número grande en lugar del tamaño de la garrapata...
 
Proximus:

Sí, lo hice, pero no entiendo cómo encaja eso en mi ecuación, usted dijo que necesita esto:

Pero no entiendo cómo esto ayuda a mi ecuación, porque dividiendo estos dos números dará un número grande en lugar del tamaño de la garrapata...

Prueba este enlace: https://www.mql5.com/en/forum/148224.

Tal vez mirando desde un ángulo diferente podría ayudar.

 
ubzen:

Pruebe este enlace: https://www.mql5.com/en/forum/148224.

Tal vez mirando desde un ángulo diferente podría ayudar.


WTF chicos, ¿no debería ser TICKVALUE * TICKSIZE en lugar de TICKVALUE /TICKSIZE? Creo que hay un gran error allí





Acabo de hacer un indicador rápido que muestra valores separados, supongo que el TICKVALUE * TICKSIZE es el apropiado...


Y tenga en cuenta la cuenta de demostración está en euros por lo que es la moneda de base, mientras que hice la misma prueba con una cuenta de USD y allí el punto era equivalente a TICKVALUE * TICKSIZE porque mide el valor de la moneda de cotización.

Archivos adjuntos:
 

Si he entendido bien la pregunta, esto le servirá.

for( i=0; i<=ot; i++ ) for( z=0; z<=10; z++ )
      {
         if( long_orders_array_ATF[i][z] > 0 )
         for (zz=0; zz<=10; zz++)
         { 
            OrderSelect(zz,SELECT_BY_POS,MODE_TRADES);
            if (OrderTicket()==long_orders_array_ATF[i][z]) zz=ot+2; 
            if (ot+2<=zz)  
            long_potencial_loss = (OrderLots() * (OrderOpenPrice() - OrderStopLoss()))*100000;
            long_sum_potencial_loss = long_sum_potencial_loss + long_potencial_loss;
         }
      }
...

lot_size = ((((free-long_sum_potencial_loss) * percent_depo)/100.0)/pips)/100000 ; }