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

 

HistorySelect es una función muy cara. Pero HistorySelectByPosition es aún más caro.

Por ejemplo, si necesitamos encontrar el primer trato de la posición cerrada, podemos actuar de dos maneras

  1. Hacer HistorySelectByPosition y luego encontrar el acuerdo necesario de la pequeña lista obtenida. Pero esta lista se forma de la siguiente manera En primer lugar se forma TODO el historial (equivalente a la llamada del "infinito" HistorySelect). A continuación, se realiza un bucle FULL for a través de esta lista y sólo se seleccionan las ofertas que tienen un POSITION_IDENTIFIER adecuado.
  2. Haga HistorySelect (puede "infinito", pero es mejor usar un intervalo, si se conoce), luego en el bucle for haga un break, cuando llegue al DEAL_ENTRY correspondiente.

El segundo punto podría ser mucho más barato. Pero ciertamente no es más caro.

Llamar a las funciones HistorySelect* en el probador es casi un desperdicio de recursos computacionales. Por lo tanto, siempre hay que tratar de minimizar su número. Especialmente HistorySelectByPosition.

 
Para las cuentas de cobertura en el probador
Comprobación de la activación de los limitadores regulares en el siguiente tick.
Esto significa que el resultado de las pruebas depende en gran medida del tipo de cuenta.
 
fxsaber:
Para las cuentas de cobertura en el probadorEsto significa que el resultado del probador depende en gran medida del tipo de cuenta.


Como se ha visto en uno de los hilos vecinos, el resultado de la prueba depende incluso de si la prueba se realiza en un agente local o en uno de los agentes de una red distribuida.

https://www.mql5.com/ru/forum/1111/page1880#comment_4904481

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • www.mql5.com
Форум алго-трейдеров MQL5
 
Yury Kirillov:


Como se ha visto en uno de los hilos vecinos, el resultado del comprobador depende incluso de si la prueba tiene lugar en el agente local o en uno de los agentes de la red distribuida.

https://www.mql5.com/ru/forum/1111/page1880#comment_4904481

Has descrito una BOLSA, que no está en el contexto de este hilo. La posición oficial es la de limitar la varianza de la ejecución.
 
fxsaber:
Has descrito a BAG, que no está en el contexto de este hilo. La ejecución diferente de los limitadores es la posición oficial.

De acuerdo, sólo quería señalar que el probador se está convirtiendo en una herramienta cada vez más impredecible.
 
Yury Kirillov:

Estoy de acuerdo, sólo quería señalar que el probador se está convirtiendo en una herramienta cada vez más impredecible.
Por desgracia, nunca ha sido previsible.
 
fxsaber:
Esto significa que el resultado del probador depende en gran medida del tipo de cuenta.
Esto sólo se aplica a los instrumentos negociados en bolsa.
 
Todos los tipos estándar están adaptados entre sí
void OnStart()
{
  string Str = "1.23qwedfg";
  
  Print((int)Str);
  Print((double)Str);
}

Resultado

1
1.23
 

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

Bichos, errores, preguntas

fxsaber, 2017.04.10 16:53

Estimados desarrolladores, ¿cómo deshacerse de los avisos en esta situación?
template <typename T>
T GetValue()
{
  T Res; // possible use of uninitialized variable 'Res'
  
  return(Res);
}

void OnStart()
{
  MqlTick Tick = GetValue<MqlTick>();
  int i = GetValue<int>();
}
Lifehack
template <typename T>
const T GetDefaultValue( void )
{
  struct STRUCT_TYPE
  {
    const T Value;
  };
  
  const STRUCT_TYPE Res = {0};
  
  return(Res.Value);
}

void OnStart()
{
  int i = GetDefaultValue<int>();
  MqlTick Tick = GetDefaultValue<MqlTick>();
  string Str = GetDefaultValue<string>();
}
 

Funciones rudimentarias (no necesarias)

  • StringToDouble
  • StringToInteger
  • StringToTime
  • StringToColor
  • StringAdd
  • StringConcatenate
  • GetPointer