Répondre

Bug ou problème sur mon VPS, j'ai beaucoup de terminaux et d'EAs qui fonctionnent sur mon VPS mais parfois SL+TP n'est pas défini sur l'ordre, pourquoi ?

24 réponses

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Visiter le profil

Il y a 8 ans #114929

Bug ou problème sur mon VPS, j'ai beaucoup de terminaux et d'EAs qui fonctionnent sur mon VPS mais parfois SL+TP n'est pas défini sur l'ordre, pourquoi ?

 

Est-ce que c'est à cause de mon VPS qui est à la traîne, ou est-ce qu'il y a un problème avec le code mql4, mon VPS utilise régulièrement beaucoup de CPU+MEMOIRE à cause des nombreux terminaux et EAs qui fonctionnent,

peut-être à cause de cela...

 

c'est très rare mais cela m'est arrivé la 3ème fois déjà...

 

 

est-ce que c'est arrivé à quelqu'un ici aussi ?.., merci...

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Visiter le profil

Il y a 8 ans #136121

Non, j'obtiens l'erreur 146 "Trade context is busy", rien d'autre..,

 

hier j'ai modifié le code mql4 et ajouté la commande pour attendre si le contexte est occupé, mais j'ai toujours la même erreur, BTW cette erreur n'arrive que sur les comptes DEMO avec le compte live je n'ai aucune erreur...,

qu'est-ce que c'est ?

0

mikeyc

Client, bbp_participant, communauté, 877 réponses.

Visiter le profil

Il y a 8 ans #136122

Le contexte commercial occupé est soit un terminal surchargé, soit un courtier qui prend beaucoup de temps pour traiter les ordres.

 

Si le problème persiste après un redémarrage, je chercherais un autre courtier.

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Visiter le profil

Il y a 8 ans #136124

J'ai aussi essayé avec les mêmes EA sur le serveur Global Prime Demo, c'est la même chose..,

mais j'ai déjà modifié le code mql4 à nouveau, donc je vais voir ce qui va se passer ensuite,

Je vais faire une mise à jour et si j'ai résolu le problème, je posterai la solution,

 

nous vous remercions de votre participation.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visiter le profil

Il y a 8 ans #136155

C'est simple : vous ne devez JAMAIS exécuter plus de 8 EA par instance MT4 si vous voulez une exécution fiable des ordres (ce que vous voulez très probablement si vous tradez avec de l'argent réel) ! C'est l'une des nombreuses limitations du terminal MT4 (il y a quelques années, il n'y avait qu'un seul thread par instance MT4 !) et cela n'a rien à voir avec votre courtier (@mikeyc : si le courtier est surchargé, vous n'obtiendrez pas "trade context is busy" mais "trade timeout", bien que de nos jours, je n'ai pas encore vu l'un des courtiers sérieux afficher cette erreur).

C'est simplement parce qu'il ne peut y avoir que 8 opérations d'ordre à traiter en même temps dans chaque terminal MT4 (soit ouvrir un nouvel ordre, modifier un ordre existant, fermer un ordre existant) et vous ne pouvez rien y faire puisque le terminal MT4 de merde est conçu comme ça.

 

Il existe certainement des solutions de contournement et l'EA pourrait simplement réessayer de modifier l'ordre s'il a échoué auparavant en raison d'un contexte commercial occupé ou l'EA pourrait vérifier si le contexte commercial est libre ou non et attendre s'il ne l'est pas avant de passer à sa prochaine commande pour faire quelque chose avec un ordre. Mais ces solutions ne sont pas très sûres ni acceptables pour le trading en direct car elles retardent toujours les choses d'une manière ou d'une autre. Si l'EA réessaie après une erreur, le prix peut avoir déjà bougé trop loin. En particulier pendant les nouvelles, votre ordre peut ne jamais obtenir le SL nécessaire parce qu'il s'est déjà déplacé au-delà de celui-ci et qu'il ne peut tout simplement plus être fixé à la valeur souhaitée à ce moment-là. Il en va de même pour l'attente de la libération du contexte de la transaction, ce qui prend beaucoup de temps et n'est pas très sûr à cause de cela aussi.

 

La seule solution si vous êtes sérieux au sujet du trading en direct : exécuter seulement 8 EA's par instance MT4 ! C'est aussi simple que cela et il n'y a aucun moyen de contourner le problème avec des hacks si vous voulez une exécution / modification d'ordre fiable et rapide tout le temps. Si votre VPS est assez rapide comme vous le dites, il n'y a pas de problème. Personnellement, j'ai 7 terminaux MT4 en cours d'exécution, chacun avec 8 EA's (pas tous ceux de SQ). Il suffit de copier votre dossier MT4 existant dans un nouveau dossier et c'est tout, vous avez votre prochaine instance. La seule chose que vous devez garder à l'esprit est une autre limitation fixée par le terminal MT4 (oui, encore une fois !): vous ne pouvez lancer que 32 instances MT4 par machine. La 33e ne se lancera tout simplement pas, même si vous la copiez à nouveau dans un autre répertoire. MQ a introduit cela après l'arbitrage de latence de BTN Lightning, qui "arnaquait" massivement ces pauvres courtiers MT4 en faisant tourner jusqu'à 200 instances MT4 sur des méga-serveurs. J'ai déjà essayé de contourner cette limitation, mais ce n'est pas facile puisque MT4 lui-même est enveloppé dans une machine virtuelle via la méthode de protection contre la copie Themida. Conclusion : le nombre maximum d'EA que vous pourrez exécuter de manière fiable sans avoir besoin d'un autre VPS est de 32 x 8 = 256 EA.

 

