iBarShift와 유사함 - 페이지 11

 
Nikolai Semko :

네, 그렇습니다. 일반 기능의 일반적인 동작이 이상합니다. 결국, 우리는 "참조"에서 값을 정확하게 조정하고 있습니다.

MQL4의 일반 함수 iBarShift는 요청한 시간이 구멍에 들어갈 때 왼쪽 막대의 번호(즉, 이 경우 토요일)를 반환하고 iBarShift3은 구멍에서 오른쪽 막대(즉, 월요일)의 번호를 반환합니다. 더 논리적입니다.

구멍에 있는 경우 왼쪽 막대, 마지막으로 알려진 값을 반환하지만 미래는 반환하지 않는 것이 논리적입니다.

 
Vitaly Muzichenko :

구멍에 있는 경우 왼쪽 막대, 마지막으로 알려진 값을 반환하지만 미래는 반환하지 않는 것이 논리적입니다.

네. 뭔가 내가 바보입니다. 과거와 미래를 혼동합니다. 아마도 1(과거) > 0(미래) 때문일 것입니다. 프로그래밍.
 
Alain Verleyen :


대부분의 경우 함수는 잘못된 결과를 반환합니다.

추신: 영어 버전을 게시해야 합니까 아니면 러시아어 번역이 정확합니까?

네, 번역이 맞습니다.

이 스크립트를 실행하면 함수 가 정확히 동일한 결과를 생성하는 것을 볼 수 있습니다.

이 함수들의 값이 다른 시간대와 시간의 예를 들어주실 수 있나요?

그건 그렇고, 당신의 기능은 종종 잘못됩니다. 값 -1을 반환합니다.

 2018.04 . 04 22 : 51 : 05.666 TestBarShift2 AUDUSD,M5: BarShiftX   PERIOD_M1    0    - 1      2018.04 . 05 05 : 45 : 00
2018.04 . 04 22 : 50 : 46.867 TestBarShift2 AUDUSD,M5: BarShiftX   PERIOD_M1    0    - 1      2018.04 . 05 05 : 46 : 00
2018.04 . 04 22 : 50 : 41.255 TestBarShift2 AUDUSD,M5: BarShiftX   PERIOD_M1    0    - 1      2018.04 . 05 05 : 47 : 00
2018.04 . 04 22 : 50 : 23.496 TestBarShift2 AUDUSD,M5: BarShiftX   PERIOD_M1    0    - 1      2018.04 . 05 05 : 45 : 00
2018.04 . 04 22 : 50 : 05.596 TestBarShift2 AUDUSD,M5: BarShiftX   PERIOD_M1    0    - 1      2018.04 . 05 05 : 47 : 00
2018.04 . 04 22 : 48 : 38.638 TestBarShift2 AUDUSD,M5: BarShiftX   PERIOD_M1    0    - 1      2018.04 . 05 05 : 47 : 00
파일:
 
Alain Verleyen :

요구 사항은 mql4 버전과 같은 것입니다.


함수가 exact=true 매개변수와 함께 올바르게 작동하지 않습니다.

이 스크립트에서 확인할 수 있습니다.

그리고 정확한 매개변수 가 있는 iBarShift 함수의 전체 작동 아날로그는 다음 과 같습니다.

 int iBarShift1( const string Symb, const ENUM_TIMEFRAMES TimeFrame, datetime time, bool exact= false )
  {
   int Res= Bars (Symb,TimeFrame,time+ 1 , UINT_MAX );
   if (exact) if ((TimeFrame!= PERIOD_MN1 || time> TimeCurrent ()) && Res== Bars (Symb,TimeFrame,time- PeriodSeconds (TimeFrame)+ 1 , UINT_MAX )) return (- 1 );
   return (Res);
  }

이 매개변수가 없으면 다음 형식으로 단순화할 수 있습니다.

 Bars (Symb,TimeFrame,time+ 1 , UINT_MAX );
파일:
 
Nikolai Semko :

네, 번역이 맞습니다.

이 스크립트를 실행하면 함수 가 정확히 동일한 결과를 생성하는 것을 볼 수 있습니다.

이 함수들의 값이 다른 시간대와 시간의 예를 들어주실 수 있나요?

그건 그렇고, 당신의 기능은 종종 잘못됩니다. 값 -1을 반환합니다.

진지해 주세요. 내 코드는 mql5입니다.

Bars() 함수는 MT4에서 신뢰할 수 없기 때문에 -1을 반환합니다.

...   
   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);
     }
...

AUDUSD, M5 차트에서 실행되는 스크립트.

이것은 MT5에서는 발생하지 않습니다.

 
Alain Verleyen :

진지해 주세요. 내 코드는 mql5입니다.

Bars() 함수는 MT4에서 신뢰할 수 없기 때문에 -1을 반환합니다.

AUDUSD, M5 차트에서 실행되는 스크립트.

이것은 MT5에서는 발생하지 않습니다.

모든 것이 MQL4에서처럼 작동해야 한다고 말씀하셨습니다.

