Características del lenguaje mql5, sutilezas y técnicas - página 56

 
Andrey Khatimlianskii:

¿Ha medido el rendimiento? Tengo curiosidad por saber cuánto más lento será. Especialmente con indicadores personalizados.

No está medido, pero no debería ser más lento que en MT4.

Medición
#define  AMOUNT 1 e7
void OnStart()
{  
  int handle = iMA(NULL, PERIOD_CURRENT, 1, 0, MODE_SMA, PRICE_CLOSE);
  const ulong StartTime = GetMicrosecondCount();
  
  for (int i = 0; i < AMOUNT; i++)
    handle = iMA(NULL, PERIOD_CURRENT, 1, 0, MODE_SMA, PRICE_CLOSE);

  Print((string)((GetMicrosecondCount() - StartTime) / AMOUNT) + " mcs per iMA");
  Print(handle);    
}


El resultado es

0.3383469 mcs per iMA


Un tercio de microsegundo para probar. Esto significa que una carrera por cada 10 millones de ticks se ralentizará tres segundos.

 
fxsaber:

Medición

Es extraño que no hayas comparado la creación de un asa + la obtención de un valor en el bucle con tu versión original, esa es la diferencia que interesa.

 
Andrey Khatimlianskii:

Es extraño que no hayas comparado la creación del asa + la obtención del valor en el bucle con tu versión original, que es la diferencia que interesa.

Porque los valores se toman del mismo mango. iMA siempre devuelve el mismo mango con los mismos parámetros.

 
fxsaber:
En MQL5 es bastante aceptable escribirlo así

Es decir, "crear" un asa en cada tic. No se crearán nuevas entidades de indicadores, el tiempo se perderá sólo en la comparación de los parámetros de entrada de iMA con aquellos indicadores que se iniciaron en ticks anteriores. Es decir, exactamente lo mismo que se hace en MT4.

Un diseño interesante.

Por favor, compruebe la velocidad con la creación de un mango en OnInit, con este enfoque.

 
Vitaly Muzichenko:

Por favor, compruebe la velocidad con la creación de la manija OnInit, con este enfoque.

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

Características del lenguaje mql5, sutilezas y trucos

fxsaber, 2017.10.05 09:09

Una sola carrera por cada 10 millones de ticks se ralentizará tres segundos.

Eso comparado con tu opción.

 

¿Cómo puedo sustituir las funciones estándar OrderCalcProfit() y OrderCalcMargin() para que sean multiplataforma? Parece que ya estaba aquí en alguna parte, pero no lo encuentro - tal vez tenía sueño... Pero me habré despertado a la hora de buscar :)

 
Artyom Trishkin:

¿Cómo puedo sustituir las funciones estándar OrderCalcProfit() y OrderCalcMargin() para que sean multiplataforma? Parece que ya se ha publicado en algún sitio, pero no lo encuentro aquí - tal vez estaba despierto... Pero debo haberme despertado durante una hora de búsqueda :)

https://www.mql5.com/ru/search#!keyword=myordercalcmargin&module=mql5_module_forum

MQL5.Community
MQL5.Community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 
fxsaber:

https://www.mql5.com/ru/search#!keyword=myordercalcmargin&module=mql5_module_forum

:)

SymbolInfoMarginRate() no está en quad. La pregunta se planteó de la siguiente manera:

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

Peculiaridades del lenguaje mql5, consejos y trucos

Artyom Trishkin, 2017.10.06 06:36

¿Qué puede sustituir a las funciones estándar OrderCalcProfit() y OrderCalcMargin() para que sean multiplataforma? Parece que ya estaba en algún sitio, pero no lo encuentro aquí - puede ser que tenga demasiado sueño... Pero debería haberme despertado durante una hora de búsqueda :)

Y no hay nada sobre OrderCalcProfit()
 

Un regalo, no una oportunidad lingüística

struct MQLTICK : public MqlTick
{
  bool operator >( const MqlTick &Tick )
  {
    return(this.bid > Tick.bid);
  }

  bool operator <( const MqlTick &Tick )
  {
    return(this.ask < Tick.ask);
  }
};

void OnStart()
{  
  MQLTICK Ticks[];
  
  Print(CopyTicks(_Symbol, Ticks));
  
  Print(Ticks[0] < Ticks[1]);
}
 
fxsaber:

Un regalo, no una oportunidad lingüística

Un regalo en forma de un escurridizo error de ejecución

struct MqlTick1 : MqlTick {        };
struct MqlTick2 : MqlTick { int i; };
void Copyticks( MqlTick& []) {}
void OnStart()
{
        MqlTick1 ticks1[];
        MqlTick2 ticks2[];
        int i1 = ::CopyTicks( _Symbol, ticks1 ); //нормально ??????????????
                   Copyticks(          ticks1 ); //error: 'ticks1' - parameter conversion not allowed
        int i2 = ::CopyTicks( _Symbol, ticks2 ); //нормально ??????????????
        Print( "i2=", i2, ":", GetLastError()); //Результат: -1:4006
}

¿Por qué ::CopyTicks es mejor que Copyticks?

Y por qué el resultado es siempre -1. Estos errores (4006) deberían notificarse en tiempo de compilación