Questions des débutants MQL5 MT5 MetaTrader 5 - page 492

 
Евгений:
Y a-t-il un moyen de vérifier si les scripts d'ouverture fonctionnent pendant le week-end ?
Non. Seuls les conseillers experts peuvent être vérifiés dans le testeur de stratégie pendant le week-end.
 
Karputov Vladimir:
Seul l'indicateur traite tous les ticks dans OnCalculate(). Sans aucun saut.
Eh non. Et ça saute. Mais moins que d'autres. Mais ça saute.
 
Victor Nikolaev:
Euh, non. Et il rate. Mais moins que d'autres. Mais ça saute.
L'indicateur peut sauter le tick seulement si l'indicateur utilise des calculs gourmands en ressources à chaque entrée dans OnCalculate().
 
kashi_ann:

C'est bien, merci.

Une autre question :

CommandeSélection

Sélectionne un ordre pour continuer à travailler avec lui. Renvoie un message de vérité en cas de réussite de la fonction. Renvoie false si la fonction échoue. Vous devez appeler la fonctionGetLastError() pour obtenir des informations sur l'erreur.

La méthodeOrderSelect(
ulong ticket// Ticket la commande
) ;

Paramètres

billet

[Le billet de la commande.

Comment ce billet est-il attribué ? Où puis-je l'obtenir ? Ou comment le mettre en place ?

Dans l'aide, il est dit

OrderGetTicket

Renvoie le ticket de l'ordre correspondant et sélectionne automatiquement l'ordre pour une manipulation ultérieure à l'aide de fonctions. Nous devons examiner toutes les commandes par index et obtenir un ticket, si nécessaire. Bien que cette fonction permette également de sélectionner la commande elle-même. Le billet est fixé par le courtier, et nous ne pouvons pas le changer.

ulong  OrderGetTicket( 
   int  index      // номер в списке ордеров 
   );
 

Bonjour à tous !

J'ai écrit une fonction qui doit dessiner chaque jour la "zone horaire non commerciale" sur le graphique.
Mais il y a un problème - quand je le démarre, le module OnInit, dessine comme il devrait être mais quand je le déclenche dans le module OnTimer pour une raison inconnue la variable date garde les valeurs qui ont été assignées dans le module OnInit.

Question : Pourquoi ?

int OnInit()

  {

    EventSetTimer(1);

    MqlDateTime date;

    TimeLocal(date); 

    offtimeCreate(date); // Рисуем на графике заполненный прямоугольник (не торговая зона) с 21:00 до 23:59 в день указанный в переменной date

    return(INIT_SUCCEEDED); 

  } 

 ...

void onTimer()

  {

    MqlDateTime date;

    TimeLocal(date);

    if (date.hour==9 && date.min==0 && date.sec==0)  offtimeCreate(date); // Каждое утро, в 9:00, рисуем новую "не торговую зону" для дня указанного в переменной date

  } 

...
 
INGFX:

Bonjour à tous !

J'ai écrit une fonction qui doit dessiner chaque jour une "zone horaire non commerciale" sur un graphique.
Mais il y a un problème : lorsqu'il est exécuté dans le module OnInit, il affiche la date comme il se doit, mais lorsqu'il est exécuté dans le module OnTimer, pour une raison inconnue, la variable date conserve les valeurs qui ont été attribuées dans le module OnInit.

Question : Pourquoi ?

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

Bugs, bugs, questions

Karputov Vladimir, 2016.01.09 20:51

Qu'est-ce qui vous fait penser que dans la variable timer date est passée la valeur précédemment définie dans OnInit() ?

Vous devez examiner votre fonction qui dessine la zone.

Complété :

Le terme correct serait OnTimer, et non onTimer.

 

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

Bugs, bugs, questions

INGFX, 2016.01.09 21:20

Parce que A) je vois visuellement, le "fuseau horaire" n'est pas dessiné aujourd'hui de 21:00 à 23:59, mais d'hier 21:00 à aujourd'hui 23:59

B) Si j'ouvre les propriétés de l'objet graphique (rectangle ombragé - "fuseau horaire"), je constate que la première variable n'a pas changé, c'est-à-dire qu'elle a la même valeur que celle d'hier, à savoir 21h00.

...
bool offtimeCreate(MqlDateTime &stm)
  {
    color clr=Black;
    datetime tm1,tm2;
    tm1 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 21:00");
    tm2 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 23:59");

    RectangleCreate(0,"offtime",0,tm1,0,tm2,200,clr); // chrart_id,object_name,sub_window,time1,price1,time2,price2,color

    return(true);
  }
...

 
Karputov Vladimir:
La bonne réponse est OnTimer, et non onTimer.
Oui, c'est OnTimer, j'ai fait une erreur en le copiant ici ... Le code lui-même est correct.
 
INGFX:
Eh bien oui OnTimer, a fait une erreur en réécrivant ici ... le code lui-même est correct

Vous auriez vérifié votre code. Fatigué d'assembler vos morceaux - alors ici, vérifiez le code. Dans OnTimer, remplacez votre heure locale et comparez les impressions à l'initialisation et dans le timer :

//+------------------------------------------------------------------+
//|                                                       TestEA.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1);
   MqlDateTime date;
   TimeLocal(date);
   offtimeCreate(date); // Рисуем на графике заполненный прямоугольник (не торговая зона) с 21:00 до 23:59 в день указанный в переменной date
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   MqlDateTime date;
   TimeLocal(date);
   if(date.hour==22 && date.min==33 && date.sec==00)
      offtimeCreate(date); // Каждое утро, в 9:00, рисуем новую "не торговую зону" для дня указанного в переменной date
  }
//+------------------------------------------------------------------+
/*void offtimeCreate(MqlDateTime &struct_date)
  {
   string text="";
   text=IntegerToString(struct_date.hour)+":"+
        IntegerToString(struct_date.min)+":"+
        IntegerToString(struct_date.sec);
   Comment(text);
//ChartRedraw();
  }*/
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool offtimeCreate(MqlDateTime &stm)
  {
   color clr=Black;
   datetime tm1,tm2;
   tm1 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 21:00");
   tm2 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 23:59");

   Print(tm1+"      "+tm2);
//RectangleCreate(0,"offtime",0,tm1,0,tm2,200,clr); // chrart_id,object_name,sub_window,time1,price1,time2,price2,color

   return(true);
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:

Vous auriez vérifié votre code.

Vladimir, merci pour votre patience et votre aide !
J'ai vraiment fait une erreur dans le code ...
Je ferai plus attention à partir de maintenant.

Raison: