아니요, 검색만으로는 내 질문에 대한 답변을 얻을 수 없었습니다.
MT5 거래소 터미널에서만 깜박임이 관찰되는 이유, MT5 외환 터미널 에서는 깜박임이없는 이유를 알고 있습니까?
모든 표시등이 깜박이는 이유는 무엇입니까? MT5는 동일하며 계정 유형만 다를 수 있습니다(교환 또는 외환).
이것은 외환 및 교환 터미널 MT5에 대해 간략하게 말한 것입니다. 더 완전히 문제는 다음과 같이 들립니다. FX중개사 접속시 MT5단말기의 인디케이터가 깜박이지 않고 증권중개사 연결시 플리커 현상이 관찰되며 , 데이터창 에서 인디케이터 버퍼의 라벨과 값이 사라집니다. 1, 2초 동안.
모든 지표가 이런 식으로 작동하는지 여부에 대한 질문에 대해서는 말할 수 없습니다. 근거가 없는 일이 없도록 지금 하나 발표하겠습니다.
//+-----------------------------------------------------------------------------------------------------+ //| 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); }
많은 개체가 있을 때 이 동작을 관찰합니다. 물체가 없으면 모든 것이 다소 정상입니다. 표시 버퍼는 때때로 틱이 도착할 때 깜박일 수 있습니다(업데이트 개체가 있는 경우).
표시기가 이제 각 기호/시간 프레임에 대해 별도의 스레드에 있고 GUI 스레드에서 그림을 업데이트하려면 동기화가 필요하고 이는 단일 스레드에 비해 브레이크가 추가된다는 사실 때문에 이것이 MT5의 기능이라고 생각합니다. MT4 모델. 개체 작업 은 이렇게 하기 때문에 리소스를 가장 많이 사용하는 작업입니다. 문제가 개체 없이 관찰되면 표시기 코드에 다른 로드가 있을 수 있습니다. 현지화하고 배제하려고 하면 더 좋아질 거에요.
표시기는 개체와 함께 작동하지 않으므로 이 이유를 배제할 수 있습니다. 나는 이것이 m.b라는 것을 인정한다. 프로그램 코드와 관련이 있지만 코드를 조금 더 높게 줬습니다. 매우 간단하고 실패할 수 있는 곳이 보이지 않습니다. 지금까지 주요 질문에는 답이 없습니다. 누구를 탓하고 무엇을 해야 합니까? 이것은 어떻게든 처리될 수 있습니까? 아니면 원칙적으로 고칠 수 없는 것입니까? 엠비. 개발자들은 여기서 자신의 중요한 말을 할 것입니다?!
그건 그렇고, 증권 거래소가 아직 열리지 않은 아침이므로 모든 지표가 트랙에서 죽고 "데이터 창"의 버퍼가 다시 그려지지 않고 선이 깜박이지 않습니다.
글쎄, 증권 거래소가 열렸고 다시 모든 것이 영화이기도합니다. 글쎄, 나는 여전히 지표 데이터가 각 틱이 도착할 때 다시 계산된다는 것을 이해할 수 있지만 데이터 창 테이블에서 모든 지표 버퍼를 삭제하는 이유는 무엇입니까? 그들의 가치를 제자리에 업데이트하는 것만으로도 충분하지 않습니까? 예를 들어, 마감 가격으로 수행되는 방식입니다. 결국 새로운 틱의 출현으로 Close의 종가가 데이터 창에서 사라지지 않고 업데이트 된 값으로 다시 나타납니다. 그러면 표시기 버퍼 가 잠시 동안 사라지는 이유는 무엇입니까? 또한 일부 지표는 현재 영점 막대에서 다시 계산되지 않지만 어떤 이유로 "데이터 창"에서도 다시 그려지나요?
여전히 지식이 있는 사람들의 답변이나 최소한 링크를 기대하고 있습니다.
기본 차트 창과 별도 창 모두에서 표시기(선, 화살표, 히스토그램)가 깜박이는 원인은 무엇입니까? 인디케이터가 다시 그려지고 있는 것 같은데, 이때 데이터 창 에서 레이블과 버퍼 값이 목록에서 잠시 사라졌다가 다시 목록에 나타납니다. 코드에 문제가 있습니까?
또한, 이것은 MT5 교환 터미널에서만 관찰되며 MT4에서는 관찰되지 않습니다.