Respuesta

Gestión monetaria Problem - % y tamaño de lote fijos

5 respuestas

Julianrob

Cliente, bbp_participant, comunidad, 54 respuestas.

Visitar el perfil

hace 9 años #113227

Hola, Mark,

 

En primer lugar muchas gracias por su apoyo útil hasta el momento. Parece que tengo dificultades con mi administración del dinero con este EA - Estoy usando MM predefinido en mis reglas de estrategia.

 

En la sección de estrategia tengo variables para tamaño de lote y porcentaje fijo definido como valor doble, pero cuando ejecuto este EA en AUDUSD o EURUSD con Lotsize en 0.10, siempre abre operaciones a 0.01 tamaño de lote.

 

Cuando establezco AccountRiskPerTrade en 5, abre 5 lotes de tamaño de operación para cada operación, pero no compone las ganancias. Por favor, consulte las imágenes adjuntas.

 

Para stop loss y take profit, estoy utilizando valores fijos que se establecen como variables, establecidos como un solo dígito y el tipo es int (entero)

 

Cualquier ayuda será bienvenida.

0

Mark Fric

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 9 años #128549

Hola,

 

en su elección de MM, los lotes se calculan dinámicamente en función del SL y de la equidad actual de la cuenta. LotSize se utiliza sólo si MM no se puede calcular - por lo general cuando usted no tiene SL definido para su orden.

Pero si el riesgo por operación es 0, no tiene sentido.

 

Si desea utilizar el tamaño de lote fijo, entonces usted debe utilizar "Sin administración del dinero", de lo contrario debe establecer cuánto % de la cuenta desea arriesgar en cada operación.

 

 

El problema con el tamaño calculado es que tiene la variable LotsDecimals establecida en 2, lo que significa que redondeará los lotes a 2 números decimales.

 

En no compone las ganancias - funcionará cuando establezca el riesgo por operación en un valor distinto de cero.

Mark
Arquitecto de StrategyQuant

0

Julianrob

Cliente, bbp_participant, comunidad, 54 respuestas.

Visitar el perfil

hace 9 años #128585

Gracias Mark, lo tengo.

0

loonet

Abonado, bbp_participant, comunidad, cliente, sq-ultimate, 15 respuestas.

Visitar el perfil

hace 9 años #129589

Hola Mark Soy Riccardo de Sapienza Finanziaria

Te advierto que en mi opinión EAW tiene un fallo en el cálculo del Riesgo de Gestión Monetaria con Fixed% del patrimonio de la cuenta.

En el sistema de comercio que estoy planeando fijé un riesgo por operación de 1%

Prueba a ver por ejemplo lo que ocurre en la operación # 79 que resalto en la imagen adjunta.

traderesult.jpg

 

Antes de la operación #79 en mi cuenta tengo un saldo de 21680 USD, y establezco un Riesgo por Operación 1%.

Significa que podría perder unos 217 USD si me quedo con el SL.

La operación # 79 es una operación de COMPRA con Precio de entrada en 1,3703 y SL en 1,3640.

La operación sale a mercado con 3:40 lotes, por lo que cada pip son 34 USD .

La operación se cierra con una pérdida de 1241 pipos (= 63 x 34).

En realidad, para respetar un Riesgo por Operación de 1%, el sistema de negociación debería haber abierto esa operación con 0,34 lotes y no con 3,40 lotes.

 

 

Así que intenté corregir la función EAW sqMMFixedRisk sustituyéndola por una función propia que informo a continuación :

//------ sqMMFixedRisk arreglado por Riccardo

double sqMMFixedRisk (int orderMagicNumber, int orderType)
  {
   
   doble LotSize=0;
  
   double _riesgoEnPorcentaje = RiesgoPorcentaje;
   double _máximoLotes = 5.0;
   
   double slSize = sqMMGetOrderStopLossDistance(orderMagicNumber, orderType) * gPointPow;


   double riskPerTrade=SaldoDeCuenta() *(_riskInPercent/100);
   
  
   if(slSize 0 && TickValue>0)
     {
      
      LotSize = MarketInfo(Symbol(),MODE_TICKSIZE) * riskPerTrade / (slSize * TickValue * MarketInfo(Symbol(),MODE_POINT) );

      int err=GetLastError();
      if(err==4013)
        { //ERR_ZERO_DIVIDE
         Verbose("Err: división por cero: StopLoss:",slSize," TickValue:",TickValue," LotSize:",LotSize);
         return(-1);
        }
     }

//--- Gestión de MAXLOT y MINLOT
   double Lote_más_pequeño = MarketInfo(Symbol(), MODE_MINLOT);
   double Largest_Lot = MarketInfo(Symbol(), MODE_MAXLOT);

   if (LotSize Largest_Lot) LotSize = Largest_Lot;

   if(Tamaño_lote > _lote_máximo) {
      Tamaño_lote = _lote_máximo;
   }
//--------------------------------------------



//--- LotSize redondeado respecto a Broker LOTSTEP
   if(MarketInfo(Symbol(),MODE_LOTSTEP)==1)
     {
      TamañoLote=NormalizeDouble(TamañoLote,0);
     }
   if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.1)
     {
      TamañoLote=NormalizeDouble(TamañoLote,1);
     }
   if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.01)
     {
      TamañoLote=NormalizeDouble(TamañoLote,2);
     }
   if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.001)
     {
      TamañoLote=NormalizeDouble(TamañoLote,3);
     }
