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

 
alexvd :

서비스 데스크로 가자.

어떻게 껐는지 설명해주실 수 있나요? 제거(중지)된 서비스? 문제가 있는 에이전트의 로그를 첨부합니다.

로그에 이상한 프록시 설정 이 있습니다. 에이전트 구성에서 프록시 설정을 지정했습니까? 에이전트 관리자의 common.ini를 애플리케이션에 첨부하십시오.

어제는 로그를 보니 ...

모든 것이 정상입니다.

 
TheXpert :

다음 코드:

문제:

2011.12.05 22:01:28 RectLabel (EURUSD,H1) pos = {12, 176314750}
2011.12.05 22:01:28 RectLabel (EURUSD,H1) 기타 = {123, 456}

즉, 초기화 목록이 작동하지 않고 구조에 쓰레기가 있습니다. 이게 버그인지 아닌지

이것은 컴파일러 버그입니다. (복사 생성자 없이) 이와 같은 구조를 초기화할 수 없다는 오류가 발생하지 않았습니다. 수정했습니다. 메시지 주셔서 감사합니다.
 
초기화를 이해할 수 없습니다. "전문가가 쌍에서 언로드되었습니다 ..."라는 메시지가 두 번 발생하는 이유는 무엇입니까?
//+------------------------------------------------------------------+
//|                                                   testDeinit.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"



//+------------------------------------------------------------------+
class CTest_Expert
  {

public:
                     CTest_Expert();
                    ~CTest_Expert() { Deinit(); }
                   
   void              Processing();
   void              Deinit();
   bool              StartTimer(int nCounSeconds);
   void              StopTimer();
   string   Exp_Symbol;
  };

   CTest_Expert arSymbols[];

//+------------------------------------------------------------------+
//| Конструктор                                                      |
//+------------------------------------------------------------------+
CTest_Expert::CTest_Expert()
  {

  }
//+------------------------------------------------------------------+
//| Функция удаления динамических объектов                           |
//+------------------------------------------------------------------+
void CTest_Expert::Deinit()
  {
  
   Print("Эксперт выгружен с пары "+Exp_Symbol);
   Comment("");

  }
//+------------------------------------------------------------------+
//|Инициализация таймера                                             |
//+------------------------------------------------------------------+
bool CTest_Expert::StartTimer(int nCountSeconds)
  {
   return(EventSetTimer(nCountSeconds));
  }
//+------------------------------------------------------------------+
//|Уничтожение таймера                                               |
//+------------------------------------------------------------------+

void CTest_Expert::StopTimer()
  {
      EventKillTimer();
  }

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ArrayResize(arSymbols, 5);
   arSymbols[0].Exp_Symbol="0";
   arSymbols[1].Exp_Symbol="1";
   arSymbols[2].Exp_Symbol="2";
   arSymbols[3].Exp_Symbol="3";
   arSymbols[4].Exp_Symbol="4";
  
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
      int nSize=ArraySize(arSymbols);
      Print("nSize = " + IntegerToString(nSize));
      for(int i=0;i<nSize;i++)
        {
         Print("-------"+IntegerToString(i)+"--------");
         arSymbols[i].Deinit();
         Print("---------------");
        }
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  
  }
//+------------------------------------------------------------------+

결과

2011.12.06 16:59:52 testDeinit (EURUSD,M5) EA가 쌍 4에서 언로드되었습니다.
2011.12.06 16:59:52 testDeinit (EURUSD,M5) EA는 쌍 3에서 언로드되었습니다
2011.12.06 16:59:52 testDeinit (EURUSD,M5) EA는 쌍 2에서 언로드되었습니다
2011.12.06 16:59:52 testDeinit (EURUSD,M5) 쌍 1에서 전문가 고문 언로드
2011.12.06 16:59:52 testDeinit (EURUSD,M5) Expert Advisor가 쌍 0에서 해제되었습니다.
2011.12.06 16:59:52 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:52 testDeinit (EURUSD,M5) EA가 쌍 4에서 언로드되었습니다.
2011.12.06 16:59:52 testDeinit (EURUSD,M5) -------4--------
2011.12.06 16:59:52 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) EA는 쌍 3에서 언로드되었습니다
2011.12.06 16:59:51 testDeinit (EURUSD,M5) -------3--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) 쌍 2에서 전문가 고문 언로드
2011.12.06 16:59:51 testDeinit (EURUSD,M5) -------2--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) 쌍 1에서 전문가 고문 언로드
2011.12.06 16:59:51 testDeinit (EURUSD,M5) -------1--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) Expert Advisor가 쌍 0에서 해제되었습니다.
2011.12.06 16:59:51 testDeinit (EURUSD,M5) -------0--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) nSize = 5

 
Konstantin83 :
초기화를 이해할 수 없습니다. "전문가가 쌍에서 언로드되었습니다 ..."라는 메시지가 두 번 발생하는 이유는 무엇입니까?
                    ~CTest_Expert() { Deinit(); }

   CTest_Expert arSymbols[];

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
      int nSize=ArraySize(arSymbols);
      Print("nSize = " + IntegerToString(nSize));
      for(int i=0;i<nSize;i++)
        {
         Print("-------"+IntegerToString(i)+"--------");
         arSymbols[i].Deinit();
         Print("---------------");
        }
  
  }

OnDeinit의 첫 번째 전화입니다. 소멸자의 두 번째 호출
 
mql5 :
이것은 컴파일러 버그입니다. (복사 생성자 없이) 이와 같은 구조를 초기화할 수 없다는 오류가 발생하지 않았습니다. 수정했습니다. 메시지 주셔서 감사합니다.

아니오. 다음은 몇 가지 추가 세부정보입니다.

도움말에는 다음과 같은 단순 유형의 변수로 단순 구조 를 복사할 수 있다고 나와 있습니다.

{
   Pos pos = { 100 , 100 };
   Pos pos1 = pos; // копи конструктор
   pos = pos1; // копи оператор
}

그렇다면 왜 초기화 목록에서 이것을 수행할 수 없습니까? 위의 초기화 방법을 잃지 않기 위해 명시적으로 생성자를 정의하고 싶지 않습니다.

원칙적으로 비판적이지 않고 최종 의견을 듣고 싶습니다.

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 

12개의 창을 연 상태 에서 터미널을 실행하고 325MB의 RAM을 소모합니다.

다중 통화 Expert Advisor를 실행하면 터미널이 990MB의 RAM을 사용합니다. EA는 지난 48시간 동안 5분 막대를 보고 "프랙탈" 표시기를 사용합니다. 하나의 기호만 거래하기 위해 실행하면 400MB가 걸립니다. 12글자 작업시 메모리 소모가 정상인가요?

 
Konstantin83 :
다중 통화 Expert Advisor를 실행하면 터미널이 990MB의 RAM을 사용합니다. EA는 지난 48시간 동안 5분 막대를 보고 "프랙탈" 표시기를 사용합니다. 하나의 기호만 거래하기 위해 실행하면 400MB가 걸립니다. 12글자 작업시 메모리 소모가 정상인가요?
린 지표 재계산 원칙 문서 참조
 
Rosh :
린 지표 재계산 원칙 문서 참조
프랙탈을 지정하는 것을 잊었습니다. 이것은 표준 지표입니다. + 모든 계산은 5분마다 이루어집니다.
 
Konstantin83 :
프랙탈을 지정하는 것을 잊었습니다. 이것은 표준 지표입니다. + 모든 계산은 5분마다 이루어집니다.

최소한 문서화 된 tsifir를 보여줄 것입니다. 개발자는 무엇을 어떻게 알 수 있습니까?
코드에서 문제의 본질을 올바르게 공식화하고 강조 표시하십시오. 어떤 조건에서 소비량이 증가하기 시작하고 잡지의 인쇄물을 만들고 보여줍니다.
적어도 문제에 대한 기술적 설명으로 vobschem.

 
sergeev :

최소한 문서화 된 tsifir를 보여줄 것입니다. 개발자는 무엇을 어떻게 알 수 있습니까?
코드에서 문제의 본질을 올바르게 공식화하고 강조 표시하십시오. 어떤 조건에서 소비량이 증가하기 시작하고 잡지의 인쇄물을 만들고 보여줍니다.
적어도 문제에 대한 기술적 설명으로 vobschem.

이전에는 차지한 메모리의 양이 많지 않을 것이므로 주의를 기울이지 않았습니다. 어제와 오늘 나는 시스템이 느려지는 것을 알았고 작업 관리자를 열고 터미널에서 900MB를 먹었습니다. 보기 시작했습니다. 시작할 때 12개의 창이 열려있습니다 - 325MB, 저는 전문가 창에 걸려있습니다 - 990MB 그래서 전문가가 먹어 치우는 줄 알았습니다. 설정에서 "그래픽 - 창의 최대 막대"는 무제한이었습니다. 50,000개에서 50,000개로 변경된 단말기 무게는 110개, 다시 무제한으로 변경되었습니다. 이제 Expert Advisor가 실행 중일 때 208MB, 즉 좋아.