Exécuter le script par le biais d'Expert Advisor - page 3

 
Dadas:


Y a-t-il un moyen de déclencher un script dans une boucle contrôlée par un ticker, par exemple toutes les 50 ms ou quelque chose comme ça ?

Pas par les ticks MT4 ?


Je vais essayer de répondre à cette question moi-même :

Ce n'est pas possible, car la fonction start() est exécutée par les nouvelles cotations, c'est-à-dire les ticks du courtier.

Donc, même si vous avez une boucle à l'intérieur de la fonction start(), elle ne boucle que lorsqu'un nouveau tick arrive.

C'est pourquoi vous ne pouvez pas gagner contre le courtier !

Bien que, lorsque j'ai exécuté mon EA comme un script comme celui-ci :

int start() {

while(1==1) {

MyEA();

}
}

mon ordinateur a commencé à être lent, à cause de cette boucle.

J'ai essayé cela le dimanche, donc le marché était fermé.

 
Dadas:


Ainsi, une EA pourrait s'exécuter comme un script ? Dans une boucle ?

Seulement, lorsqu'il est dans une boucle infinie, l'ordinateur finit par planter.

Existe-t-il un moyen de déclencher un script dans une boucle contrôlée par un ticker, comme toutes les 50ms ou quelque chose comme ça ?

Pas par les ticks MT4 ?


Un script s'exécute une fois, à moins que vous n'ajoutiez une boucle finie/infinie dans sa fonction start(). Si vous voulez déclencher le script avec votre propre tick généré, faites-en un EA et placez-le sur un graphique hors ligne.
 
Dadas:


Bien que, quand j'ai exécuté mon EA comme un script comme celui-ci :

mon ordinateur a commencé à se bloquer, à cause de cette boucle.


Votre ordinateur a besoin d'une mise à niveau... ou d'être remplacé.
 
RaptorUK:

Votre ordinateur a besoin d'une mise à niveau... ou d'être remplacé.

C'est tout à fait vrai ! C'est un vieil ordinateur.
 
RaptorUK:

Un script s'exécute une fois, à moins que vous n'ajoutiez une boucle finie/infinie dans sa fonction start(). Si vous voulez déclencher le script avec votre propre tick généré, faites-en un EA et placez-le sur un graphique hors ligne.

Je ne peux pas trader sur un graphique hors ligne.
 
Dadas:

Je ne peux pas négocier sur un graphique hors ligne.
Pourquoi pas ?
 

Dadas 2012.08.12 16:34
Dadas:


Existe-t-il un moyen de déclencher un script dans une boucle contrôlée par un ticker, par exemple toutes les 50 ms ou quelque chose comme ça ?

Pas par les ticks MT4 ?


Je vais essayer de répondre à cette question moi-même :

Ce n'est pas possible, car la fonction start() est exécutée par les nouvelles cotations, c'est-à-dire les ticks du broker.

Donc, même si vous avez une boucle à l'intérieur de la fonction start(), elle ne boucle que lorsqu'un nouveau tick arrive.

C'est pourquoi vous ne pouvez pas gagner contre le courtier !

Bien que, lorsque j'ai exécuté mon EA comme un script comme celui-ci :

int start() {

while(1==1) {

MyEA();

}
}

mon ordinateur a commencé à être lent, à cause de cette boucle.

J'ai essayé cela le dimanche, donc le marché était fermé.

Bonjour Dadas,

Le script est exécuté sans tick, l'EA est exécuté avec un tick.

Lorsque vous utilisez une boucle infinie, ajoutez un Sleep ()(https://docs.mql4.com/common/Sleep)

Essayez le code ci-dessous comme script, coupez la connexion internet, ouvrez le gestionnaire de tâches et attachez le script au graphique. Le script tournera en boucle à l'infini sans avoir besoin d'un tick, et sans utiliser trop de processeur.

  int n;
  while (IsStopped() == false) // or while (true)
    {
    n++;
    Alert (n);
    
    Sleep (500); // add this !
    }

 
.
 
RaptorUK:
Pourquoi pas ?


Eclairez-moi, s'il vous plaît !

Comment faire du trading en temps réel sur un graphique hors ligne ?

 
onewithzachy:

Salut Dadas,

Le script est exécuté sans tick, l'EA est exécuté avec un tick.

Lorsque vous utilisez une boucle infinie, ajoutez un Sleep ()(https://docs.mql4.com/common/Sleep)

Essayez le code ci-dessous comme script, coupez la connexion internet, ouvrez le gestionnaire de tâches et attachez le script au graphique. Le script tournera en boucle à l'infini sans avoir besoin d'un tick, et sans utiliser trop de processeur.


Merci beaucoup !

C'est tellement simple, j'aurais dû y penser moi-même...

Fatigué, je suppose....... Comme mon vieil ordinateur - LOL !

Mais, vous savez, je pensais à quelque chose d'un peu différent.

Je pense à la façon d'ignorer le ticking dans le trading en direct de MT4 !

Le fait est que, pendant le trading en direct, les tics contrôlent l'EA et donc le courtier aussi.

En d'autres termes, si je veux que mon EA ferme l'ordre sous certaines conditions, je veux que mon EA fasse exactement cela, définitivement, pas peut-être.

En dehors des requêtes (auxquelles je ne peux rien faire d'autre que de changer de courtier), il arrive trop souvent que je voie sur mon graphique

que mon ordre devrait être en train de se fermer, mais qu'il reste suspendu jusqu'au prochain tick, et qu'il perd alors.

Si j'écris dans mon EA :

if(AccountProfit()>0) { CloseAllOrders(); }

je veux qu'il soit clôturé avec un profit de 1 Pip ou plus. Je ne m'attends pas à ce qu'il reste suspendu à 1 Pip sans rien faire !

BTW, je négocie avec un spread fixe de 1 Pip sur EURUSD.

Donc, je n'ai pas besoin de l'évidence, et Sleep() n'est pas non plus une solution, sauf pour des tests rétrospectifs hors ligne.

BTW, tout test à rebours n'est bon à rien - ce n'est pas un test en temps réel.

Eh bien, il est bon pour certaines observations et l'étude des graphiques, pour apprendre beaucoup de choses !

Mais, dans le trading en temps réel, vous ne connaissez pas l'avenir, et vous ferez des erreurs - à moins que vous ne fassiez vraiment confiance à votre EA !

Faites-lui plus confiance que ce que vous voyez sur les graphiques ! - C'est la partie la plus difficile !

Donc, les gars, s'il vous plaît, lisez mes messages avec compréhension !