iBarShift와 유사함 - 페이지 9

 
Alain Verleyen :

어떤 문제를 찾았습니까?

다음은 함수의 가짜 실행 예입니다. "BarShift1"이라는 이름으로 작동합니다.


 
Aleksey Vyazmikin :

다음은 함수의 가짜 실행 예입니다. "BarShift1"이라는 이름으로 작동합니다.


실제로는 반대의 경우만 표시되며, 내 버전만 올바른 버전입니다. (그리고 이 코드의 원래 iBarShift1은 정확합니다).

내 버전은 mql4 iBarShift 와 마찬가지로 독립 실행형 기능으로 생각되었습니다.

여러 쿼리에 최적화되어 있지 않으므로 시간 비교는 중요하지 않습니다. @nicholishen 은 대량 호출에 최적화된 멋진 라이브러리 를 게시했습니다.


실제로 그것은 반대를 보여줍니다. 제 버전이 유일한 것입니다. ( 이 코드 의 원래 iBarShift1도 정확합니다).

내 버전은 정확히 mql4 iBarShift 와 같은 독립 실행형 기능으로 사용하도록 고안되었습니다.

여러 요청에 최적화되어 있지 않으므로 시간 비교는 관련이 없습니다. @nicholishen 은 대량 호출에 최적화된 좋은 라이브러리 를 게시했습니다.

iBarShift
iBarShift
  • 투표: 46
  • 2013.10.25
  • Alain Verleyen
  • www.mql5.com
Многие ищут функцию iBarShift, которая была в языке MQL4 (например, 1,2,3). В языке MQL5 ее нет, но есть все возможности для ее реализации в виде библиотеки. В качестве альтернативы многие программисты предложили свои варианты реализации этой функции на MQL5. Обнаружилось, что все 4 версии содержат ошибки (не воспроизводят в точности работу...
 
Alain Verleyen :

실제로는 반대의 경우만 표시되며, 내 버전만 올바른 버전입니다. (그리고 이 코드의 원래 iBarShift1은 정확합니다).

내 버전은 mql4 iBarShift 와 마찬가지로 독립 실행형 기능으로 생각되었습니다.

여러 쿼리에 최적화되어 있지 않으므로 시간 비교는 중요하지 않습니다. @nicholishen 은 대량 호출에 최적화된 멋진 라이브러리 를 게시했습니다.


실제로 그것은 반대를 보여줍니다. 제 버전이 유일한 것입니다. (또한 이 코드 의 원래 iBarShift1도 정확합니다).

내 버전은 정확히 mql4 iBarShift 와 같은 독립 실행형 기능으로 사용하도록 고안되었습니다.

여러 요청에 최적화되어 있지 않으므로 시간 비교는 관련이 없습니다. @nicholishen 은 대량 호출에 최적화된 좋은 라이브러리 를 게시했습니다.

처리 시간을 말하는 것이 아니라 바룸을 말하는 것입니다.

그림은 8시 37분에 코드가 가장 가까운 막대를 전날 23:00의 막대로 생각하지만 실제로 가장 가까운 막대는 10:00임을 보여줍니다. 그것은 수학과 논리 모두에서 더 가깝습니다.

 
Aleksey Vyazmikin :

처리 시간을 말하는 것이 아니라 막대 번호를 말하는 것입니다.

그림은 8시 37분에 코드가 가장 가까운 막대를 전날 23:00의 막대로 간주하지만 실제로 가장 가까운 막대는 10:00임을 보여줍니다. 그는 수학과 논리 모두에서 더 가깝습니다.

단순화하자.

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

iBarShift와 유사함

알랭 벌리앙 , 2018.04.05 00:18

실제로는 반대의 경우만 표시되며, 내 버전만 올바른 버전입니다. (그리고 이 코드의 원래 iBarShift1은 정확합니다).

내 버전은 mql4 iBarShift 와 마찬가지로 독립 실행형 기능으로 생각되었습니다.

mql4를 시도하고 동일한 것을 비교하십시오.
 
Alain Verleyen :
단순화하자.
mql4를 시도하고 동일한 것을 비교하십시오.

당신의 주장을 이해했습니다. 확인하지 않겠습니다. 분명히 이것은 내 작업이 일반적으로 받아 들여지는 논리와 다릅니다.

 
Alain Verleyen :

어떤 문제를 찾았습니까?

이 글을 쓴지 오래입니다. 기억은 안 나지만 뭔가 신경이 쓰였다.
어쨌든, 지금 나는 단 하나의 비상 상황을 발견했습니다.
심볼의 데이터가 아직 로드되지 않은 경우 -1을 반환할 수 있지만 0이어야 합니다.

이것은 내가 첨부하는 MQL4 스크립트를 사용하여 확인할 수 있습니다.

이 스크립트는 임의의 시간과 임의의 시간 프레임이 걸립니다. iBarShiftX 값이 기본 iBarShift 함수 와 일치하지 않으면 인쇄를 통해 메시지가 표시됩니다.

새로 열린 기호에서 이 스크립트를 실행하면 오류가 표시됩니다. 동일한 기호에서 스크립트를 다시 시작하면 오류가 발생하지 않습니다.

그러나 이것은 사소한 일입니다. 내 버전에도 같은 문제가 있습니다.

귀하의 버전에 대해 한 가지 불만 사항이 있습니다. 매우 복잡하고 느립니다.

옵션은 다음과 같습니다.

 int iBarShift2( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact= false )
  {
   datetime LastBAR;
   if (! SeriesInfoInteger (symbol,timeframe, SERIES_LASTBAR_DATE ,LastBAR))
     {
       datetime opentimelastbar[ 1 ];
       if ( CopyTime (symbol,timeframe, 0 , 1 ,opentimelastbar)== 1 )
         LastBAR=opentimelastbar[ 0 ];
       else
         return (- 1 );
     }
   if (time>LastBAR)
       return ( 0 );
   int shift= Bars (symbol,timeframe,time,LastBAR);
   datetime checkcandle[ 1 ];

   if ( CopyTime (symbol,timeframe,time, 1 ,checkcandle)== 1 )
     {
       if (checkcandle[ 0 ]==time)
         return (shift- 1 );
       else if (exact && time>checkcandle[ 0 ]+ PeriodSeconds (timeframe))
         return (- 1 );
       else
         return (shift);
     }
   return (- 1 );
  }

다음은 동일한 작업을 수행하지만 간단한 알고리즘과 훨씬 빠른 내 기능입니다.

   int iBarShift1( const string Symb, const ENUM_TIMEFRAMES TimeFrame, datetime time)
  {
   return ( Bars (Symb,TimeFrame,time+ 1 , UINT_MAX ));
  }

함수 없이 더 짧게 사용할 수 있습니다.

 Bars (Symb,TimeFrame,time+ 1 , UINT_MAX );

그렇지 않으면 증명해보십시오. 함수와 광산이 다른 값을 표시할 때 최소한 하나의 매개변수 조합을 찾으십시오.

왜 필요한지 전혀 이해하지 못하기 때문에 마지막 정확한 매개 변수를 구현하지 않았습니다. 개인적으로 나는 그것이 필요하지 않았습니다.

하지만 누군가가 정말로 그것을 필요로 한다면, 당신은 그것을 구현할 수 있습니다.

나는 iBarShift3 옵션을 떠났습니다. 역사의 구멍을 잘못 채우는 것입니다. 당신은 그것을 고칠 수 있지만 나는 요점을 보지 못합니다. 왜냐하면. 위의 내용이면 충분합니다.

파일:
 
Nikolai Semko :


나는 iBarShift3 옵션을 떠났습니다. 역사의 구멍을 잘못 채우는 것입니다. 당신은 그것을 고칠 수 있지만 나는 요점을 보지 못합니다. 왜냐하면. 위의 내용이면 충분합니다.

바 또는 기타 거래 부족으로 인한 구멍? 그리고 부정확성은 무엇입니까?

 
Aleksey Vyazmikin :

바 또는 기타 거래 부족으로 인한 구멍? 그리고 부정확성은 무엇입니까?

거래가 없을 때 언제든지 일요일을 사용합시다.

 Print ( "iBarShift  = " + IntegerToString ( iBarShift ( _Symbol , PERIOD_H1 , D'01.04.2018 10:00:00' )));  
Print ( "iBarShift3 = " + IntegerToString (iBarShift3( _Symbol , PERIOD_H1 , D'01.04.2018 10:00:00' ))); // показывает на единицу меньше
 
Nikolai Semko :

거래가 없을 때 언제든지 일요일을 사용합시다.

저것들. 월요일을 보여? 그게 나에게 필요한거야... :)

 
글쎄, 당신은 내 기능을 시도하지 않습니다. 거기에서 시간에 막대의 시작과 끝을 제거하는 솔루션이 적용되었습니다. 모든 것이 맞는 것 같습니다. 그리고 시간적으로는 3번째 버전이 가장 빠릅니다. 아니면 브랜치가 더 중요한가요?))) 아니면 오류도 있나요?) 오래전부터 사용하고 있습니다....