Avec quoi remplacer OnTradeTransaction() dans mql4 ? - page 3

 
Igor Makanu:

Si nous avons besoin d'une solution rapide, alors je placerais tous les tickets dans CArrayInt et je comparerais les tickets des ordres ouverts avec CArrayInt ; la méthode Search() est là ; s'il n'y a pas de ticket, nous arrêtons de comparer CArrayIntavec les compteurs des ordres ouverts, réinitialisez CArrayInt et écrivez à nouveau tous les tickets dans CArrayInt et activez le drapeau MyOnTradeTransaction décrit globalement - c'est un signe que la liste des ordres a changé - le code sera assez compact

Et quand nous avons besoin d'attraper quelque chose de plus qu'une perte d'ordre, c'est là que nous commençons à danser avec des diamants...

Vérifier OrdersTotal() n'indiquera pas, par exemple, l'activation d'un ordre en attente - le nombre d'ordres reste le même, tout comme les tickets... Et quand nous devons attraper le fait de modifier l'ordre/la position...

Tout, cependant, a déjà été pensé, fait et mis dans le domaine public avec des explications...

 
Alexey Viktorov:

Quels sont les avantages que je nie ? Je n'ai qu'un seul démenti. Je veux comprendre comment une chose fonctionne, et si elle ne peut être comprise que par quelqu'un d'autre que mon esprit, alors je ne suis pas à l'aise pour l'utiliser, et je renie tout ce qui ne me convient pas. Je vous ai déjà dit que vous écriviez plus de lettres que je ne pourrais en lire pour le reste de ma vie. Ne t'en prends pas à moi...

Les avantages sont qu'aucun événement ne peut se perdre. Contrairement à OnTrade() et OnTradeTransaction(). Mais vous ne croyez pas qu'un tel événement puisse se perdre... C'est pourquoi je dis - la discussion est inutile.

 
Artyom Trishkin:

Et quand il faut attraper autre chose qu'une commande manquante, c'est là que le tambourin commence...

Vérifier OrdersTotal() ne montrera pas l'activation d'un ordre en attente, par exemple - le nombre d'ordres est constant, les tickets, aussi... Et quand nous avons besoin d'attraper la modification d'une commande/position...

Pourtant, tout a déjà été pensé, réalisé et mis à disposition gratuitement avec des explications...

Je ne suggère pas d'analyser OrdersTotal, il n'est pas fiable.

Vous ne pourrez pas suivre les modifications de commande de cette manière, vous devrez écrire votre propre classe basée sur CArray ou CObj.

J'ai proposé une solution rapide, pas un travail de fond ;)

Artyom Trishkin:

Les avantages sont que nous ne pouvons pas perdre les événements.

peut si vous appuyez sur le bouton de réinitialisation du PC ..... Je n'ai pas suivi les articles depuis longtemps, mais je me souviens avoir demandé une technique pour sauvegarder l'état des classes dans un fichier au cas où le terminal serait redémarré - cela a-t-il été mis en œuvre ?
 
Igor Makanu:

Je ne suggère pas d'analyser OrdersTotal, ce n'est pas fiable.

ne peut être suivie de cette manière, vous devez écrire votre propre classe basée sur CArray ou CObj.

J'ai proposé une solution rapide, pas un travail de fond).

ils le peuvent si vous appuyez sur le bouton de réinitialisation du PC .... je n'ai pas suivi les articles depuis longtemps, mais je me souviens avoir posé une question sur la technique de sauvegarde de l'état des classes dans un fichier au cas où le terminal serait redémarré - est-ce déjà implémenté ?

Et vous pouvez aussi jeter un ordinateur du balcon - pour une perte fiable :) Et que le rouleau attende en bas. Ensuite, vous pouvez également couler du béton par-dessus :))))

Non, ce n'est pas mis en œuvre - ce n'est pas la chose principale maintenant. C'est presque la fin - c'est plus facile de tout faire de la même manière en une seule fois, plutôt que de le diviser en différentes tranches de temps. Pour moi.

 
Artyom Trishkin:

Non, pas mis en œuvre - ce n'est pas l'essentiel maintenant. C'est presque la fin - il est plus facile de faire tout ce qui est du même type en une seule fois, plutôt que de le diviser en différentes tranches de temps. Pour moi.

OK, attendons.

Mais je me suis avéré être le contraire - j'ai déjà rencontré ce problème - je n'ai pas mis la capacité d'enregistrer dans la structure du programme, et a commencé à écrire l'enregistrement dans un fichier, très encombrant tout a tourné.... J'ai déjà rencontré ce problème - je n'ai pas mis la sauvegarde dans un fichier dans la structure du programme - j'ai commencé à écrire la sauvegarde dans un fichier et cela s'est avéré très lourd - j'ai abandonné et j'ai réécrit la plupart du code à partir de zéro à nouveau - c'est un travail minutieux, je vais devoir analyser tout le code source

 
fxsaber:

Je vous serais reconnaissant si vous pouviez fournir un exemple reproductible (sans l'enquête sur l'historique des échanges).

Je serais heureux de vous rendre service. J'ai malheureusement des difficultés à forger un code court et fonctionnel à partir d'un code très large et complexe. Qui est également très spécifique (par exemple, n'ouvre qu'une seule pose à la fois).

Pour Slava, j'ai donc dû poster un squelette de code au lieu d'un exemple compilable.

Mais je vais essayer de faire quelque chose, sinon ma conscience va me tourmenter. Mais pas rapidement.

PS : Je veux dire que j'ai une très faible productivité dans l'écriture du code. Je ne le prends qu'à force de persévérance. Et en même temps, je suis très occupé à rendre l'EA opérationnel sur un compte réel dès que possible. J'envie votre productivité.

 
Igor Makanu:

OK, attendons.

Mais je me suis avéré être le contraire - j'ai déjà rencontré ce problème - je n'ai pas mis la capacité d'enregistrer dans la structure du programme, et a commencé à écrire l'enregistrement dans un fichier, très encombrant tout a tourné.... J'ai déjà rencontré ce problème - je n'ai pas mis l'enregistrement dans un fichier dans la structure du programme et j'ai commencé à écrire l'enregistrement dans un fichier, il s'est avéré être très lourd - puis j'ai abandonné et réécrit la plupart du code à partir de zéro à nouveau - imho, si vous prévoyez d'enregistrer dans un fichier, vous devez l'implémenter immédiatement, au moins avec des "stubs", sinon vous devrez rassembler tout ce que vous voulez enregistrer dans chaque classe - un travail très laborieux, en fait vous devrez analyser le code source entier

Les méthodes de sauvegarde et de chargement sont initialement déclarées. Et dans l'objet de base CObject de la bibliothèque standard. L'implémentation de la sauvegarde dans un fichier dans chaque objet de la bibliothèque peut être décrite pour un ou deux objets. Mais écrire dans chaque article des descriptions des méthodes de sauvegarde/chargement - sera plutôt ennuyeux de lire pratiquement la même "action" d'un article à l'autre, et simplement omettre - n'est pas agréable pour le lecteur (et c'est pourquoi certaines personnes disent qu'il leur est difficile de lire de tels volumes d'articles, je pense - vous aussi). Par conséquent - cette tâche pour la description dans deux ou trois articles plus proches de la fin - à la fois dans un coup, et pas trop accablant pour le lecteur.

Une autre chose serait que si rien n'était décrit dans les articles - alors bien sûr, il serait nécessaire de le faire immédiatement. Tout dépend des spécificités de l'histoire et des objectifs. Si le but - kodobaza, alors tout d'un coup, et si le but - articles de formation - alors progressivement - le moment venu. J'ai la deuxième option.

 
Ihor Herasko:

Le OnTradeTransaction a été mentionné à nouveau. Il n'y a pas de problème pour garantirOnTradeTransaction en cas de perte de connexion, etc., car le terminal synchronisera toujours l'environnement de négociation une fois la connexion rétablie. PuisqueOnTrade est secondaire, cela signifie que vous pouvez leur faire confiance. Si les développeurs eux-mêmes n'ont pas fait d'erreur, mais qu'ils ont supprimé la clause, cela signifie que tout est OK.

 
Artyom Trishkin:

Mais insérer dans chaque article des descriptions de méthodes de sauvegarde/chargement - sera plutôt ennuyeux de lire presque la même "action" d'un article à l'autre, et simplement omettre - n'est pas agréable pour le lecteur (et donc certains disent qu'ils ont des difficultés à lire de tels volumes d'articles, je pense - vous aussi). Par conséquent - cette tâche pour la description dans deux ou trois articles plus proches de la fin - à la fois en un seul coup, et sans trop charger le lecteur.

Je n'ai pas dit que le volume d'articles à lire est très important, mais j'ai écrit que la quantité de sources est énorme et qu'il est impossible de savoir comment l'utiliser sans une sorte d'aide/FAQ.

J'attendrai la mise en œuvre de la sauvegarde d'une telle quantité de données, il est intéressant de voir à quoi cela ressemblera.

 
Igor Makanu:

La mise en œuvre de la sauvegarde d'un tel volume de données devra attendre, il sera intéressant de voir à quoi cela ressemblera.

ok