iBarShift와 유사함 - 페이지 2

 
여기에는 iBarShift() 아날로그의 두 가지 변형이 있습니다. post #5post #7
 
Denis :

Bars 함수 는 막대 수를 반환합니다 . 인덱스가 9인 막대의 인덱스를 가져와야 할 때(동어반복어 죄송합니다), 10을 반환합니다. 첫 번째 막대의 인덱스는 0입니다.
네, 감사합니다. 일반적으로 올바른 추가 설명입니다. 사실, 나는 정말로 귀찮게하지 않습니다. 이것이 바의 양이라는 것을 알고 있습니다. 그리고 프로그램에 인덱스가 필요한 경우에만 하나를 뺍니다.
 
Vasiliy Pushkaryov :
여기에는 iBarShift() 아날로그의 두 가지 변형이 있습니다. post #5post #7
그냥 옵션:
 Bars ( NULL , 0 , t, 32000000000 )-1;

현재 기호 및 시간 프레임에 대한 iBarShift 아날로그에 대한 가장 짧고 빠른 솔루션이며 추가 기능이 필요하지 않습니다. 그러나 현재가 아닌 경우에도 0 대신 처음 두 매개변수를 입력하면 됩니다.
 
Nikolai Semko :
그냥 옵션:

현재 기호 및 현재 시간 프레임에 대한 iBarShift 아날로그에 대한 가장 짧고 빠른 솔루션이며 추가 기능이 필요하지 않습니다.

그러나 모든 경우에 올바르게 작동하지는 않습니다. fxsaber의 GetBarShift()는 더 다양합니다.

함수에 t 대신 TimeCurrent() 를 넣으면 결과가 직접 표시됩니다.

 
Vasiliy Pushkaryov :

그러나 모든 경우에 올바르게 작동하지는 않습니다. fxsaber의 GetBarShift()는 더 다양합니다.

함수에 t 대신 TimeCurrent() 를 넣으면 결과가 직접 표시됩니다.

결과는 같을 것이다
 
Nikolai Semko :
결과는 같을 것이다
당신은 확인도 하지 않았다
 
Vasiliy Pushkaryov :
당신은 확인도 하지 않았다
이 전에 여러 번 확인했기 때문에 그냥 알고 있습니다. 그러나 당신은 그것을 직접 시도하지도 않았습니다.
 
Nikolai Semko :
이 전에 여러 번 확인했기 때문에 그냥 알고 있습니다. 그러나 당신은 그것을 직접 시도하지도 않았습니다.

스크립트는 다음과 같습니다.

 void OnStart ()
{
   int idShort = Bars ( NULL , 0 , TimeCurrent (), 32000000000 )- 1 ;
   int idUni = GetBarShift( _Symbol , 0 , TimeCurrent ());
   Print ( "idShort = " , idShort, " idUni=" , idUni);
}


//+------------------------------------------------------------------------------------------------------------------+
//| 
//+------------------------------------------------------------------------------------------------------------------+
int GetBarShift( const string symbol_name, const ENUM_TIMEFRAMES timeframe, const datetime time) 
{
   int res=- 1 ;
   datetime last_bar;
  
   // --- время открытия последнего бара по символу, периоду
   if ( SeriesInfoInteger (symbol_name, timeframe, SERIES_LASTBAR_DATE , last_bar)) 
  {
     if (time > last_bar) res = 0 ;
     else 
    {
       const int shift = Bars (symbol_name, timeframe, time, last_bar);
       if (shift > 0 ) res = shift- 1 ;
    }
  }
   return res;
}

그는 그냥 매달려. 차트에서 강제로 삭제하면 결과가 나옵니다.


그래서 노력해서 조언을 드렸습니다. 그러나 당신이 그것을 사용하고 당신에게 적합하기 때문에 나는 당신을 설득하지 않을 것입니다.

 

글쎄, 그것도 가능하다

 int iBarShift ( string symbol, ENUM_TIMEFRAMES timeframe, datetime tm)
   {
        datetime tm0[ 1 ];      
         CopyTime (symbol,timeframe, 0 , 1 ,tm0);
        int res= Bars (symbol,timeframe,tm0[ 0 ],tm)- 1 ;
         return (res);
   }
 
iBarShift
iBarShift
  • 투표: 42
  • 2013.10.25
  • Alain Verleyen
  • www.mql5.com
Многие ищут функцию iBarShift, которая была в языке MQL4. В языке MQL5 ее нет, но есть все возможности для ее реализации в виде библиотеки.
사유: