Caractéristiques du langage mql5, subtilités et techniques - page 37

 

HistorySelect est une fonction très coûteuse. Mais HistorySelectByPosition est encore plus coûteux.

Par exemple, si nous devons trouver la première transaction de la position fermée, nous pouvons le faire de deux manières différentes

  1. Faites HistorySelectByPosition et trouvez ensuite l'affaire nécessaire dans la petite liste obtenue. Mais cette liste est formée comme suit Tout d'abord, TOUT l'historique est formé (équivalent à l'appel de l'HistorySelect "infini"). Ensuite, il y a une boucle FULL for à travers cette liste et seules les transactions qui ont un POSITION_IDENTIFIER approprié sont sélectionnées.
  2. Faites un HistorySelect (vous pouvez le faire à l'infini, mais il est préférable d'utiliser un intervalle, si vous le connaissez), puis dans la boucle for faites une pause, lorsque vous atteignez le DEAL_ENTRY correspondant.

Le deuxième article pourrait être beaucoup moins cher. Mais certainement pas plus cher.

L'appel des fonctions HistorySelect* dans le testeur est presque un gaspillage de ressources informatiques. C'est pourquoi vous devez toujours essayer de minimiser leur nombre. Surtout HistorySelectByPosition.

 
Pour les comptes de couverture dans le testeur
Vérification de l'activation des limiteurs réguliers au prochain tick.
Cela signifie que le résultat du test dépend fortement du type de compte.
 
fxsaber:
Pour les comptes alternatifs dans le testeurCela signifie que le résultat du testeur dépend beaucoup du type de compte.


Comme il est apparu dans l'un des fils de discussion voisins, le résultat du testeur dépend même du fait que le test est effectué sur un agent local ou sur l'un des agents d'un réseau distribué.

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

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


Comme il est apparu dans l'un des fils de discussion voisins, le résultat du testeur dépend même du fait que le test ait lieu sur l'agent local ou sur l'un des agents du réseau distribué.

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

Vous avez décrit un SAC, ce qui n'est pas dans le contexte de ce fil. L'écart d'exécution limite est la position officielle.
 
fxsaber:
Vous avez décrit BAG, ce qui n'est pas dans le contexte de ce fil. L'exécution différente des limiteurs est la position officielle.

Je suis d'accord, je voulais juste souligner que le testeur devient un outil de plus en plus imprévisible.
 
Yury Kirillov:

Je suis d'accord, je voulais juste souligner que le testeur devient un outil de plus en plus imprévisible.
Elle n'a jamais été prévisible, malheureusement.
 
fxsaber:
Cela signifie que le résultat du testeur dépend fortement du type de compte.
Cela ne s'applique qu'aux instruments négociés en bourse.
 
Tous les types standard sont adaptés les uns aux autres
void OnStart()
{
  string Str = "1.23qwedfg";
  
  Print((int)Str);
  Print((double)Str);
}

Résultat

1
1.23
 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Bugs, bugs, questions

fxsaber, 2017.04.10 16:53

Chers développeurs, comment se débarrasser des avertissements dans cette situation ?
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>();
}
 

Fonctions rudimentaires (non requises)

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