[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 749

 
artmedia70:
Des développeurs avisés. S'il était possible d'appeler un script, j'y chargerais un bordereau, mais vous ne pouvez pas non plus, apparemment, parce qu'il n'y a pas besoin d'un tas de conseillers en même temps... Il n'y a pas de solution de facilité pour nous :)
 

Messieurs les programmeurs. Pouvez-vous m'aider ?

A partir des variables d'entrée.

extern bool UseHourTrade = True ;
extern int FromHourTrade = 0 ;
extern int ToHourTrade = 23 ;

int start(){
if (UseHourTrade){
if ( !(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comment("Le moment de la transaction n'est pas encore arrivé !") ;
return(0) ;
}
}

Je veux ajouter une deuxième période de temps où la transaction doit être effectuée avec d'autres variables UseHourTrade2, FromHourTrade2, ToHourTrade2.

S'il vous plaît, aidez-moi. Dites-moi ce qui devrait être ajouté à la fonction de démarrage. J'ai essayé tellement de choses qui ne fonctionnent pas.

Je tiens à vous remercier d'avance. Je ne peux pas vous aider.

 
cyclik33:
extern bool UseHourTrade = True,
            UseHourTrade2 = True;
 extern int FromHourTrade = 0,
            FromHourTrade2 = 0,
            ToHourTrade = 23,
            FromHourTrade2 = 23;

int start(){
   if (UseHourTrade){
   if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
 Comment("Time for trade has not come else!");
 return(0);
 }
   if (UseHourTrade2){
   if (!(Hour()>=FromHourTrade && Hour()<=FromHourTrade2)) {
 Comment("Time for trade has not come else!");
 return(0);
 }
 }

Quelque chose comme ça, je suppose.

SZY Le bouton d'insertion de code "SRC" est peu pratique à utiliser, il n'est pas facile à lire.

 
Abzasc:

L'énigme est la suivante.

L'indicateur à la toute fin du code crée un objet, qui sert d'indicateur pour un autre indicateur.

Après avoir créé l'objet, j'ai besoin de mettre l'indicateur en veille pendant 5 secondes, puis de supprimer l'objet et de le mettre en veille pendant 60 secondes, après quoi il ira à la dernière tentative et recommencera depuis le début avec un nouveau tick.

J'essaie de faire ça

Il se suspend jusqu'à ce qu'il semble manquer de temps.

Des conseils sur la manière de procéder ?


La logique est la suivante : les deux indicateurs connaissent le nom de l'objet et un objet supplémentaire.

la première crée l'objet et ne fait rien tant qu'il est là - au tout début du démarrage, nous écrivons la condition de sortie (return ;)

le second lit l'objet, fait son travail et définit un objet supplémentaire

le premier, sans voir l'objet principal, part sans rien faire et trouve immédiatement le second (objet supplémentaire), lit l'heure de création de l'objet (elle est inscrite là par le second composant dans la description lors de la création), décompte la pause nécessaire (60 secondes) et supprime tous les objets - vous pouvez continuer à travailler .....

 
Abzasc:
Il ne fonctionne pas dans les indicateurs. Je ne comprends pas la raison de procéder de cette façon. Apparemment, un indicateur qui fonctionne en permanence doit être hypnotisant :)

La raison en est que l'indicateur fonctionne dans le flux de l'interface, vous ne pouvez pas le mettre en veille, car si vous pouviez le "ralentir", à ce moment-là vous ne pourriez pas appuyer sur un bouton du terminal, par exemple "Nouvel ordre", ou fermer un ordre, etc.
Une autre subtilité dans ce sujet concerne le testeur. Dans le terminal réel, il y a plusieurs threads, un thread d'interface est créé séparément pour les Expert Advisors (c'est pourquoi il peut être ralenti sans conséquences) et dans le testeur, c'est le même pour tous, et tous pour un :)
C'est pourquoi la fonction Sleep() fonctionne de manière si spécifique en mode test. Si vous mettez en sommeil le flux du testeur, tout cessera de fonctionner, y compris les conseillers experts, les indicateurs et la génération de tics, bien sûr. Par conséquent, si j'ai bien compris votre idée, elle ne peut être testée que sur une démo. Si vous voulez ralentir le flux de l'interface, vous pouvez utiliser la fonction suivante :

//+------------------------------------------------------------------+
//| MySleep function                                                 |
//+------------------------------------------------------------------+
void MySleep(int sec){
   int pause = TimeSeconds(TimeLocal()) + sec;
   if(pause >= 60)pause = pause - 60;
   while(TimeSeconds(TimeLocal()) != pause){}
}
//+------------------------------------------------------------------+
 
xrust:


compte à rebours de la pause souhaitée (60 sec)

Vous pouvez essayer, mais l'important est de savoir comment faire une pause... Je suis bloqué sur ce point.
 

Lisez attentivement, j'ai tout expliqué, et il n'est pas du tout nécessaire d'utiliser un objet graphique, vous pouvez le faire avec les globaux.....

 
ToLik_SRGV:

La raison est que l'indicateur fonctionne dans le flux d'interface, il ne peut pas être mis en veille...

Et voilà... maintenant ça s'est éclairci, merci.


Mec, quelles pierres. On ne peut pas le mettre dans un indicateur, on ne peut pas le mettre en veilleuse... Je vais essayer de le faire avec des variables globales.
 
xrust:

Lisez attentivement, j'ai tout expliqué, et il n'est pas du tout nécessaire d'utiliser un objet graphique, vous pouvez le faire avec les globaux.....

Je crois que je l'ai. La suppression par temps d'existence est également une minuterie. Mais je vais le relire une fois de plus :)
 
Abzasc:

... Je vais essayer de le faire fonctionner avec des variables globales.

Je pense que Rustam y a fait allusion correctement, car le gel des threads est la dernière chose à faire, c'est une mesure extrême, et pas seulement dans MQL, mais dans tous les langages de programmation.