MT5 교환 터미널에서 표시기(선, 화살표, 히스토그램)가 깜박이는 이유는 무엇입니까?

 

기본 차트 창과 별도 창 모두에서 표시기(선, 화살표, 히스토그램)가 깜박이는 원인은 무엇입니까? 인디케이터가 다시 그려지고 있는 것 같은데, 이때 데이터 창 에서 레이블과 버퍼 값이 목록에서 잠시 사라졌다가 다시 목록에 나타납니다. 코드에 문제가 있습니까?

또한, 이것은 MT5 교환 터미널에서만 관찰되며 MT4에서는 관찰되지 않습니다.

 
Eugene Myzrov :

기본 차트 창과 별도 창 모두에서 표시기(선, 화살표, 히스토그램)가 깜박이는 원인은 무엇입니까? 인디케이터가 다시 그려지고 있는 것 같은데, 이때 데이터 창 에서 레이블과 버퍼 값이 목록에서 잠시 사라졌다가 다시 목록에 나타납니다. 코드에 문제가 있습니까?

또한 이것은 MT5 터미널에서만 관찰되며 MT4에서는 관찰되지 않습니다.


당신은 운세를 제안합니까? 연락주세요 ;)
 
Vitalie Postolache : 점술을 제안하시겠습니까? 연락주세요 ;)

아니요, 검색만으로는 내 질문에 대한 답변을 얻을 수 없었습니다.
MT5 거래소 터미널에서만 깜박임이 관찰되는 이유, MT5 외환 터미널에서는 깜박임이없는 이유를 알고 있습니까?

 
Eugene Myzrov :

아니요, 검색만으로는 내 질문에 대한 답변을 얻을 수 없었습니다.
MT5 거래소 터미널에서만 깜박임이 관찰되는 이유, MT5 외환 터미널 에서는 깜박임이없는 이유를 알고 있습니까?


모든 표시등이 깜박이는 이유는 무엇입니까? MT5는 동일하며 계정 유형만 다를 수 있습니다(교환 또는 외환).
 
Vitalie Postolache : 모든 표시등이 깜박이는 이유는 무엇입니까? MT5는 동일하며 계정 유형만 다를 수 있습니다(교환 또는 외환).

이것은 외환 및 교환 터미널 MT5에 대해 간략하게 말한 것입니다. 더 완전히 문제는 다음과 같이 들립니다. FX중개사 접속시 MT5단말기의 인디케이터가 깜박이지 않고 증권중개사 연결시 플리커 현상이 관찰되며 , 데이터창 에서 인디케이터 버퍼의 라벨과 값이 사라집니다. 1, 2초 동안.

모든 지표가 이런 식으로 작동하는지 여부에 대한 질문에 대해서는 말할 수 없습니다. 근거가 없는 일이 없도록 지금 하나 발표하겠습니다.

 
이것은 몇 가지 일반화를 통해 "AO" 지표에서 파생된 "AOM" 지표입니다.
 //+-----------------------------------------------------------------------------------------------------+
//| 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);
}
 
이제 이 표시기가 교환 브로커(RTS-6.17 도구)에 연결될 때 약간 작동하는 것을 보았지만 지금까지 표시된 두 가지 문제 중 하나만 발견했습니다. 얼마 동안 데이터 창의 데이터 가 사라집니다. 두 AOM 표시기 버퍼의 레이블 및 값.
 

많은 개체가 있을 때 이 동작을 관찰합니다. 물체가 없으면 모든 것이 다소 정상입니다. 표시 버퍼는 때때로 틱이 도착할 때 깜박일 수 있습니다(업데이트 개체가 있는 경우).

표시기가 이제 각 기호/시간 프레임에 대해 별도의 스레드에 있고 GUI 스레드에서 그림을 업데이트하려면 동기화가 필요하고 이는 단일 스레드에 비해 브레이크가 추가된다는 사실 때문에 이것이 MT5의 기능이라고 생각합니다. MT4 모델. 개체 작업 은 이렇게 하기 때문에 리소스를 가장 많이 사용하는 작업입니다. 문제가 개체 없이 관찰되면 표시기 코드에 다른 로드가 있을 수 있습니다. 현지화하고 배제하려고 하면 더 좋아질 거에요.

 
Stanislav Korotky : 많은 물체가 있을 때 이 행동을 관찰합니다. 물체가 없으면 모든 것이 다소 정상입니다. 표시 버퍼는 때때로 틱이 도착할 때 깜박일 수 있습니다(업데이트 개체가 있는 경우). 표시기가 이제 각 기호/시간 프레임에 대해 별도의 스레드에 있고 GUI 스레드에서 그림을 업데이트하려면 동기화가 필요하고 이는 단일 스레드에 비해 브레이크가 추가된다는 사실 때문에 이것이 MT5의 기능이라고 생각합니다. MT4 모델. 개체 작업 은 이렇게 하기 때문에 리소스를 가장 많이 사용하는 작업입니다. 문제가 개체 없이 관찰되면 표시기 코드에 다른 로드가 있을 수 있습니다. 현지화하고 배제하려고 하면 더 좋아질 거에요.

표시기는 개체와 함께 작동하지 않으므로 이 이유를 배제할 수 있습니다. 나는 이것이 m.b라는 것을 인정한다. 프로그램 코드와 관련이 있지만 코드를 조금 더 높게 줬습니다. 매우 간단하고 실패할 수 있는 곳이 보이지 않습니다. 지금까지 주요 질문에는 답이 없습니다. 누구를 탓하고 무엇을 해야 합니까? 이것은 어떻게든 처리될 수 있습니까? 아니면 원칙적으로 고칠 수 없는 것입니까? 엠비. 개발자들은 여기서 자신의 중요한 말을 할 것입니다?!

그건 그렇고, 증권 거래소가 아직 열리지 않은 아침이므로 모든 지표가 트랙에서 죽고 "데이터 창"의 버퍼가 다시 그려지지 않고 선이 깜박이지 않습니다.

 

글쎄, 증권 거래소가 열렸고 다시 모든 것이 영화이기도합니다. 글쎄, 나는 여전히 지표 데이터가 각 틱이 도착할 때 다시 계산된다는 것을 이해할 수 있지만 데이터 창 테이블에서 모든 지표 버퍼를 삭제하는 이유는 무엇입니까? 그들의 가치를 제자리에 업데이트하는 것만으로도 충분하지 않습니까? 예를 들어, 마감 가격으로 수행되는 방식입니다. 결국 새로운 틱의 출현으로 Close의 종가가 데이터 창에서 사라지지 않고 업데이트 된 값으로 다시 나타납니다. 그러면 표시기 버퍼 가 잠시 동안 사라지는 이유는 무엇입니까? 또한 일부 지표는 현재 영점 막대에서 다시 계산되지 않지만 어떤 이유로 "데이터 창"에서도 다시 그려지나요?

여전히 지식이 있는 사람들의 답변이나 최소한 링크를 기대하고 있습니다.

 

뭔가 잘못된 것 같습니다. 내 질문이 더 이상 관련이 없고 솔루션을 오랫동안 찾았거나 잘못된 스레드에서 질문했습니다. 포럼에 지식이 풍부한 사람들이 있거나 개발자가 포럼의 이 섹션을 모니터링하지 않습니까?
"데이터 창"에서 표시기 버퍼 가 잠시 사라지는 이유는 무엇입니까? 근본적으로 치료되지 않는 것입니까 아니면 고칠 수 있습니까? 위 코드에서 옳지 않은 것은? 또한 표시기는 현재 막대의 값을 다시 계산하지 않습니다.