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

 
Kairoser :

안녕하세요!

420 릴리스로 업데이트한 후 Expert Advisor를 테스트하기 시작했으며 어떤 이유로 인해 "병합"되기 시작했음을 알았습니다. 나는 거래를 분석하고 손절매가 존재하지 않는 가격에서 발생한다는 것을 알아차렸습니다. 예를 들어 EURUSD 쌍의 경우 손절매가 1.06520으로 설정되어 이 막대 의 최대 가격 이 1.05920이지만 트리거됩니다. 자세히 보니 그런 거래가 많이 있습니다. 동일한 원칙(존재하지 않는 가격에서)에 따라 이익실현도 트리거됩니다. 델타는 동일합니다(600포인트). 차트의 테스터에서 위쪽 및 아래쪽 화살표는 막대에서 멀리 떨어진 공중에 "매달려" 있습니다.

스크린샷을 첨부합니다.

MetaQuotes-Demo에서 테스트를 실행하십시오. Alpari는 (스프레드에서) 솔직히 잘못된 차트 기록을 가지고 있습니다.
 
Renat :
MetaQuotes-Demo에서 테스트를 실행하십시오. Alpari는 (스프레드에서) 솔직히 잘못된 차트 기록을 가지고 있습니다.
예, 실제로 MetaQuotes-Demo 서버에서 모든 것이 잘 작동합니다. 도와 주셔서 감사합니다.
 

몇 가지 질문에 관심이 있습니다.

1. 전략 테스터에서 지표를 사용하면 시스템이 어떻게 작동합니까? 먼저 핸들이 지정된 모든 표시기가 계산되고 OnTick이 시작된 후에만 계산됩니까?

2. 그렇다면 먼저 OnTick을 시작한 다음 명령으로 연결된 표시기의 계산을 시작하는 기능이 손상되지 않습니다. 따라서 예를 들어 5자리 눈금마다 표시기를 계산할 필요는 없지만 예를 들어 4개의 기호에서만 표시기를 계산할 수 있습니다. OnTick을 런칭할 때 현재 가격과 이전 가격을 확인하고 지표 계산 을 시작할지 여부를 결정합니다.

따라서 그것들이 많고 상당히 "무거우면" 최적화 모드에서 자원을 먹습니다 ...

온틱에서 핸들을 만들고 끝에 표시기를 삭제할 수 있고 다음에 온틱을 시작할 때(필요한 경우) 핸들을 다시 생성할 수 있지만 이것이 성능에 도움이 될지 여부는 완전히 명확하지 않습니다...

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
olyakish :

몇 가지 질문에 관심이 있습니다.

1. 전략 테스터에서 지표를 사용하면 시스템이 어떻게 작동합니까? 먼저 핸들이 지정된 모든 표시기가 계산되고 OnTick이 시작된 후에만 계산됩니까?

네. 보다 일반적인 대답은 이벤트 핸들러를 호출하기 전에 모든 표시기의 값을 계산하는 것입니다.

  • 온틱
  • 온타이머
  • OnChartEvent 등
 
olyakish :
2. 그렇다면 먼저 OnTick을 시작한 다음 명령으로 연결된 표시기의 계산을 시작하는 기능이 손상되지 않습니다. 따라서 예를 들어 5자리 눈금마다 표시기를 계산할 필요는 없지만 예를 들어 4개의 기호에서만 표시기를 계산할 수 있습니다. OnTick을 런칭할 때 현재 가격과 이전 가격을 확인하고 지표 계산 을 시작할지 여부를 결정합니다.

따라서 그것들이 많고 상당히 "무거우면" 최적화 모드에서 자원을 먹습니다 ...

이 방법으로는 할 수 없습니다. 테스트를 위해 더 빠른 틱 생성 모드를 사용할 수 있습니다.

  1. 분 막대의 OHLC 가격
  2. 테스트 기간의 시가만
 
Rosh :

이 방법으로는 할 수 없습니다. 테스트를 위해 더 빠른 틱 생성 모드 를 사용할 수 있습니다.

  1. 분 막대의 OHLC 가격
  2. 테스트 기간의 시가만
이 모드와 기능에 대해 알고 있습니다. 저는 그저 허용 가능한(최적의) 방법으로 최적화 속도를 높이고 싶었을 뿐입니다.
 

알아낼 수 있도록 도와주세요 . 데이터 변환 기능이 작동하고 싶지 않습니다. 확인하기 위해 간단한 스크립트를 작성했습니다. 빌드 420, OS - 64비트.

 void OnStart ()
  {
//---
   int i= 0 ;
   bool res= false ;
   string stroka1;
   string stroka2;
   string stroka3;
   string stroka4;
   string stroka5;

   datetime buf1;
   double    buf2;
   double    buf3;
   double    buf4;
   double    buf5;
   
   int filehandle= FileOpen ( "56451.csv" , FILE_READ | FILE_CSV | FILE_ANSI , ',' ,CP_UTF8);

   if (filehandle== INVALID_HANDLE ) Print ( "Ошибка № - " , GetLastError ());
   else
     {

       while (!res)
        {
         stroka1 = FileReadString (filehandle);
         stroka2 = FileReadString (filehandle);
         stroka3 = FileReadString (filehandle);
         stroka4 = FileReadString (filehandle);
         stroka5 = FileReadString (filehandle);

         buf1 = StringToTime (stroka1);
         buf2 = StringToDouble (stroka2);
         buf3 = StringToDouble (stroka3);
         buf4 = StringToDouble (stroka4);
         buf5 = StringToDouble (stroka5);

         res= FileIsEnding (filehandle);
         i++;
        }
       FileClose (filehandle);
     }
  }
//+------------------------------------------------------------------+
파일:
56451.zip  16 kb
 
sergey1294 :

알아낼 수 있도록 도와주세요. 데이터 변환 기능이 작동하고 싶지 않습니다. 확인하기 위해 간단한 스크립트를 작성했습니다. 빌드 420, OS - 64비트.


모든 단계에서 따옴표를 제거하십시오....
 
AlexSTAL :
모든 단계에서 따옴표를 제거하십시오....
하지만 어떻게 해야 할까요?
 
sergey1294 :
하지만 어떻게 해야 할까요?

원래 파일에 없었거나 읽을 때 기능을 추가로 사용합니다. 예를 들면 다음과 같습니다.

 string StringWithoutQuotes( string Value)
{
   StringTrimLeft (Value);
   StringTrimRight (Value);
   return ( StringSubstr (Value, 1 , StringLen (Value) - 2 ));
}

..........

         stroka1 = StringWithoutQuotes( FileReadString (filehandle));
         stroka2 = StringWithoutQuotes( FileReadString (filehandle));