Ошибки, баги, вопросы - страница 1010

ns_k:

День добрый!

Подскажите пожалуйста способ как можно имея datetime получить номер бара на графике.

Спасибо! 

Перебор баров и сравнение времени не предлагать :) 

//iBarShift
int iBarShiftMQL4(string _symbol,int tf,datetime time,bool exact=false){
   if(time<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[],time1;
   CopyTime(Symbol(),timeframe,0,1,Arr);
   time1=Arr[0];
   if(CopyTime(_symbol,timeframe,time,time1,Arr)>0)
     {
      if(ArraySize(Arr)>2) return(ArraySize(Arr)-1);
      if(time<time1) return(1);
      else return(0);
     }
   else return(-1);
  } 
//тф
ENUM_TIMEFRAMES TFMigrate(int tf){
   switch(tf)
     {
      case 0: return(PERIOD_CURRENT);
      case 1: return(PERIOD_M1);
      case 5: return(PERIOD_M5);
      case 15: return(PERIOD_M15);
      case 30: return(PERIOD_M30);
      case 60: return(PERIOD_H1);
      case 240: return(PERIOD_H4);
      case 1440: return(PERIOD_D1);
      case 10080: return(PERIOD_W1);
      case 43200: return(PERIOD_MN1);
      
      case 2: return(PERIOD_M2);
      case 3: return(PERIOD_M3);
      case 4: return(PERIOD_M4);      
      case 6: return(PERIOD_M6);
      case 10: return(PERIOD_M10);
      case 12: return(PERIOD_M12);
      case 20: return(PERIOD_M20);
      case 16385: return(PERIOD_H1);
      case 16386: return(PERIOD_H2);
      case 16387: return(PERIOD_H3);
      case 16388: return(PERIOD_H4);
      case 16390: return(PERIOD_H6);
      case 16392: return(PERIOD_H8);
      case 16396: return(PERIOD_H12);
      case 16408: return(PERIOD_D1);
      case 32769: return(PERIOD_W1);
      case 49153: return(PERIOD_MN1);      
      default: return(PERIOD_CURRENT);
     }} 
ns_k:

День добрый!

Подскажите пожалуйста способ как можно имея datetime получить номер бара на графике.

Спасибо! 

Перебор баров и сравнение времени не предлагать :) 

С помощью функции Bars().
ns_k:

День добрый!

Подскажите пожалуйста способ как можно имея datetime получить номер бара на графике.

Спасибо! 

Перебор баров и сравнение времени не предлагать :) 

Можно использовать Bars(), второй тип вызова.
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - Документация по MQL5
Lizar:
Можно использовать Bars(), второй тип вызова.
Всем спасибо пребольшое!!
ns_k:

День добрый!

Подскажите пожалуйста способ как можно имея datetime получить номер бара на графике.

Спасибо! 

Перебор баров и сравнение времени не предлагать :) 

ArraySetAsSeries

переверните массив, будет номер бара.

Silent:

переверните массив, будет номер бара.

не пойму, что - то. Предложенный выше способ выручил. А в этот не "въеду" никак. В чем смысл? 
ns_k:
не пойму, что - то. Предложенный выше способ выручил. А в этот не "въеду" никак. В чем смысл? 
Последний элемент будет с номером 0.
ns_k:
не пойму, что - то. Предложенный выше способ выручил. А в этот не "въеду" никак. В чем смысл? 

datetime уже есть

ArraySize - кол-во баров, ArraySize-1 - последний бар, ArraySetAsSeries устанавливаете направление индексации, и номер ячейки = бару, слева или справа.

Тут проверочный скрипт лепил.

//Test.mqh
class A {
public:
        virtual int f() { return ( 1 ); }
};
//TestLib.mq5
#property library
#include "Test.mqh"
int g( A* pA ) export { return ( 5 ); }

//Test.mq5
#include "Test.mqh"
#import "TestLib.ex5"
        int g( A* pA );
#import
void OnStart()
{
        A* pA = new A();
        Print( g( pA ));
        delete( pA );
}
Пока всё нормально, но стоит вставить в Test.mq5 например
class B : public A {
};
как сразу возникает ошибка выполнения - не найдена g в TestLib.ex5
Silent:

datetime уже есть

ArraySize - кол-во баров, ArraySize-1 - последний бар, ArraySetAsSeries устанавливаете направление индексации, и номер ячейки = бару, слева или справа.

Тут проверочный скрипт лепил.

Спасибо! Я попробую