Cálculo correcto del lote a partir del % de la fianza - página 3

 
7bec:

pero seguramente aquí debería ser AccountBalance y no AccountFreeMargin, entonces de repente el experto no está trabajando en un lote?

¿Has pensado mucho antes de hacer una pregunta a un niño de cuatro años? ¿De verdad crees que te va a responder?
 
zoritch:

¿Te lo has pensado mucho antes de hacer una pregunta a un niño de cuatro años? ¿Crees realmente que te va a responder?
¿Y si tienes suerte?
 
7bec:

pero seguramente aquí debería ser AccountBalance y no AccountFreeMargin, entonces de repente el experto no está trabajando en un lote?

No deberías usar esta función, me refiero a toda la función aquí que me gustó en el verano de 2010. Porque se puede imprimir de una manera mejor
 
wenay:

No deberías usar esta función, me refiero a toda la función aquí que me gustó en el verano de 2010. Porque hay mejores formas de imprimir


Por ejemplo, de lo que encontré en la red de la noche a la mañana, este es el que más me gustó.

Por supuesto, cualquier código se puede perfeccionar hasta el infinito, pero lo mejor es enemigo de lo bueno ;)

 

No soy un experto en programación MQL4, así que estoy buscando algunos consejos...

Este es el tercer día que me rasco la cabeza escribiendo un script para el cálculo de lotes. Mi idea es la siguiente: teniendo un depósito (condicional) de 1000 dólares el lote será de 0,05 (en realidad dividido por 20000).

Está bien cuando se trabaja con EURUSD, GBPUSD, AUDUSD, NZDUSD (es decir, comprando en la moneda del depósito) .... No sé cómo conseguir un lote para el USDJPY (o el USDRUR)... No sé cómo conseguir lotes en el USDJPY... Si me aburro, qué me falta????, dime dónde buscar otra cosa.

 
gochu:

No soy un experto en programación MQL4, así que estoy buscando algunos consejos...

Este es el tercer día que me rasco la cabeza escribiendo un script para el cálculo de lotes. Mi idea es la siguiente: teniendo un depósito (condicional) de 1000 dólares el lote será de 0,05 (en realidad dividido por 20000).

Está bien cuando se trabaja con EURUSD, GBPUSD, AUDUSD, NZDUSD (es decir, comprando en la moneda del depósito) .... ¿Cómo calculo el lote para CADJPY (o USDRUR)? 1000 libras se convierten (para hoy) en 113000 yenes o 38700 rublos, el lote no será de 5,65 y 0,19 en este caso ... Estoy trabajando demasiado, lo que me estoy perdiendo???? aconsejar dónde ir ... ¡Deja tus bromas y trolling para más tarde!


Considere el problema desde un ángulo ligeramente diferente: utilizar un lote equivalente a una determinada cantidad de dinero en la moneda del depósito.

Aquí hay un script para calcular el tamaño del lote en función del tamaño del contrato. El tamaño del contrato se fija en la moneda del depósito.

Archivos adjuntos:
 

A continuación se muestra mi manera de calcular el lote para un comercio (código antes de la actualización MQL4 así que no #property estricta):

extern double DealLevel = 5.0; // процент свободной маржи для сделки
//---
double LotDeal = NormalizeDouble(TradedLotFunc(DealLevel),2);

//--- TradedLotFunc() - start ----- сама функция
double TradedLotFunc(double Deal_f)
{  
   double MinLot_f  =MarketInfo(Symbol(),MODE_MINLOT);
   double MaxLot_f  =MarketInfo(Symbol(),MODE_MAXLOT);
   double LotStep_f =MarketInfo(Symbol(),MODE_LOTSTEP);
   double LotSize_f =MarketInfo(Symbol(),MODE_LOTSIZE);
   int    Leverage_f=AccountLeverage();
   //---
   int    i, coef; 
   double HighBorder;
   //---
   if(Deal_f<=0.0)  return(MinLot_f);
   if(Deal_f>100.0) Deal_f=100.0;
   double TradedLot=(AccountFreeMargin()*Deal_f/100)*Leverage_f/LotSize_f;
   if(TradedLot<=MinLot_f) return(MinLot_f);
   if(LotStep_f==0.001 || LotStep_f==0.01 || LotStep_f==0.1 || LotStep_f==1.0)
      TradedLot=MathRound(TradedLot/LotStep_f)*LotStep_f;
   else
   {  if(((TradedLot-MinLot_f)/LotStep_f)<=5.0) coef=1;
      else coef=MathRound((TradedLot-MinLot_f)/LotStep_f)-3;
      for(i=0; i<=100; i++)
      {  HighBorder=MinLot_f+(LotStep_f*coef)+(LotStep_f*i);
         if(TradedLot> HighBorder) continue;
         if(TradedLot==HighBorder) break;
         if(TradedLot< HighBorder)
         {  if(MathAbs(HighBorder-TradedLot)<=MathAbs(TradedLot-(HighBorder-LotStep_f)))
            {  TradedLot=HighBorder; break; }
            else
            {  TradedLot=HighBorder-LotStep_f;  break; }
   }  }  }
   if(TradedLot>=MaxLot_f) return(MaxLot_f);
   return(TradedLot);
}
//--- TradedLotFunc() - end -----
 

¿Realiza TradedLotFunc() siempre un valor superior a cero?

Si no, entonces el código se convierte en una mierda if(Deal_f<=0.0) return(MinLot_f); - eres miembro de un partido... y ametrallando de nuevo...

Y el resto es aún más divertido if(TradedLot<=MinLot_f) return(MinLot_f) ; - ¿Eres un hombre de fiesta? ...y la ametralladora se ha disparado de nuevo...

---------------------

en general, si suponemos que la función funciona correctamente, apenas sirve para abrir la primera y única orden en una cuenta de trading...

Apenas porque no tiene en cuenta ni las posiciones abiertas existentes ni el stop loss de la orden a abrir, es decir, es una versión escolar

Y nadie con sentido común utilizaría estas bondades al operar en una cuenta real...

 

Gracias por los consejos, pero no he formulado bien mi pregunta .... Quiero basar mi cálculo en la cantidad de dinero perdido/robado. Evidentemente, las garantías para el euro.quid y la libra.quid son diferentes, pero eso no es exactamente a lo que quiero llegar. Lo ideal sería tener una función que tomara parámetros como entrada:

1- depositar la moneda (voy a comprobar en quid y euro),

2 - Importe del depósito (1000)

3 - mi par de divisas de comercio (me gustaría comprobar CADJPY y USDCHF)

4 - el porcentaje de reducción de mi depósito (supongamos un 2%) y

5- un número determinado de puntos (100 pips para las plataformas de 4 dígitos y 1000 para las de cinco dígitos).

Parámetro de salida Quiero obtener el tamaño del lote.

Es decir, (todo está claro para los pares con cotizaciones inversas, EURUSD, GBPUSD, AUDUSD, NZDUSD, es decir, si la moneda de cotización es la moneda del depósito)... con el fin de

con un depósito de 1000 libras, pierdo / gano el 2% (es decir, 20 libras) cuando la moneda pasa de 100(4 dígitos)/1000 pips (5 dígitos), tengo que usar 0,02 lote.

(Quiero repetir que debería usar más dinero para operar con el GBPUSD que con el EURUSD, o especialmente con el NZDUSD, pero mi pregunta no es sobre el uso del dinero, sino sobre la pérdida nominal y/o el beneficio... por favor, aconséjeme... estoy perdiendo la cabeza... Llevo menos de una semana trabajando con este problema). Llegué al punto de que tenía que calcular el valor de la pérdida en las cotizaciones de divisas ... pero la forma de transformarlo (la pérdida) en el deseado me mucho de la moneda de depósito..... todo aquí me tropiezo ... Gracias por la ayuda.

 
gochu:

Gracias, por los consejos, pero no he formulado bien mi pregunta .... Quiero calcular un lote basado en la cantidad de dinero perdido/robado. ...

Mire la función https://docs.mql4.com/ru/marketinformation/marketinfo con el identificador de consulta MODE_TICKVALUE