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

 
darelco:

... en esta parte del código hay un problema con la nueva compilación (error ---> 'MarketInfo' - tipo de expresión de cambio ilegal) tal vez estaba todo bien hasta la actualización a MT4 build 600+ ... pero desde entonces ya no funciona.

Así que, por favor, podrías publicar alguna versión más reciente ... si por supuesto sigues por aquí.


Creo que si se cambia

                switch ( MarketInfo( strSymbol, MODE_DIGITS ) )

a

                int dig=MarketInfo( strSymbol, MODE_DIGITS ) ;
                switch ( dig )

Compilará bien

 
darelco:

... en esta parte del código hay un problema con la nueva compilación (error ---> 'MarketInfo' - tipo de expresión de cambio ilegal) tal vez todo estaba bien hasta la actualización a MT4 build 600+ ... pero desde entonces ya no funciona.

Así que, por favor, podría publicar alguna versión más reciente ... si, por supuesto, todavía estás por aquí.


   switch((int)MarketInfo(strSymbol,MODE_DIGITS))
 

https://book.mql4.com/operators/switch

"Los valores de la Expresión y de los Parámetros sólo pueden ser valores de tipo int. La Expresión puede ser una constante, una variable, una llamada a función o una expresión. Cada caso de variación puede estar marcado por una constante de tipo entero, una constante de tipo carácter o una expresión constante. Una expresión constante no puede incluir variables o llamadas a funciones".

 
angevoyageur:
   switch((int)MarketInfo(strSymbol,MODE_DIGITS))

Una vez más, usted propone una solución más sencilla y mejor.
 
GumRai:
Una vez más, se te ocurre una solución más sencilla y mejor.
Todos aprendemos de los demás.
 
                int dig=MarketInfo( strSymbol, MODE_DIGITS ) ;
                switch ( dig )
o
   switch((int)MarketInfo(strSymbol,MODE_DIGITS))
o el estilo del objeto (funciona excepto para los lanzamientos de punteros)
   switch( int(MarketInfo(strSymbol,MODE_DIGITS)) )
 

En mi EA diferente, se escribe así :

extern double      Risk_Percent                   = 3;
extern int         StopLoss                       = 50;

//+------------------------------------------------------------------+
  {
   double lot = MathCeil(AccountFreeMargin() * Risk_Percent / 1000) / 100;
   if(lot<MarketInfo(Symbol(),MODE_MINLOT))lot=MarketInfo(Symbol(),MODE_MINLOT);
   if(lot>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Symbol(),MODE_MAXLOT);
   return (MathMin(NormalizeDouble(lot,PipMultiplier),MaxLotSize));
  }
//+------------------------------------------------------------------+
   if(_Digits==5 || _Digits==3)PipMultiplier=10;
   else PipMultiplier=1;
   slippage=Slippage*PipMultiplier;
   if(_Digits<4)
     {
      point=0.01;
     }
   else
     {
      point=0.0001;
     }
   return(0);
//+------------------------------------------------------------------+

 
Sebastien Pelle: En mis diferentes EA, se escribe así :

   double lot = MathCeil(AccountFreeMargin() * Risk_Percent / 1000) /


  1. El margen libre no tiene nada que ver con su riesgo. Es el stop loss de tu broker (50% de tu cuenta.)
  2. Deberías haber leído todo el hilo y no postear. Resumido:
    • Usted coloca el stop donde debe estar - donde la razón de la operación ya no es válida. Por ejemplo, al operar en un rebote de un soporte, el stop se sitúa por debajo del soporte.
    • Saldo de la cuenta * por ciento/100 = RIESGO = OrderLots * (|OrderOpenPrice - OrderStopLoss| * DeltaPerLot+ CommissionPerLot) (Tenga en cuenta que OOP-OSL incluye el SPREAD, y que DeltaPerLot suele ser de unos 10$/pip, pero tiene en cuenta los tipos de cambio del par frente a la moneda de su cuenta).
    • NO utilice TickValue por sí mismo - DeltaPerLot
    • Debe normalizar los lotes correctamente y comprobar el mínimo y el máximo.
    • También debe comprobar FreeMargin para evitar el stop out
Razón de la queja: