Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1055

 
Igor Makanu:

todo esto está claro, pero ¿cómo se calcula correctamente la diferencia entre 2 precios en puntos enteros?

Aquí es donde se puede aplicar el redondeo. Tú decides en qué sentido, o simplemente en un número entero.

int pips_profit = (int)MathFloor(OrderOpenPrice()-OrderClosePrice())/_Point);
 
Igor Makanu:

¿Y esto es correcto? En el bucle de pedido, ¿se recalcularía cada vez SymbolInfoDouble(OrderSymbol(), SYMBOL_POINT); porqueOrderSymbol() será diferente cada vez?

El problema aquí es ligeramente diferente - el beneficio total en pips para todos los símbolos.

 
Konstantin Nikitin:

Aquí es donde se puede aplicar el redondeo. Tú decides en qué sentido, o simplemente en un número entero.


bueno sí, se olvidó de tales construcciones, en las funciones de cálculo del lote de Kim había un redondeo correcto
fxsaber:

Así que la tarea allí es ligeramente diferente - el beneficio total en pips para todos los símbolos.

OK, pero por qué const - ¿cómo se comporta el compilador si el bucle va a cambiar const?

PD: el código es legible, pero hay que comprobarlo, nunca lo he usado

 
Igor Makanu:

Bien, pero por qué const - ¿cómo se comporta el compilador si se cambia la const en el bucle?

PD: el código es legible, pero hay que comprobarlo, nunca lo he usado

En cada paso se creará una variable. const - en este paso no está previsto cambiar en ningún sitio.

 
fxsaber:

Cada paso creará una variable. const - no hay planes para cambiar en cualquier lugar en este paso.

¿es el paso una iteración del bucle?

Todavía no está claro cómo se comportará dicha construcción, necesitamos un script para comprobar

 
fxsaber:

Por lo tanto, el objetivo es ligeramente diferente: el beneficio total en pips en todos los símbolos.

Bueno, entonces es así

short pipsProfitOrder = (short)MathFloor( ( OrderProfit()+OrderSwap()+OrderCommission() ) / (SymbolInfoDouble(_OrderSymbol(), SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );

Yo calculo los beneficios en pips de una posición, pero creo que no habrá problema en aplicármelo

 
Igor Makanu:

¿un paso es una iteración de un ciclo?

Sí.

todavía no está claro cómo se comportaría una construcción de este tipo, necesitamos un script para comprobar

He aquí un ejemplo de uso conveniente de la vida de una variable

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Discussion on "LifeHack para trader: mezclando ForEach en defines (#define)"

fxsaber, 2018.02.14 10:54

Medición del rendimiento

#define  BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}

double GetAsk()
{
  static MqlTick tick = {0};
  
  return(SymbolInfoTick(Symbol(),tick) ? tick.ask : 0);
}

#define  AMOUNT 1 e6

void OnStart()
{
  double Sum = 0;
  
  BENCH(for (int i = 0; i < AMOUNT; i++) Sum += GetAsk())
  BENCH(for (int i = 0; i < AMOUNT; i++) Sum += SymbolInfoDouble(_Symbol, SYMBOL_ASK))
  
  Print(Sum);
}


Resultado

Time[for(inti=0;i<AMOUNT;i++)Sum+=GetAsk()] = 78952
Time[for(inti=0;i<AMOUNT;i++)Sum+=SymbolInfoDouble(_Symbol,SYMBOL_ASK)] = 162606
 

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategia

FAQ de principiantes MQL5 MT5 MetaTrader 5

Konstantin Nikitin, 2019.06.04 19:58

Pues bien

short pipsProfitOrder = (short)MathFloor( ( OrderProfit()+OrderSwap()+OrderCommission() ) / (SymbolInfoDouble(_OrderSymbol(), SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );

Yo calculo los beneficios en pips de una posición pero creo que no tengo problema en aplicármelo

Esto se llama conversión de beneficios con costes en pips VERDADEROS (no al cierre).

 
fxsaber:

Esto se llama una transferencia de costo-beneficio en puntos ACTUALES (no en el momento del cierre).

Así es como tiene que traducir el beneficio en puntos. Al calcular los cerrados, hay que seguir tomando como base el valor del punto. El beneficio en pips no tiene que ser igual a la diferencia en pips entre los precios de apertura y cierre. y los precios de cierre.

 
Konstantin Nikitin:

Así que tiene que traducir el beneficio en puntos.

A veces piensan que el beneficio = OrderProfit().

Al calcular un símbolo cerrado, debe seguir utilizando el valor del pip. El valor del pip del beneficio no tiene por qué ser igual a la diferencia en pips entre el precio de apertura y el de cierre.

El valor de los puntos al cierre no es igual al valor de los puntos en el momento del cálculo. Además, es posible que en el momento del cálculo el símbolo no se encuentre en el Market Watch.

Por eso se calculan tanto los valores de los puntos como su valor en el momento del cierre.

Razón de la queja: