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

 
(디스크 공간을 절약하기 위해) 테스트 중에 저널에 댓글이 작성되지 않는다는 포럼의 어딘가를 읽었습니다. 이와 관련하여 질문은 다음과 같습니다. 테스터에서 프로그램을 디버깅하는 방법은 무엇입니까? 나는 printf, PrintFormat 을 시도했습니다. 테스터에서 아무 것도 작동하지 않으며 Alert도 시도했습니다.
 
Scriptong :
(디스크 공간을 절약하기 위해) 테스트 중에 저널에 댓글이 작성되지 않는다는 포럼의 어딘가를 읽었습니다. 이와 관련하여 질문은 다음과 같습니다. 테스터에서 프로그램을 디버깅하는 방법은 무엇입니까? 나는 printf, PrintFormat을 시도했습니다. 테스터에서 아무 것도 작동하지 않으며 Alert도 시도했습니다.
테스트 에이전트의 로그를 보십시오. 모든 것이 거기에 기록되지만 로컬 에이전트에 대해서만 기록됩니다. 원격 에이전트는 정보 보존을 위해 Print() 등의 출력을 기록하지 않습니다.
Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Общие функции / Print - Документация по MQL5
 

확인했습니다. 현지 에이전트가 있습니다(적어도 로컬에 나열됨). " Every tick " 모드에서 EA를 실행한 후 "Log" 탭의 내용이 에이전트의 로그 파일(EA 및 로그 파일이 첨부됨)의 내용과 일치합니다.

예, 잊었습니다. 테스트 기간 "지난 달".

파일:
test.mq5  2 kb
 

로그에 "'test.ex5'의 디버그 버전입니다. 다시 컴파일하십시오."

즉, 디버깅용 EX5(편집기에서 F5를 누르면 디버그 정보가 있는 EX5가 제공됨)를 테스터에서 실행할 수 없습니다.

우리는 그러한 Expert Advisors를 자동으로 재컴파일할 것입니다. 그동안 Expert Advisor를 수동으로 다시 컴파일하십시오.

 
alexvd :
완전한 코드를 제공할 수 있습니까?

그리고 나는 아마도 모든 것을 가져 왔을 것입니다. 더 이상 이유가 무엇인지 알 수조차 없습니다 ...

나는 상황을 더 자세히 설명하려고 노력할 것입니다.

간단한 "CMqlTimer" 클래스가 있으며, 이 클래스의 작업은 시, 일, 주, 월, 연도와 같은 다양한 시간 간격을 변경하는 순간을 추적하는 것입니다.

예를 들어 분이 0이면 "새로운 시간"이 온 것입니다. 요일의 숫자가 변수에 저장된 숫자와 일치하지 않으면 요일이 변경되었습니다(서버 시간에 따라 "00:00:00"). 글쎄, 등등.

CMqlTimer::OnTimer()에서 1초 간격으로 타이머가 실행될 때 분석이 수행됩니다. 특정 시간 간격이 변경되면 특정 기능을 실행해야 합니다. 예를 들어 "새로운" 날이 오면 CMqlTimer::OnRolloverDay() 함수를 실행해야 합니다.


따라서 다른 모든 것을 제거하고 OnRolloverDay()의 본질만 남기면 다음과 같이 됩니다.

 //Function CMqlTimer.OnRolloverDay
bool CMqlTimer::OnRolloverDay()
//Дневной ролловер
{
//----------------------------------------------------------------------------//
//Work variables
string MessageText; //Text for message
int     UserEventID; //Identifier of the user event  

bool Result; //Returned importance
//----------------------------------------------------------------------------//

Result = true;

ResetLastError ();

RolloverCountDay = RolloverCountDay+ 1 ;

UserEventID = CHARTEVENT_CUSTOM +15;
MessageText = StringFormat ("Rollover Day (№ %d)",RolloverCountDay); //Можно просто "Rollover Day"
//We refer user event of the work chart
EventChartCustom ( 0 ,( ushort )UserEventID- CHARTEVENT_CUSTOM , 0 , 0 ,MessageText);

//Checking for presence of the errors
   if ( _LastError != 0 )
   //В результате работы произошла ошибка
  {
  Result = false;  
  }
//----------------------------------------------------------------------------//
return (Result);
//----------------------------------------------------------------------------//
}

모든 사용자 이벤트는 추적되고 처리를 위해 기본 클래스로 전달됩니다.

이렇게 생겼어요

 void OnChartEvent ( const int id,         // идентификатор события  
                   const long & lparam,   // параметр события типа long
                   const double & dparam, // параметр события типа double
                   const string & sparam   // параметр события типа string
                  )
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//

