RefreshRates() 함수는 무엇을 업데이트합니까? - 페이지 6

 
Mikhail Nazarenko :

MT4는 다크박스이고, 나는 실제 상황에서 테스트해서 거기에서 무슨 일이 일어나는지 판단할 뿐입니다. 처음에는 잠을 아예 안쓰다가 시간제 바에서 엉뚱한 소리가 나자 잠을 추가하니 문제가 사라졌다. MT4 시계열은 어떤 순서로 어떻게 업데이트 됩니까? "가장 순수한 진정한 코드의 증인"이 나를 꾸짖게하십시오. 가장 중요한 것은 내가 공유하는 문제를 해결했다는 것입니다.

나는 테스터에서 실제 시장에서 모든 것이 분명합니다.

월요일부터 어드바이저를 운영하고 있는데 깜짝 놀랐습니다.

여러 개점은 정확합니다. 그 후 매도 대신 다시 매수하고 그 반대도 마찬가지입니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론

비탈리 무지첸코 , 2021.02.15 21:48

알고리즘을 빠르게 확인하기 위해 MT4를 열어보았다.

테스터에서 제대로 작동하고, 실제로 설정한 후 트랜잭션을 역전시키는 것이 매우 이상합니다. 코드는 간단하며 2개의 표시기 버퍼만 있습니다.



표시기 코드는 가장 간단합니다.

   double poi= Point ();
   for ( int i = limit- 2 ; i> 0 ; i--) {
       if (open[i+ 0 ] > close[i+ 0 ] && MathAbs (open[i+ 0 ] - high[i+ 0 ]) < 0.1 * poi)
         Dn[i] = high[i+ 0 ] + 30 * poi;
       if (open[i+ 0 ] < close[i + 0 ] && MathAbs (open[i+ 0 ] - low[i+ 0 ]) < 0.1 * poi)
         Up[i] = low[i+ 0 ] - 30 * poi;
   }
 
Vitaly Muzichenko :

나는 테스터에서 실제 시장에서 모든 것이 분명합니다.

월요일부터 어드바이저를 운영하고 있는데 깜짝 놀랐습니다.

여러 개점은 정확합니다. 그 후 매도 대신 다시 매수하고 그 반대도 마찬가지입니다.


표시기 코드는 가장 간단합니다.

이것은 내가 이 스레드를 열기 전에 만났던 것과 똑같은 쓰레기입니다. 실생활에서는 어떤 이유에서든 터미널에서 오래된 데이터를 제공하므로 위에 isRefresh() 함수를 적어두었습니다. 그녀와 함께보십시오. 모든 것이 나를 위해 잘 작동했습니다.

그것은 당신을 위한 미끄러짐이 아닙니까?

 
Vitaly Muzichenko :

표시기 코드는 가장 간단합니다.

표시기가 거래를 열 수 있습니까?

화살표는 동일합니다. 문제는 EA 코드에 있습니다.

 
Mikhail Nazarenko :

저는 배우기 시작했습니다. 따라서 코드, 테스트, 포럼 또는 문서의 주제에 대한 링크로 확인하십시오. 다른 모든 것은 뇌 자위 행위입니다.

불분명한 부분을 명확히 해주세요. 읽은 후 주요 문제가 해결 된 것처럼 보였고 4가 얼마나 구식인지 논의해야 함)

이러한 시간 프레임 로드를 삽입한 후 문제가 없었습니다.

 bool HistoryCheck(int TF)
  {
   int err= 0 ;   
   int i= 0 ;
   datetime d1= 0 ,d2= 0 ;
   while (i< 10 )
    { 
     if ((d1= iTime ( NULL ,TF, 0 ))== 0 || (d2= iTime ( NULL ,TF,InpPeriod* 2 ))== 0 )          
         PrintFormat ( "itime=0, %s, %s" , TimeToString (d1), TimeToString (d2)) ; 
   err= GetLastError ();    
   if (err== 4066 )    
    {
    	PrintFormat ( "Error=4066" ) ; 
    	Sleep( 500 );     	
    }
   else break;	
      SleepA( 100 );
      i++;                 
    } // while
   if(i==10)
	 { Comment("Update failed. Go to the next attempt."); return(false); }
   PrintFormat ( "HistoryCheck %d , %s, %s" ,i, TimeToString (d1), TimeToString (d2)) ;
   Comment ( "" ); 
   return ( true );
  }

시간 프레임에 거의 불규칙적으로 액세스해야 하는 경우 확인하기 전에 이 다운로드를 다시 수행해야 합니다( 차트가 열려 있는 경우에는 반드시 그런 것은 아님). 그렇지 않으면 이러한 확인이 도움이 됩니다.

   if (( iTime ( NULL ,TF, 0 )+ PeriodSeconds (TF))< TimeCurrent ()
   || ( iTime ( NULL ,TF, 1 )+ PeriodSeconds (TF)* 2 )< TimeCurrent ())
   HistoryCheck(TF)
Документация по MQL5: Операции с графиками / ChartOpen
Документация по MQL5: Операции с графиками / ChartOpen
  • www.mql5.com
ChartOpen - Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mikhail Nazarenko :

이것은 내가 이 스레드를 열기 전에 만났던 것과 똑같은 쓰레기입니다. 실생활에서는 어째서인지 터미널에서 오래된 데이터를 제공하는데, 위에 isRefresh() 함수를 적어두었습니다. 그녀와 함께보십시오. 모든 것이 나를 위해 잘 작동했습니다.

그것은 당신을 위한 미끄러짐이 아닙니까?

아니오, 오프닝은 새로운 0 바에 있고 신호는 닫힌 바, 즉 1에서 검색됩니다.

때때로 EA가 iCustom()을 통해 예상한 것과 다른 것을 받는 상황이 발생합니다. 다시 말하지만, 자주는 아니지만.

여기 또 하나의 신선한 것이 있습니다. 나는 올바르게 매수를 열었습니다. 신호에서 표시기의 다음 신호도 매수(화살표 아래)이지만 어떤 이유로 EA는 iCustom()을 통해 매도 신호를 받았지만 매수를 닫고 매도를 여는 동안 , 두 번째 구매가 있어야 하지만.

시계열에서 볼 수 있는 부분이 올바르지 않습니다. 제가 알아낼 때까지는 4일 전에 발견되었으며 아마도 알 수 없을 것입니다. 계산을 고문에게 전달하겠습니다. 나는 테스터에서 어떤 문제도 보지 못했다.

지금 바로

--- 그리고 방금 발견


 

그리고 한 가지 더, 판매 대신 구매가 열려 있습니다. 내가 말했듯이, 그것은 자주 발생하지 않지만 발생합니다.

표시기 코드는 간단합니다. 트릭이 없습니다.


 
Aleksey Mavrin :

불분명한 부분을 명확히 해주세요. 읽은 후 주요 문제가 해결 된 것처럼 보였고 4가 얼마나 구식인지 논의해야 함)

이러한 시간 프레임 로드를 삽입한 후 문제가 없었습니다.

시간 프레임에 거의 불규칙적으로 액세스해야 하는 경우 확인하기 전에 이 다운로드를 다시 수행해야 합니다( 차트가 열려 있는 경우에는 반드시 그런 것은 아님). 그렇지 않으면 이러한 확인이 도움이 됩니다.

괜찮아

이것은 도움말에서 가져온 것입니다.

지표 및 시계열 데이터에 대한 액세스는 요청된 데이터가 준비되었다는 사실과 상관없이 수행됩니다(소위 비동기 액세스). 이것은 사용자 지정 표시기를 계산하는 데 중요하므로 요청된 데이터가 누락된 경우 Copy...() 유형의 함수는 즉시 오류를 반환합니다. 그러나 Expert Advisors 및 스크립트에서 액세스할 때 누락된 시계열을 다운로드하거나 지표 값을 계산하는 데 필요한 시간을 제공하도록 설계된 짧은 일시 중지와 함께 데이터 수신을 여러 번 시도합니다.


다른 차트에서 정보를 요청하는 경우(기기 이름 및/또는 현재 시간 프레임 값이 다른 경우) 해당 차트가 클라이언트 터미널에서 열리지 않고 필요한 데이터를 요청해야 할 수 있습니다. 서버에서. 이 경우 ERR_HISTORY_WILL_UPDATED 오류(4066 - 요청된 기록 데이터가 업데이트 상태에 있음)가 _Last_error 변수에 배치되고 일정 시간 후에 요청을 다시 시도해야 합니다(ArrayCopySeries() 예제 참조).

 
Vitaly Muzichenko :

그리고 한 가지 더, 판매 대신 구매가 열려 있습니다. 내가 말했듯이, 그것은 자주 발생하지 않지만 발생합니다.

표시기 코드는 간단합니다. 트릭이 없습니다.


가장 신뢰할 수 있는 방법은 로그를 작성하는 것 입니다. 각 거래에서 주요 변수의 값을 파일에 씁니다. 경험상: <0 대신 <=0이 아닌 엄격한 조건이 끔찍한 곡률을 도입했습니다.

 
Vitaly Muzichenko :

나는 테스터에서 실제 시장에서 모든 것이 분명합니다.

월요일부터 어드바이저를 운영하고 있는데 깜짝 놀랐습니다.

여러 개점은 정확합니다. 그 후 매도 대신 다시 매수하고 그 반대도 마찬가지입니다.


표시기 코드는 가장 간단합니다.

   double poi= Point ();
   for ( int i = limit- 2 ; i> 0 ; i--) {
       if (open[i+ 0 ] > close[i+ 0 ] && MathAbs (open[i+ 0 ] - high[i+ 0 ]) < 0.1 * poi)
         Dn[i] = high[i+ 0 ] + 30 * poi;
       if (open[i+ 0 ] < close[i + 0 ] && MathAbs (open[i+ 0 ] - low[i+ 0 ]) < 0.1 * poi)
         Up[i] = low[i+ 0 ] - 30 * poi;
   }


[i + 0]에 0을 추가하는 이유는 무엇입니까?

 
Aleksey Mavrin :

불분명한 부분을 명확히 해주세요. 읽은 후 주요 문제가 해결 된 것처럼 보였고 4가 얼마나 구식인지 논의해야 함)

이러한 시간 프레임 로드를 삽입한 후 문제가 없었습니다.

시간 프레임에 거의 불규칙적으로 액세스해야 하는 경우 확인하기 전에 이 다운로드를 다시 수행해야 합니다( 차트가 열려 있는 경우에는 반드시 그런 것은 아님). 그렇지 않으면 이러한 확인이 도움이 됩니다.

감사합니다. 이것이 핵심입니다. iTime을 통해 업데이트되지 않은 시계열에 액세스한 후 터미널에서 실제로 오류 4066이 발생합니까? null 대신 업데이트되지 않은 정보를 제공하는 iClose를 만났습니다.