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

 
Urain :

OnTester() 함수의 강제 종료가 있습니까?

또는 사용자 지정 함수 이전에 거래 내역이 존재하고 다음 이후에 0을 반환하는 이유:

 double OnTester()
  {
   int HTD=- 1 ;
   Custom_func();
   if ( HistorySelect ( 0 , TimeCurrent ()))HTD= HistoryDealsTotal ();   
   return (HTD);
  }

테스터에서 작동하지 않는 기능은 무엇입니까??

테스터(최적화 중)에서 무언가 잘못되었다는 신호를 보내는 방법(경고 인쇄가 작동하지 않음) ??

오늘 밤은 모두 잠든 것 같습니다.
 
Urain :
오늘 밤은 모두 잠든 것 같습니다.

에이전트 로그를 보았습니까? 아마도 모든 것이 거기에 있습니까?

내가 아는 한 최적화 중에만 테스터의 기본 로그에 인쇄물이 표시되지 않습니다(일반 모드에서는 모든 것이 정상).

내가 알기로는 OnTester ()에서 강제 종료할 수 없습니다. 그리고 결국 특정 테스트 결과가 단순히 거기에서 계산되는 이유는 무엇입니까(실제로는 최적화에만 사용됨)?

온테스터 :
OnTester () 함수는 지정된 날짜 간격에 Expert Advisor의 이력 테스트가 완료되면 자동으로 생성되는 Tester 이벤트에 대한 이벤트 핸들러입니다. 함수는 double 유형으로 정의해야 하며 매개변수가 없습니다.

더블   온테스터 ();

이 함수는 OnDeinit() 함수를 호출하기 직전에 호출되며 반환 유형은 double입니다. OnTester() 함수는 테스트 중에 Expert Advisors에서만 사용할 수 있으며 주로 입력 매개변수의 유전적 최적화를 위한 Custom max 기준으로 사용되는 특정 값을 계산하기 위한 것입니다.


추신

> 또는 사용자 정의 함수가 존재하기 전에 거래 내역이 존재하고 그 후에는 0을 반환하는 이유...

여기 아마 개발자들에게.

내가 이해하는 한 OnTester 는 거래 수(있는 경우)를 반환해야 하며 사용자 기능은 Custom_func()로 이해됩니까?

 
Urain :

개발자들에게...

얘들 아, 이전에는 원칙적으로 불가능했던 기회를 제공하는 경우 최소한 경고해야합니다.

그런 버그를 잡기 위해 하루를 버텼다

꼭 필요하다고 가르쳐줄 필요는 없지 물론 다 알지만 익숙해져서 정말 하루 죽인다

컴파일러는 오류를 제공해야 합니다.

글쎄, 결국 어떻게 옳은가? 그래서 "==" 또는 "="?
 
Urain :

OnTester() 함수의 강제 종료가 있습니까?

또는 사용자 지정 함수 이전에 거래 내역이 존재하고 다음 이후에 0을 반환하는 이유:

테스터에서 작동하지 않는 기능은 무엇입니까??

테스터(최적화 중)에서 무언가 잘못되었다는 신호를 보내는 방법(경고 인쇄가 작동하지 않음) ??

메시지 주셔서 감사합니다. 귀하의 신청서가 접수되었습니다. 검토하고 있습니다.

 

새 포지션을 열 때 마진으로 최대 허용 로트를 계산하는 방법은 무엇입니까? MQL4에서는 다음과 같이 수행되었습니다.

MaxLot=AccountFreeMargin()/MarketInfo( Symbol (),MODE_MARGINREQUIRED);
 
EvgeTrofi :

새 포지션을 열기 위한 마진으로 최대 허용 로트를 계산하는 방법은 무엇입니까? MQL4에서는 다음과 같이 수행되었습니다.