P.S. : Si vous voulez la solution la moins fiable (attendre que le contexte de transaction se libère), utilisez mon code (je l'ai testé en direct et j'ai exécuté 50 EA dans une instance MT4 avec ce code sans qu'aucun ordre n'ait jamais lancé d'erreur concernant le contexte de transaction qui n'était pas libre) :

int CheckTradeContext()
{

uint WaitLimitTradeContext = 120 ; //secondes

    if (!IsTesting() && !IsTradeAllowed() && !IsStopped())
    {
        int ticks = GetTickCount() ;
        Print("Trade Context Is Busy ! Waiting Until It Becomes Free...") ;
        while (true)
        {
            RefreshRates() ;
            Print("Attendre que le contexte commercial se libère...") ;
            if (IsStopped())
            {
                Print("L'expert a été arrêté par l'utilisateur !") ;
                return(-1) ;
            }
            if (GetTickCount() - ticks > 1000 * WaitLimitTradeContext)
            {
                Print("La limite d'attente maximale de " + WaitLimitTradeContext + " Seconds a été dépassée !") ;
                return(-2) ;
            }
            if (IsTradeAllowed())
            {
                Print("Le contexte commercial est devenu libre !") ;
                return(0) ;
            }
            Sleep(50) ;
        }
    }
    //Imprimez("Le contexte commercial est gratuit !") ;

    return(1) ;
}

Ensuite, avant tout envoi / modification / clôture d'ordre : if (CheckTradeContext() >= 0) ....


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Visiter le profil

Il y a 8 ans #136171

Merci Geektrader,

J'ai cependant déjà créé une fonction pour cela :

void CheckIfBusy()
{
  if(!IsTesting())
  while(IsTradeContextBusy()){//Print("#ERROR! : Ordre ("+OrderType()+") - Retardé.") ;
  Sleep(50);RefreshRates();}
}

mais la vôtre est plus sophistiquée avec un timer, j'ai déjà édité tous mes EAs avec cette nouvelle fonction :),

Merci d'avoir pris le temps de rédiger cet énorme article,

sur le truc des 8 fils et le lien de la mise à jour officielle des méta-citations : https://forum.mql4.com/54431

Je vous remercie donc une fois de plus de l'avoir clarifié et d'avoir ajouté des informations à ce sujet !

D'après ce que j'ai compris, il n'y a aucun problème à faire fonctionner plusieurs instances MT4 sur le même compte de trading, il suffit de régler les MagicNumbers différemment entre tous les EA...,

Et si les EA sont très actifs dans une certaine mesure, dois-je alors diviser le portefeuille non pas par 8,8,8,8 mais par 4,4,4,4 EA sur la même instance ?

Merci, j'attends votre réponse.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visiter le profil

Il y a 8 ans #136179

C'est bon d'entendre que vous êtes sur la voie d'un contexte de trading non-busy :) C'est vraiment facile, vous n'avez rien à faire de spécial, il suffit d'utiliser 8 EAs par instance MT4, de les configurer de la même manière que s'ils étaient dans un seul terminal (numéro magique différent, etc. bien sûr). Vous pouvez exécuter un nombre illimité de connexions à votre courtier sur le même compte, ce n'est pas un problème (au moins 32 connexions/terminaux sur le même compte sont possibles, c'est ce que j'ai testé). S'ils sont très actifs, cela n'a pas d'importance, chaque terminal MT4 peut effectuer 8 opérations de trading en parallèle, peu importe l'activité des EAs tant que vous ne faites pas plus de 8 requêtes à la fois par terminal, cela fonctionnera très bien, même si chaque EA envoie une commande toutes les 1ms :)


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Visiter le profil

Il y a 8 ans #136180

C'est bon d'entendre que vous êtes sur la voie d'un contexte de trading non-busy :) C'est vraiment facile, vous n'avez rien à faire de spécial, il suffit d'utiliser 8 EAs par instance MT4, de les configurer de la même manière que s'ils étaient dans un seul terminal (numéro magique différent, etc. bien sûr). Vous pouvez exécuter un nombre illimité de connexions à votre courtier sur le même compte, ce n'est pas un problème (au moins 32 connexions/terminaux sur le même compte sont possibles, c'est ce que j'ai testé). S'ils sont très actifs, cela n'a pas d'importance, chaque terminal MT4 peut effectuer 8 opérations de trading en parallèle, peu importe l'activité des EAs tant que vous ne faites pas plus de 8 requêtes à la fois par terminal, cela fonctionnera très bien, même si chaque EA envoie une commande toutes les 1ms :)

 

Merci encore une fois geektrader :),

J'ai 29 EAs et je les ai répartis sur 5 MT4, 6x6x6x6x5, ce sont des EAs activés et qui tradent quotidiennement, donc juste au cas où, j'en ai mis seulement 6 par terminal,

 

Merci mon pote, c'est une information très importante, je ne savais pas qu'il y avait 8 fils, je pensais qu'il n'y en avait qu'un par borne, héhé.

bonne semaine et beaucoup de pips verts à vous ! B)

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visiter le profil

Il y a 8 ans #136181

Oui je vois, mes EA traitent toutes les 15 minutes (modifiant les ordres en attente - 8 à la fois à chaque fois), c'est très bien si vous utilisez 8 par terminal, même si ce sont des "scalpeurs fous", puisque chaque EA est traité en série uniquement dans le langage MQL4, avec 8 EA vous n'obtiendrez jamais un contexte de transaction occupé - pas besoin de gaspiller des ressources vraiment. Vous pouvez utiliser 8 EA par terminal en toute sécurité.

 

Oui, dans le passé, il n'y avait qu'une opération par terminal, et des tas de terminaux fonctionnaient à l'époque. MT4 est tout simplement SUCK !

 

Pips verts à vous aussi :)


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Affichage de 8 réponses de 16 à 23 (sur un total de 23)

1 2