그러나 이 스크립트는 MQL5에서도 실행할 수 있습니다.

 2018.04 . 05 09 : 52 : 40.760 TestBarShift2 (EURUSD,M12)       PERIOD_M3   BarShift1 = - 1   BarShift2 = 0      2018.08 . 10 18 : 39 : 49    exact = true
2018.04 . 05 09 : 52 : 40.760 TestBarShift2 (EURUSD,M12)       PERIOD_M10   BarShift1 = - 1   BarShift2 = 0      2018.04 . 15 00 : 25 : 08    exact = true
2018.04 . 05 09 : 52 : 40.761 TestBarShift2 (EURUSD,M12)       PERIOD_M6   BarShift1 = - 1   BarShift2 = 0      2018.04 . 21 04 : 26 : 03    exact = true
2018.04 . 05 09 : 52 : 40.761 TestBarShift2 (EURUSD,M12)       PERIOD_M15   BarShift1 = - 1   BarShift2 = 0      2018.05 . 29 17 : 10 : 52    exact = true
2018.04 . 05 09 : 52 : 40.761 TestBarShift2 (EURUSD,M12)       PERIOD_M12   BarShift1 = - 1   BarShift2 = 0      2018.09 . 16 13 : 10 : 33    exact = true
2018.04 . 05 09 : 52 : 40.762 TestBarShift2 (EURUSD,M12)       PERIOD_M10   BarShift1 = - 1   BarShift2 = 0      2018.09 . 25 21 : 24 : 50    exact = true
2018.04 . 05 09 : 52 : 40.762 TestBarShift2 (EURUSD,M12)       PERIOD_M10   BarShift1 = - 1   BarShift2 = 0      2018.05 . 30 20 : 04 : 10    exact = true
2018.04 . 05 09 : 52 : 40.762 TestBarShift2 (EURUSD,M12)       PERIOD_M5   BarShift1 = - 1   BarShift2 = 0      2018.04 . 29 16 : 12 : 16    exact = true

정확=참 및 미래 시제를 사용하면 -1을 반환해야 합니다.

그리고 내 스크립트는 당신에게서 이상한 오류를 발견했습니다.

이 오류는 다음 검사로 확인됩니다.

 Print (iBarShift2( _Symbol , PERIOD_MN1 , D'2015.12.31 21:03:54' , true )); // -1
Print (iBarShift1( _Symbol , PERIOD_MN1 , D'2015.12.31 21:03:54' , true )); // 28
그래서 나는 당신의 알고리즘에 비정상적인 상황이 존재한다는 것에 대해 여전히 옳았습니다.
파일:
 

내가 한 모든 분석에서 결론은 이것이 iBarShift 기능과 완전히 유사하다는 것을 암시합니다.

 int iBarShift( const string Symb, const ENUM_TIMEFRAMES TimeFrame, datetime time, bool exact= false )
  {
   int Res= Bars (Symb,TimeFrame,time+ 1 , UINT_MAX );
   if (exact) if ((TimeFrame!= PERIOD_MN1 || time> TimeCurrent ()) && Res== Bars (Symb,TimeFrame,time- PeriodSeconds (TimeFrame)+ 1 , UINT_MAX )) return (- 1 );
   return (Res);
  }

가장 정확하고 동시에 가장 빠르고 가장 간단하고 짧은 알고리즘입니다.

정확한 매개변수가 필요하지 않은 경우 단순화된 버전을 사용할 수 있습니다.

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

또는 함수를 호출 하지 않고 이 동등한 옵션을 사용하십시오.

 Bars (Symb,TimeFrame,time+ 1 , UINT_MAX );
아니면 내가 틀렸습니까?
 
침묵은 동의를 의미합니다.
 
Nikolai Semko :
침묵은 동의를 의미합니다.

ME에서 CTRL + SHIFT + F를 통해 "BarShift"를 검색했습니다. 비슷한 기능을 사용하지 않는 것으로 나타났습니다. 그럴 필요가 없었던 것 같습니다.

한 번은 한 줄에 MT4 Expert Advisors를 MT5로 변환하는 변형을 작성한 적이 있습니다. 쓰는 유일한 이유인 것 같습니다.

나는 술집과 일하지 않으며 왜 다른 사람들도 똑같이 하지 않는지 이해할 수 없습니다.

코드를 이해하지 못했습니다. 하지만 빠른 해결책을 얻을 때마다 저는 항상 기쁩니다.

 
fxsaber :

ME에서 CTRL + SHIFT + F를 통해 "BarShift"를 검색했습니다. 비슷한 기능을 사용하지 않는 것으로 나타났습니다. 그럴 필요가 없었던 것 같습니다.

한 번은 한 줄에 MT4 Expert Advisors를 MT5로 변환하는 변형을 작성한 적이 있습니다. 쓰는 유일한 이유인 것 같습니다.

나는 술집과 일하지 않으며 왜 다른 사람들도 똑같이 하지 않는지 이해할 수 없습니다.

코드를 이해하지 못했습니다. 하지만 빠른 해결책을 얻을 때마다 저는 항상 기쁩니다.

나는 당신이 의미하는 바를 이해하지만 나에게 바 작업은 여전히 적합합니다. 언젠가는 나에게도 흔적이 되지 않을까.