다음과 같이 다소:

 double CalculateMaxVolume( string symbol)
  {
   double price= 0.0 ;
   double margin= 0.0 ;
//--- select lot size
   if (! SymbolInfoDouble (symbol, SYMBOL_ASK ,price))                 return ( 0.0 );
   if (!OrderCalcMargin( ORDER_TYPE_BUY ,symbol, 1.0 ,price,margin)) return ( 0.0 );
   if (margin<= 0.0 )                                            return ( 0.0 );

   double lot= NormalizeDouble ( AccountInfoDouble ( ACCOUNT_FREEMARGIN )/margin, 2 );
//--- normalize and check limits
   double stepvol= SymbolInfoDouble (symbol, SYMBOL_VOLUME_STEP );
   lot=stepvol* NormalizeDouble (lot/stepvol, 0 );

   double minvol= SymbolInfoDouble (symbol, SYMBOL_VOLUME_MIN );
   if (lot<minvol) lot=minvol;

   double maxvol= SymbolInfoDouble (symbol, SYMBOL_VOLUME_MAX );
   if (lot>maxvol) lot=maxvol;
//--- return trading volume
   return (lot);
  }
이 코드 는 최대 볼륨 을 계산할 뿐만 아니라 기호 설정의 한계에 정확히 맞춥니다.
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
Renat :

다음과 같이 다소:

이 코드 는 최대 볼륨 을 계산할 뿐만 아니라 기호 설정의 한계에 정확히 맞춥니다.
고맙습니다! 도움말에 OrderCalcMargin() 함수가 없습니다. :)
 
EvgeTrofi :
고맙습니다! 도움말에 OrderCalcMargin() 함수 가 없습니다. :)
이 기능은 오랫동안 추가되었습니다. 설명서를 참조하세요.
 
EvgeTrofi :
글쎄, 결국 어떻게 옳은가? 그래서 "==" 또는 "="?

등등.

if(a==0){expression}은 a가 0이고 true이면 {expression}을 실행한다는 의미입니다.

if(a=0){expression} 은 if(a){a=0;expression} 과 동일하므로 a가 true이면 { a assign 0, expression}입니다.

 
Interesting :

에이전트 로그를 보았습니까? 아마도 모든 것이 거기에 있습니까?

내가 아는 한 최적화 중에만 테스터의 기본 로그에 인쇄물이 표시되지 않습니다(일반 모드에서는 모든 것이 정상).

내가 알기로는 OnTester ()에서 강제 종료할 수 없습니다. 그리고 결국 특정 테스트 결과가 단순히 거기에서 계산 되는 이유는 무엇입니까(실제로는 최적화에만 사용됨)?

추신

> 또는 사용자 정의 함수가 존재하기 전에 거래 내역이 존재하고 그 후에는 0을 반환하는 이유...

여기 아마 개발자들에게.

내가 이해하는 한 OnTester 는 거래 수(있는 경우)를 반환해야 하며 사용자 기능은 Custom_func()로 이해됩니까?

문제는 최적화 자체 중에 프로그램이 다른 상황과 같이 작동하지 않는다는 것입니다(그래서 OnTester 에서 뉴스를 제출해야 함).

이러한 목적을 위해 나는 print(매개변수로 함수에 전달된 하나의 문자열을 인쇄하기 위해 파일을 생성하는 함수)와 유사한 것을 생각해 냈습니다.

 int prints= 0 ;// счётчик вызовов, должен быть обьявлен глобально
//+------------------------------------------------------------------+
//| вывод информации из под тестера                                  |
//+------------------------------------------------------------------+
void WriteFilePrint( string text, string folder= "Print" )
  {
   string subfolder= "Print" ;
   int han= FileOpen (subfolder+ "\\" +folder+( string )prints+ ".csv" , FILE_WRITE | FILE_CSV , ";" );
   if (han!= INVALID_HANDLE )
     {
       FileWrite (han,text);
       FileClose (han);
     }
   else Print ( "File open failed" +subfolder+ "\\" +folder+ ".txt, error" , GetLastError ());
   prints++;
  }

따라서 OnTester 에서 일부 기능의 잘못된 실행을 포착하는 것으로 나타났습니다.