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
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.
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.
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é.
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é.
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);
}
voidOnStart()
{
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);
}
voidOnStart()
{
int i = GetDefaultValue<int>();
MqlTick Tick = GetDefaultValue<MqlTick>();
string Str = GetDefaultValue<string>();
}
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
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 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
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 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.
Je suis d'accord, je voulais juste souligner que le testeur devient un outil de plus en plus imprévisible.
Cela signifie que le résultat du testeur dépend fortement du type de compte.
Résultat
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 ?Fonctions rudimentaires (non requises)