Pourquoi les indicateurs (lignes, flèches, histogrammes) clignotent-ils dans le terminal MT5 ?
A quoi peut être lié le scintillement des indicateurs (lignes, flèches, histogrammes), à la fois dans la fenêtre principale du graphique et dans une fenêtre séparée ? L'impression est que l'indicateur est redessiné et qu'au même moment, dans la fenêtre de données, les étiquettes et les valeurs de la mémoire tampon disparaissent de la liste pendant une seconde, puis réapparaissent dans la liste. Un problème dans le code du programme ?
Et ceci n'est observé que dans le terminal MT5, il n'est pas observé dans MT4.
Suggérez-vous que nous essayions de deviner ? N'hésitez pas à me contacter ; )
Non, c'est juste que la recherche n'a pas répondu à la question qui m'intéresse.
Peut-être savez-vous pourquoi le scintillement n'est observé que dans le terminal de change MT5, alors qu'il n'y a pas de scintillement dans le terminal de forex MT5 ?
Non, la recherche n'a tout simplement pas répondu à la question qui m'intéressait.
Peut-être savez-vous pourquoi le scintillement n' est observé que dans le terminal de change MT5, alors qu' il n'y a pas de scintillement dans le terminal de forex MT5 ?
Tous les indicateurs clignotent-ils ? Le MT5 est le même, seul le type de compte peut être différent - bourse ou forex.
C'est ce que je voulais dire lorsque j'ai mentionné le terminal MT5 pour le forex et la bourse en abrégé. Un problème plus complet ressemble à ceci. Lorsque je me connecte à un courtier en forex, les indicateurs du terminal MT5 ne clignotent pas, mais lorsque je me connecte à un courtier en bourse, je vois des clignotements et aussi des marques tampons des indicateurs et des valeurs qui disparaissent dans la fenêtre de données pendant une seconde ou deux.
Quant à la question de savoir si tous les indicateurs se comportent de la sorte, je ne peux pas l'affirmer. Permettez-moi d'en poster une maintenant, afin de ne pas être sans fondement.
//+-----------------------------------------------------------------------------------------------------+ //| AOM = Awesome Oscillator Modernized (индикатор AO Модернизированный) //+-----------------------------------------------------------------------------------------------------+ #property copyright "Copyright© 2014, Scriptolog® [ myzrov@mail.ru ]" #property link "mailto:myzrov@mail.ru" #property version "2.0" // текущая версия #property description "«AOM» - индикатор «AO» модернизированный.\n" #property description "Предупреждение о рисках. Торговля на рынке Forex с использованием" #property description "кредитного плеча несёт в себе значительные финансовые риски." //#property icon "\\Images\\Constructor.ico" // путь к файлу заставки #property strict #property indicator_separate_window #property indicator_buffers 2 #property indicator_plots 2 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #property indicator_label1 "AOM UP" #property indicator_color1 clrGreen #property indicator_width1 3 #property indicator_style1 STYLE_SOLID #property indicator_type1 DRAW_HISTOGRAM #property indicator_label2 "AOM DN" #property indicator_color2 clrRed #property indicator_width2 3 #property indicator_style2 STYLE_SOLID #property indicator_type2 DRAW_HISTOGRAM #property indicator_level1 0.0000 // Горизонтальный уровень в отдельном окне индикатора input int AOM_PERIOD_FACTOR = 1; // AOM. Коэф-т повышения периода усреднения input int AOM_PERIOD_FAST = 5; // AOM. Период усреднения MA быстрой input int AOM_PERIOD_SLOW = 34; // AOM. Период усреднения MA медленной input int AOM_SHIFT = 0; // AOM. Сдвиг по горизонтали input ENUM_MA_METHOD AOM_METHOD = MODE_SMA; // AOM. Метод усреднения input ENUM_APPLIED_PRICE AOM_PRICE = PRICE_MEDIAN; // AOM. Цена усреднения //+------------------------------------------------------------------+ //| Глобальные переменные //+------------------------------------------------------------------+ double aUP[], aDN[]; // INDICATOR_DATA double aom, last_aom; // текущее и предыдущее значения индикатора AO int ma_fast_handle; // =iMA(_Symbol, PERIOD_CURRENT, AOM_PERIOD_FAST, AOM_SHIFT, AOM_METHOD, AOM_PRICE); int ma_slow_handle; // =iMA(_Symbol, PERIOD_CURRENT, AOM_PERIOD_SLOW, AOM_SHIFT, AOM_METHOD, AOM_PRICE); int MAX_PERIOD; // периоды усреднения быстрой и медленной MA (в барах) int AOM1_PERIOD_FAST; // =AOM_PERIOD_FAST*AOM_PERIOD_FACTOR; int AOM1_PERIOD_SLOW; // =AOM_PERIOD_SLOW*AOM_PERIOD_FACTOR; //+------------------------------------------------------------------+ //| Custom indicator initialization function //+------------------------------------------------------------------+ int OnInit() { // Подготовить периоды усреднения быстрой и медленной MA (в барах) AOM1_PERIOD_FAST=AOM_PERIOD_FAST*AOM_PERIOD_FACTOR; AOM1_PERIOD_SLOW=AOM_PERIOD_SLOW*AOM_PERIOD_FACTOR; MAX_PERIOD=(int)MathMax(AOM1_PERIOD_FAST, AOM1_PERIOD_SLOW)+1; // Распределяет память под буферы, используемые для вычислений пользовательского индикатора ArraySetAsSeries(aUP, true); SetIndexBuffer(0, aUP, INDICATOR_DATA); ArraySetAsSeries(aDN, true); SetIndexBuffer(1, aDN, INDICATOR_DATA); // Номер позиции начала отрисовки линии индикатора // sets drawing line empty value PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, MAX_PERIOD); PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE); PlotIndexSetInteger(1, PLOT_DRAW_BEGIN, MAX_PERIOD); PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, EMPTY_VALUE); // set accuracy IndicatorSetInteger(INDICATOR_DIGITS, _Digits+1); string short_name; StringConcatenate(short_name, "AOM [", AOM_PERIOD_FACTOR, "] (", AOM_PERIOD_FAST, ",", AOM_PERIOD_SLOW, ")"); IndicatorSetString(INDICATOR_SHORTNAME, short_name); ResetLastError(); // Инициализация 2-х индикаторов MA ma_fast_handle=iMA(_Symbol, PERIOD_CURRENT, AOM1_PERIOD_FAST, AOM_SHIFT, AOM_METHOD, AOM_PRICE); ma_slow_handle=iMA(_Symbol, PERIOD_CURRENT, AOM1_PERIOD_SLOW, AOM_SHIFT, AOM_METHOD, AOM_PRICE); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Функция деинициализации является обработчиком события Deinit //+------------------------------------------------------------------+ void OnDeinit(const int reason) { // Удалить хэндлы индикаторов и освобождить расчетную часть индикатора if (ma_slow_handle!=INVALID_HANDLE) IndicatorRelease(ma_slow_handle); if (ma_fast_handle!=INVALID_HANDLE) IndicatorRelease(ma_fast_handle); return; } //+------------------------------------------------------------------+ //| Custom indicator iteration function //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // размер входных таймсерий const int prev_calculated, // обработано баров на предыдущем вызове const datetime& time[], // Time const double& open[], // Open const double& high[], // High const double& low [], // Low const double& close[], // Close const long& tick_volume[], // Tick Volume const long& real_volume[], // Real Volume const int& spread[]) // Spread { int N=rates_total-prev_calculated; if (N>MAX_PERIOD) N-=MAX_PERIOD; for (int i=N; i>0 && !IsStopped(); i--) { double ma_fast=getMA(ma_fast_handle, i); double ma_slow=getMA(ma_slow_handle, i);; aom=ma_fast-ma_slow; if (aom>last_aom) {aUP[i]=aom; aDN[i]=EMPTY_VALUE;} else {aDN[i]=aom; aUP[i]=EMPTY_VALUE;} last_aom=aom; } aUP[0]=EMPTY_VALUE; aDN[0]=EMPTY_VALUE; return(rates_total); } //+-------------------------------------------------------+ //| Возвращает значение индикатора «MA» //+-------------------------------------------------------+ double getMA(int handle, int i) // откуда начнем копирование { double aMA[1]; // массив для получения значениz индикатора double nMA=0; int k=CopyBuffer(handle, 0, i, 1, aMA); nMA=aMA[0]; if (k<1) {int err=GetLastError(); Print("*** MA=", handle, " CopyBuffer error #", err);} return(nMA); }
J'observe ce comportement lorsqu'il y a beaucoup d'objets. Quand il n'y a pas d'objets, tout est plus ou moins normal. Les tampons des indicateurs peuvent aussi parfois clignoter lorsqu'un tick arrive (lorsqu'il y a des objets qui se mettent à jour).
Je pense que c'est une caractéristique de MT5, c'est lié au fait que maintenant les indicateurs sont dans des threads séparés pour chaque symbole/horodatage et pour mettre à jour l'image dans le thread GUI il faut une synchronisation, ce qui ajoute de la lenteur par rapport au modèle de thread unique de MT4. Le travail avec les objets est l'opération la plus gourmande en ressources, c'est pourquoi elle cause ce problème. Si le problème est observé sans objets, peut-être y a-t-il un autre chargement dans le code de l'indicateur. Si vous essayez de le localiser et de l'exclure, il devrait s'améliorer.
L'indicateur ne fonctionne pas avec les objets, donc on peut exclure cette possibilité. J'admets que cela peut être lié au code du logiciel, mais le code que j'ai cité ci-dessus est très simple et je ne vois pas où il échoue. Les principales questions restent toujours sans réponse : qui est à blâmer et que faire ? Existe-t-il un moyen d'y remédier ou est-il par principe incorrigible ? Peut-être les développeurs auront-ils leur mot à dire ici !
D'ailleurs, c'est le matin, la bourse n'a pas encore ouvert, donc tous les indicateurs sont debout comme des bâtons, les tampons dans la "fenêtre de données" ne sont pas redessinés, les lignes ne clignotent pas.
Eh bien, l'échange s'est ouvert, et à nouveau le même film. Je peux comprendre que les données des indicateurs sont recalculées à chaque tick, mais pourquoi devrais-je supprimer tous les tampons des indicateurs du tableau de la fenêtre de données ? N'est-il pas suffisant de mettre à jour leurs valeurs en place ? Par exemple, la façon dont on procède avec le prix de clôture. Après tout, avec un nouveau tick, le prix de clôture ne disparaît pas de la fenêtre de données pour réapparaître avec la valeur actualisée ? Pourquoi alors les tampons indicateurs disparaissent-ils pendant un certain temps ? De même, certains indicateurs ne sont pas recalculés sur la barre zéro actuelle, mais pourquoi sont-ils également redessinés dans la "fenêtre de données" ?
J'espère toujours une réponse de personnes compétentes, ou au moins un lien.
Il semble y avoir un problème. Soit ma question n'est plus pertinente et une solution a été trouvée depuis longtemps, soit je l'ai posée dans le mauvais fil. Peut-être n'y a-t-il pas de personnes plus compétentes sur le forum, ou bien les développeurs ne surveillent-ils pas cette section du forum ?
Pourquoi les tampons des indicateurs disparaissent-ils pendant un certain temps dans la "fenêtre de données" ? Ce problème n'est pas résolu en principe ou peut-il l'être ? Quel est le problème dans le code ci-dessus ? Et l'indicateur ne recalcule pas sa valeur sur la barre actuelle.
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
A quoi peut être lié le clignotement des indicateurs (lignes, flèches, histogrammes), à la fois dans la fenêtre principale du graphique et dans une fenêtre séparée ? On a l'impression que l'indicateur est redessiné et qu'en même temps les marques et les valeurs tampons disparaissent de la liste pendant une seconde, puis réapparaissent dans la liste. Y a-t-il un problème avec le code du programme ?
Ce phénomène est uniquement observé dans le terminal MT5, il n'est pas observé dans MT4.