Comment obtenir les paramètres Open,Low,High,Close dans MQL5 ? - page 4

 
Alexey Viktorov:

Dans ce cas, CopyRates sans ambiguïté à partir de la première mesure 10s. Et pas à chaque tic, mais suffisamment à l'apparition d'une nouvelle barre.

Comment savoir si une nouvelle barre est apparue sans CopyRates ? Je veux dire, tu dois d'abord assister à l'événement du nouveau bar. Sans CopyRates, est-ce possible ? Je suis un peu confus).

C'est ce que cela signifie, je n'ai jamais traité ce sujet sur MT5. Veuillez comprendre)).

 
Alexey Viktorov:

Oh, Vladimir. Bien que je l'aie laissé échapper, mais malheureusement, je n'ai pas fait de réservation. Si nous n'avons besoin que du prix ou de l'heure d'ouverture, par exemple, il n'est pas nécessaire d'utiliser CopyRates(), dans ce cas CopyOpen ou iOpen est bien suffisant... respectivement CopyTime ou iTime. Il est choisi en fonction de vos préférences religieuses.

Et j'ajouterai mon avertissement : en termes de coûts de performance, il n'y a pas de différence appréciable. Par conséquent, il ne reste que les préjugés religieux.

Le fxsaber vérifiait le coût de CopyRates() - c'est plus cher que d'obtenir la propriété requise séparément. Cela ne s'applique pas à la situation où nous devons obtenir tous les prix en même temps.

 
Реter Konow:
Et comment puis-je savoir qu'une nouvelle barre est apparue sans CopyRates ? Je veux dire, tu dois d'abord attraper le nouvel événement du bar. Est-il possible de le faire sans CopyRates ? Je suis un peu confus).

Sans faire attention à rien, surveillez l'apparition d'une nouvelle barre et appelez CopyRates

Il y a beaucoup de fonctions et de manières différentes de détecter une nouvelle barre sur le site.

 
Реter Konow:

Comment savoir si une nouvelle barre est apparue sans CopyRates ? Je veux dire, tu dois d'abord assister à l'événement du nouveau bar. Sans CopyRates, est-ce possible ? Je suis un peu confus).

C'est ce que cela signifie, je n'ai jamais traité ce sujet sur MT5. Veuillez comprendre.))

Le moyen le plus simple est de comparer l'heure d'ouverture de la barre actuelle. S'il n'est pas égal à celui mémorisé précédemment, prenez une nouvelle mesure, faites ce qui doit être fait sur la nouvelle mesure et mémorisez ce temps pour le prochain contrôle.

 
Alexey Viktorov:

Sans faire attention à rien, nous suivons l'apparition d'une nouvelle barre et appelons CopyRates

Il existe un grand nombre de fonctions et de manières différentes de définir une nouvelle barre sur le site.

L'apparition d'une nouvelle barre dans MT5 n'est pas liée au début de la minute. Il n'est pas du tout chronométré. Il y a un hic. Avec quelle précision peut-on comprendre l'apparition d'une nouvelle barre en se basant uniquement sur les ticks ? Vous devez toujours vous référer à la série chronologique. Cela ne serait guère possible autrement. Bien que... Je ne suis pas sûr à 100%.
 
Artyom Trishkin:

fxsaber a fait une vérification du coût de CopyRates() - c'est plus cher que d'obtenir la propriété requise séparément. Cela ne s'applique pas à la situation où vous devez obtenir tous les prix en même temps.

Avec tout le respect que je vous dois, fxsaber, je préfère ne pas prêter attention à ce genre de différence. C'est pourquoi j'ai dit qu'" il n'y a pas de différencenotable", et je ne suis pas intéressé par la différence en 1e6 itérations. Ce n'est pas comme si nous écrivions un jeu de tir où vous pouvez tirer 1e6 balles à la fois.
 
Artyom Trishkin:

Le moyen le plus simple est de comparer l'heure d'ouverture de la barre actuelle. S'il n'est pas égal à celui mémorisé précédemment, prenez une nouvelle mesure, faites ce qui doit être fait sur la nouvelle mesure et mémorisez ce temps pour le prochain contrôle.

Cela signifie donc qu'il faut appeler CopyRates à chaque tick ? Sinon, comment savoir que l'heure d'ouverture de la barre actuelle a changé ?
 
Реter Konow:
Donc, vous appelez les CopyRates à chaque tic ? Sinon, comment sauriez-vous que l'heure d'ouverture du bar actuel a changé ?

vous pouvez soit classer CNewbar, soit rechercher NewBar dans le forum.

SZZ : tout l'article !https://www.mql5.com/ru/articles/159



Alexey Viktorov:

Igor, tu dois aller en première année. Ils y enseignent les lettres et après l'avoir appris, vous comprendrez la différence entre CopyRates et CopyBuffer.

Voici une meilleure suggestion pour résoudre ce problème SANS CopyRates


OK, les habituels...oops, oops...et pas une seule ligne de code ))))

J'ai cité mon exemple pour montrer qu'il n'est pas toujours pratique (et rarement nécessaire) d'obtenir un tableau de valeurs OHLC consécutives. Dans les tâches pratiques, nous avons généralement besoin d'obtenir une sélection de valeurs OHLC de différentes barres (les indicateurs ne sont pas inclus).

D'accord, prenez soin de vous !

Обработчик события "новый бар"
Обработчик события "новый бар"
  • www.mql5.com
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
 
Реter Konow:
Donc, à chaque tic, appeler CopyRates ? Sinon, comment savoir que l'heure d'ouverture de la barre actuelle a changé ?

Oui, à chaque tic, nous vérifions l'heure :

//+------------------------------------------------------------------+
//| Возвращает время указанного бара                                 |
//+------------------------------------------------------------------+
datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int index)
  {
   datetime array[];
   return(CopyTime(symbol_name,timeframe,index,1,array)==1 ? array[0] : 0);
  }
//+------------------------------------------------------------------+

Et en un mot, c'est comme ça :

static datetime last_time=0;
datetime time_current=Time(Symbol(),PERIOD_CURRENT,0);
if(time_current==0)
  return;
if(time_current!=last_time)
  {
   // Новый бар или первый запуск (для контроля первого запуска можно сделать флаг - чтобы не обрабатывать его как новый бар)
   // делаем что нужно на новом баре
   last_time=time_current;
  }

Je l'ai juste écrit sur ma main - pour montrer l'idée, pas la précision de l'écriture.

 
Реter Konow:
Donc, à chaque tic, nous devrions appeler CopyRates ? Sinon, comment savoir que l'heure d'ouverture de la barre actuelle a changé ?

si(prevTime!=iTime(...))

{

// l'heure d'ouverture de la barre actuelle a changé

}

prevTime=iTime(...) ;

Raison: