Erreurs, bugs, questions - page 2570

 
Igor Makanu:

Je n'arrive pas à trouver comment vérifier lePrintFormat.

Note

PrintFormat() n'est pas exécuté dans le testeur de stratégie en mode optimisation.

Des idées ?

Que diriez-vous deStringFormat et de la chaîne résultante dans un fichier ? (pour que chaque passe crée son propre fichier dans le dossier partagé - afin que le testeur ne les écrase pas).

 
Vladimir Simakov:
Comment pourrait-il en être autrement ? La mémoire de l'objet chaîne est allouée dans le tas, tandis que l'adresse mémoire à laquelle le texte commence est 0x00.

La mémoire est allouée uniquement pour le nom et la référence, mais pas pour l'objet lui-même, puisqu'il n'existe pas encore. Ce n'est pas le cas avec les types primitifs, la mémoire y est allouée au moment où la variable est créée, même sans initialisation.
Je ne veux pas m'embêter avec la terminologie. Tout le monde se comprend de toute façon.
Tout cela est évident.

 
Vladimir Karputov:

Que diriez-vous deStringFormat et de la chaîne résultante dans un fichier ? (créez un fichier différent pour chaque passage dans le dossier partagé - afin que le testeur ne les écrase pas).

bonne option, à tester

ZS : code à nouveau réécrit pour travailler plus rapidement dans l'optimiseur (les résultats étaient de 5h, maintenant 1.5h ! !!)

maintenant je suis tombé sur printf() dans l'aide, et j'ai décidé de vérifier toutes mes impressions, où je dois remplacer.... je l'ai remplacé et l'optimisation est devenue 22h .... j'ai trouvé où j'ai foiré, mais bien sûr j'ai immédiatement pensé que tout était dans printf() ! !!

)))


J'ai essayé de vérifier printf() dans l'optimiseur :

int xx=10;
void OnTick()
{  printf("1/x = %f",1/(xx--));
....

Jusqu'à présent, j'ai obtenu tout de suite ce que j'attendais :

2019.09.20 11:29:16.611 Core 1 passe génétique (0, 607) testée avec l'erreur "critical runtime error 503 in OnTick function (zero divide, module experts\)" à 0:00:00.048


Je m'attendais à ce que s'il est dit"PrintFormat() n'est pas exécuté.", alors il devrait l'obtenir.

 
Je sais que l'optimisation du code accélère l'exécution par un facteur de 450 :).
 
Igor Makanu:

bonne option, à tester

SZY : code à nouveau réécrit pour travailler plus rapidement dans l'optimiseur (les résultats étaient de 5h, maintenant 1.5 h !!!)

Maintenant, je suis tombé sur printf() dans l'aide, et j'ai décidé de vérifier toutes mes impressions, où je dois remplacer.... je l'ai remplacé et l'optimisation est devenue 22 heures .... J'ai trouvé où j'ai foiré, mais bien sûr, immédiatement pensé que la cause de tout dans printf() ! !!

)))


J'ai essayé de vérifier printf() dans l'optimiseur :

Jusqu'à présent, j'ai obtenu tout de suite ce que j'attendais :

2019.09.20 11:29:16.611 Core 1 passe génétique (0, 607) testée avec l'erreur "critical runtime error 503 in OnTick function (zero divide, module experts\)" à 0:00:00.048


Je m'attendais à ce que s'il est dit"PrintFormat() n'est pas exécuté.", alors il devrait l'obtenir.

Aha. Et obtenir une valeur différente de la variable xx dans le test unique et dans l'optimisation.

Seul l'appel à la fonction printf n'est pas exécuté.

 
Slava:

Aha. Et obtenir une valeur différente de la variable xx dans le test unique et dans l'optimisation.

Seul l'appel de la fonction printf n'est pas exécuté.

Oui, il est clair que l'utilisateur peut aussi le faire de cette façon.

mais comment vérifier printf() ?

HH : bien que, si le développeur a dit que ce n'est pas imprimé, alors nous n'avons pas à le vérifier.

 
Igor Makanu:


mais comment vérifier printf() ?

Comparer le temps d'une seule passe de l'optimisation et le temps d'une seule passe

 
Slava:

Je le reproduirai :

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

Bugs, bugs, questions

Alexey Kozitsyn, 2019.09.18 09:34

Quelques questions sur la plateforme :

1. Une fourchette de négociation autorisée sera-t-elle ajoutée pour le VP via MOEX (par exemple EURRUB_TOM) ? Pour l'instant, il n'est pas possible de savoir avec certitude si une limite sera mise en place, car il n'y a pas d'accès à la fourchette (prix maximum et minimum possibles). Veuillez ajouter.

2. Est-il possible d'ajouter au terminal et au méta-éditeur un état de sauvegarde automatique toutes les N minutes ? Très insuffisant, car en cas de déconnexion soudaine, on revient à l'état du début du programme avec perte de tous les changements ! Très stressant !

Sur le premier point : comprenez qu'il est impossible de trader normalement si vous ne connaissez pas les limites ! Pourquoi est-il possible d'obtenir ces limitations pour certains instruments et pas pour d'autres ?

 

l'aide est à nouveau incorrecte, je lis: https://www.mql5.com/ru/docs/math/mathmax

Функция возвращает максимальное из двух числовых значений.

double  MathMax(
   double  value1,     // первое число
   double  value2      // второе число
   );

Je vois qu'il n'y a pas d'options, fonction de type fmax() double , je cherche où j'ai pu perdre une valeur fractionnaire, après avoir cherché tout et n'importe quoi, je lance le test :

void OnStart()
{
   long slvl = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL);
   int sl = 300;
   Print(typename(fmax(slvl,sl)));
}

2019.09.20 18:06:34.194 tst (EURUSD,H1) long

ZS : Je réponds tout de suite, je lis l'aide jusqu'au bout et je vois la phrase : "Le type de valeur de retour correspond au type senior". ...imho, ce n'est pas grave, que dans 99% des cas il suffit de regarder dans l'aide pour la description de la fonction, que de chercher le sens caché entre les lignes - il est écrit type de résultat fmin() --> double - donc il n'y a pas d'options
 
Que signifie l'avertissement du journal des experts, une fois le script terminé ?
2 leaked strings left

Comment peut-on y remédier ?
Le traducteur traduit, deux cordes fuyantes sur la gauche. Mais ce n'est pas clair, à gauche de quoi, la ficelle ?

Le script utilise la bibliothèqueJAson .
Une chaîne Json est reçue de la dll via memcpy_s, dans la dll cette chaîne a le type const wchar_t*.
Dans le paramètre #import de la fonction exportée, déclaré commestring & str, c'est-à-dire par référence, et la chaîne elle-même est déclarée commestring str ;
Puis la chaîne str est désérialisée

js.Deserialize(str); 

Le problème est exactement la désérialisation de la chaîne entrante de memcpy_s.

Puisque si vous créez une chaîne de contrôle json dans le script

string str = "{\"s\":\"1000\"}";

le message d'avertissement n'apparaît pas.
Désérialisation d'une chaîne de caractères à partir d'une dll, le message d'avertissement apparaît à nouveau après la fin du script, il reste 2 chaînes de caractères fuitées

J'ai essayé de convertir une chaîne de caractères en tableau de caractères StringToCharArray, et de désérialiser le tableau de caractères.
Mais le problème persiste, et il reste 2 cordes fuyantes.
Quelle peut en être la raison ?