오류, 버그, 질문 - 페이지 1868

 

빌드 1589

IndicatorDelete를 사용하지 않고 그러한 티커가 전혀 없거나 시장 시계에 추가되지 않은 경우 계정/브로커가 변경될 때 표시기의 OnTimer가 작동을 중지하도록 하는 방법은 무엇입니까?

문서 오류 - IndicatorDelete 기능이 없고 ChartIndicatorDelete가 있습니다!

https://www.mql5.com/ru/docs/standardlibrary/cchart/cchartindicatordelete

 bool   IndicatorDelete(
   int             sub_win       // номер подокна
   const string    name         // короткое имя индикатора
   );

상황은 이렇다 - 나는 선물에 첨부된 지표를 실행한다. 다른 브로커로 전환하고 차트가 검게 변하고 업데이트되지 않지만 타이머는 계속 똑딱 거리고 있습니다.

동시에 그는 비초기화 사유를 쓰지 않는다.

REASON_ACCOUNT

6

다른 계정이 활성화되었거나 계정 설정 변경으로 인해 거래 서버에 재접속이 발생했습니다.


 2017.04 . 21 12 : 10 : 31.810 TF through OnTimer (DDM7,M1)    Работаем
2017.04 . 21 12 : 10 : 31.810 TF through OnTimer (DDM7,M1)    Аккаунт = AMPGlobalClearing-Demo-CQG
тут сменили брокера,причины деинициализации нет
2017.04 . 21 12 : 10 : 36.809 TF through OnTimer (DDM7,M1)    Работаем
2017.04 . 21 12 : 10 : 36.809 TF through OnTimer (DDM7,M1)    Аккаунт = FXOpen-MT5
//+------------------------------------------------------------------+
//|                                           TF through OnTimer.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property indicator_chart_window
string server;
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   EventKillTimer ();
   Print ( "Причина деинициализации = " ,reason);
   
  }
//+------------------------------------------------------------------+
int OnInit ()
  {
  server= AccountInfoString ( ACCOUNT_SERVER );
   EventSetMillisecondTimer ( 5000 );
   IndicatorSetString ( INDICATOR_SHORTNAME , "name" );
   
//--- indicator buffers mapping
//---
   return ( INIT_SUCCEEDED );
  }  
  
   ////////////
   void OnTimer ()
  {
   Print ( "Работаем" );
   Print ( "Аккаунт = " , AccountInfoString ( ACCOUNT_SERVER ));
//   if ( server!= AccountInfoString ( ACCOUNT_SERVER ) ) ChartIndicatorDelete ( 0 , 0 , "name" );
  }
Документация по MQL5: Стандартная библиотека / Ценовые графики / IndicatorDelete
Документация по MQL5: Стандартная библиотека / Ценовые графики / IndicatorDelete
  • www.mql5.com
Стандартная библиотека / Ценовые графики / IndicatorDelete - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
kaus_bonus :

빌드 1589

OnDeinit는 호출되지 않습니다.
 
어떤 의미에서
fxsaber :
OnDeinit는 호출되지 않습니다.

어떤 의미에서? 전혀 호출되지 않았거나 이 코드에서?

 
kaus_bonus :

빌드 1589

IndicatorDelete를 사용하지 않고 그러한 티커가 전혀 없거나 시장 시계에 추가되지 않은 경우 계정/브로커가 변경될 때 표시기의 OnTimer가 작동을 중지하도록 하는 방법은 무엇입니까?

문서 오류 - IndicatorDelete 기능이 없고 ChartIndicatorDelete가 있습니다!

https://www.mql5.com/en/docs/standardlibrary/cchart/cchartindicatordelete

상황은 이렇다 - 나는 선물에 첨부된 지표를 실행한다. 다른 브로커로 전환하고 차트가 검게 변하고 업데이트되지 않지만 타이머는 계속 똑딱 거리고 있습니다.

비초기화 사유를 쓰지 않는 동안

REASON_ACCOUNT

6

다른 계정이 활성화되었거나 계정 설정 변경으로 인해 거래 서버에 재접속이 발생했습니다.



로드 및 언로드 표시기