//--------------------------------------------

   return (TamañoLote);

  }
//--------------------------------------------------------------------

Utilizándolo también puede evitar fijar el   Lotes Decimal  y el   Tipo de cambio de la divisa base  Parámetros de MM que se vuelven ininfluyentes.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visitar el perfil

hace 9 años #129667

SQ parece tener algunos problemas con el dimensionamiento correcto de la posición en lo que respecta a StopLoss / Divisa Base de la Cuenta y el par negociado, ya que todos esos factores deben tenerse en cuenta para calcular correctamente el tamaño del lote resultante para operar. Para ayudar, aquí está mi código que he refinado y utilizado durante 5 años en MT4. Tiene en cuenta el SL, la divisa en la que está nominado el par y la divisa en la que está nominada la cuenta en la que se opera para que siempre se pierda el % correcto si se alcanza un SL. Además, comprueba el tamaño de lote mínimo y máximo permitido y el tamaño de paso de lote y el margen requerido y se asegura de que el margen se utiliza sólo hasta 73% cuando se alcanza un SL completo para que no se detenga debido a un margen demasiado bajo (lo que sería una locura overtrading de todos modos). Tal vez Mark pueda adaptarlo para SQ.

 

Sólo tienes que pasarle el SL y la cantidad máxima de operaciones que abres posteriormente (lo uso para promediar y cuando todavía sólo quiero perder una cantidad específica en todas estas operaciones - para el comercio directo sólo le pasas "1"):

double GetLotSize(double TotalRiskPercentageAllTrades, double Stop_Loss, int MaximumTrades)
{
    int DígitosMúlti = 1;

    if (Dígitos == 5 || Dígitos == 3)
        DígitosMulti = 10;

    Stop_Loss = Stop_Loss * DigitsMulti;
    double dividido_por = 0
    double Lotes = 0;

    if (TotalRiskPercentageAllTrades != 0)
    {
        double RiskBalance = AccountBalance() * (TotalRiskPercentageAllTrades / 100,0);
        if (MarketInfo(Symbol(), MODE_TICKSIZE) != 0 && Stop_Loss != 0)
            divided_by = MarketInfo(Symbol(), MODE_TICKVALUE) * (MarketInfo(Symbol(), MODE_POINT) / MarketInfo(Symbol(), MODE_TICKSIZE));
        if (dividido_por == 0)
            Print("Gestión monetaria desactivada temporalmente debido a la división por: ", divided_by);
        si no
            Lotes = RiskBalance / divided_by / Stop_Loss;
    }

    Lotes = Lotes / OperacionesMáximas;
    Lotes = MathMax(Lotes, MarketInfo(Símbolo(), MODE_MINLOT));
    Lotes = MathMin(Lotes, MarketInfo(Símbolo(), MODE_MAXLOT));
    if (MarketInfo(Symbol(), MODE_MARGINREQUIRED) != 0)
        Lotes = MathMin(Lotes, Capital de la cuenta() / MarketInfo(Símbolo(), MODE_MARGINREQUIRED) * 0.73);
    Lotes = MathCeil(Lotes / MarketInfo(Symbol(), MODE_LOTSTEP)) * MarketInfo(Symbol(), MODE_LOTSTEP);
    Lotes = MathMax(Lotes, MarketInfo(Símbolo(), MODE_MINLOT));

    return(Lotes);
}


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Julianrob

Cliente, bbp_participant, comunidad, 54 respuestas.

Visitar el perfil

hace 9 años #129673

Gracias por la información.

 

Descubrí cómo habilitar tanto el riesgo de gestión de dinero % o la opción de tamaño de lote fijo en las variables en la codificación de la EA. La solución simple que utilicé fue crear una variable con valor booleano true/false y llamarlo; "UseRiskPercent"

 

Luego tengo una regla que abre la operación utilizando la gestión monetaria risk% sólo si la variable UseRiskPercent se establece en TRUE. Una segunda regla que es un clon de la primera y dice que si UseRiskPercent se establece en falso, utilice un tamaño de lote fijo en su lugar para el comercio.

 

Julian

0

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)