A que a cintilação dos indicadores (linhas, setas, histogramas) pode estar relacionada, tanto na janela principal do gráfico quanto em uma janela separada? A impressão é que o indicador é redesenhado e, ao mesmo tempo, na janela de dados, as etiquetas e os valores tampão desaparecem da lista por um segundo e, em seguida, reaparecem na lista. Algo errado no código do programa?
E isto só é observado no terminal MT5, não é observado no MT4.
Você está sugerindo que tentemos adivinhar? Esteja à vontade para entrar em contato comigo ; )
Não, é que a busca não respondeu à pergunta que me interessava.
Talvez você saiba porque a cintilação só é observada no terminal de câmbio MT5, no terminal MT5 não há cintilação?
Todos os indicadores estão piscando? O MT5 é o mesmo, somente o tipo de conta pode ser diferente - câmbio ou divisas.
Foi o que eu quis dizer quando mencionei o terminal de câmbio e bolsa MT5 para abreviar. Um problema mais completo soa como este. Quando me conecto à corretora, os indicadores no terminal MT5 não piscam, mas quando me conecto à corretora, vejo piscar e também as marcas e valores dos indicadores desaparecem na janela de dados por um segundo ou dois segundos.
Quanto à questão de saber se todos os indicadores se comportam dessa forma, não posso dizê-lo. Deixe-me colocar um agora, para não ser infundado.
//+-----------------------------------------------------------------------------------------------------+ //| 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); }
Eu observo este comportamento quando há muitos objetos. Quando não há objetos, tudo é mais ou menos normal. Os amortecedores indicadores também podem piscar às vezes quando um tique vem (quando há atualização de objetos).
Acho que esta é uma característica do MT5, ela está conectada com o fato de que agora os indicadores estão em roscas separadas para cada símbolo/carimbo de hora e para atualizar a imagem na rosca GUI ela precisa de sincronização, o que acrescenta lentidão em comparação com o modelo de rosca única do MT4. Trabalhar com objetos é a operação mais intensiva em recursos, e é por isso que causa este problema. Se o problema for observado sem objetos, talvez haja algum outro carregamento no código do indicador. Se você tentar localizá-la e excluí-la, ela deverá melhorar.
O indicador não funciona com objetos, portanto isso pode ser descartado. Admito que pode estar relacionado ao código do software, mas o código que citei acima é muito simples e não consigo ver onde ele está falhando. As principais questões ainda permanecem sem resposta - quem é o culpado e o que fazer? Existe alguma maneira de lidar com isso ou é incorrigível em princípio? Talvez os desenvolvedores tenham uma palavra a dizer aqui!
A propósito, é de manhã, a bolsa de valores ainda não abriu, então todos os indicadores estão de pé como paus, os tampões na "Janela de Dados" não estão redesenhados, as linhas não piscam.
Bem, a troca foi aberta, e novamente o mesmo filme. Posso entender que os dados indicadores são recalculados a cada tick, mas por que eu deveria remover todos os buffers indicadores da tabela da janela de dados? Não é suficiente apenas atualizar seus valores no lugar? Por exemplo, a forma como é feito com o preço Fechar. Afinal, com um novo tick o preço Fechar não desaparece da janela de dados para aparecer novamente com o valor atualizado? Por que então os amortecedores indicadores desaparecem por algum tempo? Além disso, alguns indicadores não são recalculados na barra zero atual, mas por que eles também são redesenhados na "Janela de Dados"?
Ainda esperando uma resposta de pessoas conhecedoras, ou pelo menos um link.
Parece haver algo errado. Ou minha pergunta não é mais relevante e há muito tempo foi encontrada uma solução, ou eu a coloquei na linha errada. Talvez não haja mais pessoas conhecedoras no fórum, ou os desenvolvedores não monitoram esta seção do fórum?
Por que na "Janela de Dados" os buffers indicadores desaparecem por algum tempo? Isto não é consertado em princípio ou é consertável? O que há de errado no código acima? E o indicador não recalcula seu valor na barra atual.
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
A que pode estar relacionado o piscar dos indicadores (linhas, setas, histogramas), tanto na janela principal do gráfico como em uma janela separada? A impressão é que o indicador é redesenhado e, ao mesmo tempo, as marcas e os valores tampão desaparecem da lista por um segundo, e depois aparecem novamente na lista. Há algo errado com o código do programa?
Isto só é observado no terminal MT5, não é observado no MT4.