Características del lenguaje mql4, sutilezas y técnicas - página 20

 
fxsaber:

No lo hará. El algoritmo TimeCurrent se ve afectado muy indirectamente. Puedes tomar los tiempos del bar, etc.

Sólo hay que calcular la fecha del último domingo (en el historial de bares) de cualquier manera - para que haya bares antes del domingo y después del domingo. Para ello puede utilizar TimeLocal.

El resultado será siempre GMT+3 si la fecha de cotización se aproxima a las 00:00 (sesiones sin interrupción), o GMT+3+N - donde N es el número de horas desde el cierre de la sesión hasta la medianoche o desde la medianoche hasta la apertura. ¿Qué tiene que ver esto con la zona horaria de las citas?

 
Ivan Titov:

El resultado será siempre GMT+3 si hay citas alrededor de las 00:00 (sesiones de 24 horas), o GMT+3+N - donde N es el número de horas desde el cierre de la sesión hasta la medianoche o desde la medianoche hasta la apertura. ¿Qué tiene que ver esto con el huso horario de las cotizaciones?

No recuerdo en absoluto este tema, así que no puedo responder a la pregunta. Si hay alguna incoherencia, será mejor que empiece por demostrarla.

 
fxsaber:

No recuerdo este tema en absoluto, así que no puedo responder a la pregunta. Si hay alguna incoherencia, será mejor que empiece por demostrarla.

Aquí desde este código en el terminal BCS (símbolo ED-9.19) la funciónTimeServerGMT() devuelve la hora 2019.08.11 22:48:55 cuando TimeCurrent() es 2019.08.12 11:48:55.

 
Ivan Titov:

De este código en el terminal BCS (símbolo ED-9.19) la función TimeServerGMT() devuelve la hora 2019.08.11 22:48:55 cuando TimeCurrent() es 2019.08.12 11:48:55

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

Características del lenguaje mql4, sutilezas y trucos

fxsaber, 2018.03.29 14:32

// Работает для FOREX-символов, когда M1-история доступна за ближайшую неделю

No he prestado atención a este comentario en el código.

 
fxsaber:

No he prestado atención a este comentario en el código.

¿Estás diciendo que si los personajes que no son de Forex tienen historia disponible, no funcionará?

También aquí hay un ejemplo para forex en Alpari-Demo EURUSD,H1 en el probador:

Para 2019.02.19 14:00:00 vuelve 2019.02.19 11:00:00

Para 2019.06.19 14:00:00-retornos 2019.06.19 11:00:00

Aunque en invierno debería ser GMT+2 y en verano GMT+3 (EET).

 
Ivan Titov:

¿Estás diciendo que si los personajes que no son de Forex tienen un historial disponible, no funcionará?

No lo recuerdo. Pero probablemente fue escrito por una razón.


Es importante saber para qué sirve el desplazamiento GMT. Tal vez mi visión de este valor sea demasiado limitada, pero sólo veo su utilidad en una cosa: la posibilidad de sincronizar diferentes precios de BP entre sí.

No veo ninguna otra razón. Así que estas funciones deben ser capaces de sincronizar, por ejemplo, el EURUSD en diferentes corredores (con diferentes GMT-offset). Si esto no ocurre, sólo entonces hay un error.

 
fxsaber:

Es importante saber para qué sirve el desplazamiento GMT. Tal vez mi visión de este valor sea demasiado estrecha, pero veo su utilidad para una sola cosa: la capacidad de sincronizar los distintos precios de los BP entre sí.

No veo ninguna otra razón. Así que estas funciones deben ser capaces de sincronizar, por ejemplo, el EURUSD en diferentes corredores (con diferentes GMT-offset). Si esto no ocurre, sólo entonces hay un error.

O un precio BP con algunas noticias BP. ¿Entonces el truco no funcionará?

 
Andrey Khatimlianskii:

O un precio BP con algún tipo de noticia. ¿Fallará entonces el truco?

En primer lugar, se sincronizan los dos símbolos de divisas de las distintas fuentes. A partir de ahí, queda claro el sesgo de uno en relación con el otro. A partir de estos datos, el resto de los símbolos

de estas fuentes.

Sería bueno comprobar la sincronización con el calendario. Toma las noticias en invierno y en verano. Y ver si coincide o no.

 
Los comentarios no relacionados con este tema han sido trasladados a "Cualquier pregunta de los novatos en MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos".
 

Cálculo de la rentabilidad.

// Вычисляет профитность на истории не пересекающихся закрытых позиций.
bool GetSumGain( const double Risk, double &SumGain, double &MaxDD, double &RF, const string Symb, const int Magic = -1 )
{
  bool Res = true;
  const double Leverage = Risk * 100;  
      
  SumGain = 1;
  MaxDD = 0;
  RF = 1;

  double MaxGain = SumGain;
  double DDGain = SumGain;
    
  for (int i = OrdersHistoryTotal() - 1; (i >= 0) && (Res = (SumGain > 0)); i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL) &&
        (OrderSymbol() == Symb) && ((Magic == -1) || (OrderMagicNumber() == Magic)))        
    {
      SumGain *= 1 - Leverage * ((OrderType() << 1) - 1) * (1 - OrderOpenPrice() / OrderClosePrice());
      
      if (SumGain > MaxGain)
        MaxGain = SumGain;
      else if (1 - SumGain / MaxGain > MaxDD)
      {
        MaxDD = 1 - SumGain / MaxGain;
        
        DDGain = SumGain;
      }
    }
    
  RF = SumGain / DDGain;
      
  return(Res);
}


Aplicando

#property strict
#property  show_inputs

input int MagicNumber = 1; // Для какого мэджика вычислить профитность?

#define  D(A) DoubleToString(A, 2)

void OnStart()
{
  for (int i = 1; i <= 20; i++)
  {
    double SumGain, MaxDD, RF;    
    const double Risk = i * 0.1;
    
    if (GetSumGain(Risk, SumGain, MaxDD, RF, _Symbol, MagicNumber))   
      Print((string)MagicNumber + ": при риске " + D(Risk) +
                                  " увеличение было бы в " + D(SumGain) + " раза" +
                                  " с максимальной относительной просадкой по балансу " + D(MaxDD) + 
                                  ", фактор восстановления = " + D(RF));   
  }
       
}


Resultado

1: при риске 0.30 увеличение было бы в 2.16 раза с максимальной относительной просадкой по балансу 0.19, фактор восстановления = 2.01
1: при риске 0.20 увеличение было бы в 1.68 раза с максимальной относительной просадкой по балансу 0.13, фактор восстановления = 1.60
1: при риске 0.10 увеличение было бы в 1.30 раза с максимальной относительной просадкой по балансу 0.07, фактор восстановления = 1.27