표시기는 다음과 같은 경우에 로드됩니다.

  • 차트에 지표를 첨부하는 것;
  • 터미널 시작(이전 터미널 닫기 전에 지표가 차트에 첨부된 경우)
  • 템플릿 로드(템플릿에 차트에 첨부된 지표가 포함된 경우)
  • 프로필 변경(지표가 프로필 차트 중 하나에 첨부된 경우)
  • 지표가 첨부된 차트의 기호 및/또는 기간 변경,
  • 이 지표가 차트에 첨부된 경우 지표의 성공적인 재컴파일 후.
  • 표시기의 입력 매개변수 변경.

표시기는 다음과 같은 경우에 언로드됩니다.

  • 지표가 차트에서 분리될 때
  • 터미널 닫기(지표가 차트에 첨부된 경우)
  • 지표가 차트에 첨부된 경우 템플릿 로드;
  • 지표가 첨부된 차트 닫기;
  • 지표가 변경된 프로필의 차트 중 하나에 첨부 된 경우 프로필 변경;
  • 지표가 첨부된 차트의 기호 및/또는 기간 변경,
  • 표시기의 입력 매개변수 변경.


"계정 변경 없음"이라는 이유는 계정이 변경될 때 표시기가 언로드되지 않고 따라서 거래 계정이 변경될 때 표시기에 대한 OnDeinit()가 없음을 의미합니다.

 
kaus_bonus :

어떤 의미에서? 전혀 호출되지 않았거나 이 코드에서?

당신의 상황에서.
 
Vladimir Karputov :

로드 및 언로드 표시기


표시기는 다음과 같은 경우에 언로드됩니다.

  • 지표가 차트에서 분리될 때
  • 터미널 닫기(지표가 차트에 첨부된 경우)
  • 지표가 차트에 첨부된 경우 템플릿 로드;
  • 지표가 첨부된 차트 닫기;
  • 지표가 변경된 프로필의 차트 중 하나에 첨부된 경우 프로필 변경
  • 지표가 첨부된 차트의 기호 및/또는 기간 변경,
  • 표시기의 입력 매개변수 변경.


"계정 변경 없음"이라는 이유는 계정이 변경될 때 표시기가 언로드되지 않고 따라서 거래 계정이 변경될 때 표시기에 대한 OnDeinit()가 없음을 의미합니다.

사실 제가 지적한 이유는 전문가에게만 해당됩니다.

Коды причины деинициализации эксперта ....

그렇다면 차트에서 표시기를 근본적으로 제거하지 않고 타이머 작동을 중지시키는 방법은 무엇입니까?

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
kaus_bonus :

사실 제가 지적한 이유는 전문가에게만 해당됩니다.

그렇다면 차트에서 표시기를 근본적으로 제거하지 않고 타이머 작동을 중지시키는 방법은 무엇입니까?


OnInit()에서 개수를 기억하십시오. 타이머 에서 계좌 번호를 확인하십시오 . 점수가 변경된 경우 타이머를 종료합니다.
 
kaus_bonus :

그렇다면 차트에서 표시기를 근본적으로 제거하지 않고 타이머 작동을 중지시키는 방법은 무엇입니까?

ACCOUNT_LOGIN 및 ACCOUNT_SERVER를 사용합니다.
 

동의, 비뚤어진 결정?!

ACCOUNT_LOGIN != ACCOUNT_LOGIN_NEW를 수행하고 타이머를 종료한 다음 해당 계정으로 되돌린다고 가정하면 어떻게 됩니까? 타이머가 다시 시작되지 않겠죠?

같은 방식으로 지표에 "계정 변경"사유를 추가하는 것이 더 쉽습니까, 아니면 내가 뭔가 잘못하고 있으며 이것이 약간의 어려움으로 이어질 것입니까?

 
kaus_bonus :

동의, 비뚤어진 결정?!

기사의 움직임이다!

ACCOUNT_LOGIN != ACCOUNT_LOGIN_NEW를 수행하고 타이머를 종료한 다음 해당 계정으로 되돌린다고 가정하면 어떻게 됩니까? 타이머가 다시 시작되지 않겠죠?

계정의 변경 사항을 감지하면 새로운 특성을 기억하십시오.

여기 에 있는 원칙(매크로)에 따라 작은 라이브러리 형태로 정리할 수 있습니다. 그러면 "비뚤어진" 것이 눈에 거슬리지 않을 것입니다.