//----------------------------------------------------------------------------//
//                          Processing user events                            //
//----------------------------------------------------------------------------//
   if (id> CHARTEVENT_CUSTOM )
   //User event is received
  {
  Expert.OnEvent(id,lparam,dparam,sparam);
  }
//----------------------------------------------------------------------------//  
}

따라서 테스트 모드에서 이벤트는 OnChartEvent에 도달하지 않습니다. 테스트 모드의 EA는 EventChartCustom을 사용하여 보낸 이벤트를 처리할 수 없습니다. 로그의 모든(한 행에 있는) 이벤트를 표시하여 확인합니다.

추신

가장 흥미로운 점은 모든 이벤트가 데모에 도달 하지만 테스터에서는 작동하지 않는다는 것입니다.

319까지는 테스터에서 모든 것이 작동하고 이벤트가 성공적으로 처리되었습니다. 사실, 나는 그것이 작동했던 마지막 릴리스를 말할 수 없습니다 ...

 
stringo :

로그에 "'test.ex5'의 디버그 버전입니다. 다시 컴파일하십시오."

즉, 디버깅용 EX5(편집기에서 F5를 누르면 디버그 정보가 있는 EX5가 제공됨)를 테스터에서 실행할 수 없습니다.

우리는 그러한 Expert Advisors를 자동으로 재컴파일할 것입니다. 그동안 Expert Advisor를 수동으로 다시 컴파일하십시오.

고맙습니다. F5 키와 F7 키를 눌러 얻은 파일 사이에 차이가 있다는 것을 몰랐습니다.
 
Interesting :

그리고 나는 아마도 모든 것을 가져 왔을 것입니다. 더 이상 이유가 무엇인지 알 수조차 없습니다 ...

나는 상황을 더 자세히 설명하려고 노력할 것입니다.

...
고맙습니다. 계속 생각하겠습니다.
 

문제가 무엇인지 이해할 수 없습니다. 테스터의 EA가 오류 없이 작동하고 주최자의 테스트 머신에서도 오류 없이 통과합니다.

데모 계정으로 실행하고 주문을 열려고 할 때 오류가 발생합니다.

2010.09.06 13:26:50 거래 '101894' : 0.10 USDJPY at 84.179 [지원되지 않는 충전 모드] 즉시 구매 실패
2010.09.06 13:26:45 거래 '101894' : 1.03689에서 0.10 USDCAD 즉시 구매 실패 [지원되지 않는 충전 모드]
2010.09.06 13:26:39 거래 '101894' : 84.174에서 0.10 USDJPY 즉시 구매 실패 [지원되지 않는 충전 모드]
2010.09.06 13:26:34 거래 '101894' : 1.03685에서 0.10 USDCAD 즉시 구매 실패 [지원되지 않는 충전 모드]
2010.09.06 13:26:28 Trades '101894' : 0.10 USDJPY at 84.174 [지원되지 않는 충전 모드] 즉시 구매 실패
2010.09.06 13:26:23 거래 '101894' : 1.03688에서 0.10 USDCAD 즉시 구매 실패 [지원되지 않는 충전 모드]
2010.09.06 13:26:18 거래 '101894' : 0.10 USDJPY at 84.181 즉시 구매 실패 [지원되지 않는 충전 모드]

판매 요청:

 MqlTradeRequest request;
         request.action= TRADE_ACTION_DEAL ;
         request.symbol=Symbol_[i];
         request.volume=volume_exe;
         request.price= SymbolInfoDouble (Symbol_[i], SYMBOL_BID );
         request.sl= 0 ;
         request.tp= 0 ;
         request.deviation= SymbolInfoInteger (Symbol_[i], SYMBOL_SPREAD )* 2 ;
         request.type= ORDER_TYPE_SELL ;
         request.type_filling= ORDER_FILLING_CANCEL

구매 요청:

 MqlTradeRequest request;
         request.action= TRADE_ACTION_DEAL ;
         request.symbol=Symbol_[i];
         request.volume=volume_exe;
         request.price= SymbolInfoDouble (Symbol_[i], SYMBOL_ASK );
         request.sl= 0 ;
         request.tp= 0 ;
         request.deviation= SymbolInfoInteger (Symbol_[i], SYMBOL_SPREAD )* 2 ;
         request.type= ORDER_TYPE_BUY ;
         request.type_filling= ORDER_FILLING_CANCEL ;

동시에 OrderCheck는 오류를 찾지 않습니다.


 

ORDER_FILLING_CANCEL 요청을 ORDER_FILLING_AON 요청으로 교체 하고 EA가 작동하기 시작했습니다.

그런데 문제는 테스터와 서버의 작업에 왜 이렇게 차이가 있느냐는 것이다.


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

챔피언십 서버가 반대로 된다면 재미있을 것 같다.