¿A qué puede deberse el parpadeo de los indicadores (líneas, flechas, histogramas), tanto en la ventana principal del gráfico como en una ventana aparte? La impresión es que el indicador se vuelve a dibujar, y al mismo tiempo en la ventana de datos las etiquetas y los valores del buffer desaparecen de la lista durante un segundo, y luego vuelven a aparecer en la lista. ¿Hay algún problema con el código de programación?
Y esto sólo se observa en el terminal MT5, no se observa en MT4.
¿Está sugiriendo que tratemos de adivinar? No dude en ponerse en contacto conmigo ; )
No, la búsqueda no respondía a la pregunta que me interesaba.
¿Quizás sepas por qué el parpadeo sólo se observa en el terminal de intercambio MT5, en el terminal de divisas MT5 no hay parpadeo?
¿Todos los indicadores parpadean? La MT5 es la misma, sólo que el tipo de cuenta puede ser diferente: exchange o forex.
A eso me refería cuando mencionaba el terminal de forex y bolsa MT5 para abreviar. Un problema más completo suena así. Cuando me conecto al broker de forex los indicadores en el terminal MT5 no parpadean, pero cuando me conecto al broker de bolsa veo parpadeos y también las marcas del buffer de los indicadores y los valores desaparecen en la ventana de datos durante un segundo o dos.
En cuanto a la pregunta de si todos los indicadores se comportan así, no puedo decirlo. Permítanme que publique uno ahora, para que no quede sin sustento.
//+-----------------------------------------------------------------------------------------------------+ //| 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); }
Observo este comportamiento cuando hay muchos objetos. Cuando no hay objetos, todo es más o menos normal. Los búferes de los indicadores también pueden parpadear a veces cuando llega un tic (cuando hay objetos que se actualizan).
Creo que esto es una característica de MT5, está conectado con el hecho de que ahora los indicadores están en hilos separados para cada símbolo / marca de tiempo y para la actualización de la imagen en el hilo GUI necesita sincronización, lo que añade lentitud en comparación con el modelo de un solo hilo de MT4. Trabajar con objetos es la operación que más recursos consume, por eso causa este problema. Si el problema se observa sin objetos, quizás haya alguna otra carga en el código del indicador. Si intentas localizarlo y excluirlo, debería mejorar.
El indicador no funciona con objetos, así que se puede descartar. Admito que puede estar relacionado con el código del software, pero el código que he citado arriba es muy sencillo y no veo dónde está fallando. Las principales preguntas siguen sin respuesta: ¿quién es el culpable y qué hay que hacer? ¿Existe alguna forma de solucionarlo o en principio es incorregible? Tal vez los desarrolladores den su opinión al respecto.
Por cierto, es por la mañana, la bolsa aún no ha abierto, por lo que todos los indicadores están parados como palos, los buffers en la "Ventana de Datos" no se redibujan, las líneas no parpadean.
Bueno, el intercambio se abrió, y de nuevo toda la misma película. Puedo entender que los datos del indicador se recalculen con cada tick, pero ¿por qué debería eliminar todos los topes del indicador de la tabla de la ventana de datos? ¿No basta con actualizar sus valores en el lugar? Por ejemplo, la forma en que se hace con el precio de cierre. Al fin y al cabo, con un nuevo tick el precio de Cierre no desaparece de la ventana de datos para volver a aparecer con el valor actualizado? ¿Por qué entonces desaparecen los topes indicadores durante algún tiempo? Además, algunos indicadores no se recalculan en la barra cero actual, pero ¿por qué se redibujan también en la "Ventana de datos"?
Sigo esperando una respuesta de gente entendida, o al menos un enlace.
Parece que hay algo que no funciona. O bien mi pregunta ya no es pertinente y hace tiempo que se encontró una solución, o bien la hice en el hilo equivocado. ¿Quizás no hay más gente con conocimientos en el foro, o los desarrolladores no supervisan esta sección del foro?
¿Por qué en la "Ventana de datos" desaparecen los topes de los indicadores durante algún tiempo? En principio, ¿no se arregla o se puede arreglar? ¿Qué hay de malo en el código anterior? Y el indicador no recalcula su valor en la barra actual.
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
¿Con qué puede relacionarse el parpadeo de los indicadores (líneas, flechas, histogramas), tanto en la ventana principal del gráfico como en una ventana aparte? Da la impresión de que el indicador se vuelve a dibujar y al mismo tiempo las marcas y los valores de la memoria intermedia desaparecen de la lista durante un segundo, y luego vuelven a aparecer en la lista. ¿Hay algún problema con el código del programa?
Esto sólo se observa en el terminal MT5, no se observa en MT4.