Как получить параметры Open,Low,High,Close в МQL5? - страница 8

 
Artyom Trishkin:

Точно искать не буду - некогда. Думал есть что "из коробки" - запустил и увидел результат. А так ... Да ещё и скрипт не отрабатывает сразу, а висит пока не закроешь принудительно ПКМ по его значку. И лишь тогда что-то там распечатывает. В общем - с макросами одна морока почему-то.

А мой пост есть смысл в тему багов переносить?

 
Artyom Trishkin:

Точно искать не буду - некогда. Думал есть что "из коробки" - запустил и увидел результат. А так ... Да ещё и скрипт не отрабатывает сразу, а висит пока не закроешь принудительно ПКМ по его значку. И лишь тогда что-то там распечатывает. В общем - с макросами одна морока почему-то.

ааа, вон где собакен порылся!

мои тесты видел? вон и Роман тоже выложил

там теста на 436 секунд = 7 минутов!

;)

ЗЫ: говорю же шаловливые ручки натыкали!...скрипт не отрабатывает "из коробок"...  ))))


Roman:

А мой пост есть смысл в тему багов переносить?

каких багов? - ну пишите в Вайн и Дебиан, что не умеют полностью загружать ядра процессора, у Вас МТ под какую ОС?

 
Igor Makanu:

ааа, вон где собакен порылся!

мои тесты видел? вон и Роман тоже выложил

там теста на 436 секунд = 7 минутов!

;)

ЗЫ: говорю же шаловливые ручки натыкали!...скрипт не отрабатывает "из коробок"...  ))))

Жуть :)

Надо больше отдыхать...

 
Igor Makanu:

ааа, вон где собакен порылся!

мои тесты видел? вон и Роман тоже выложил

там теста на 436 секунд = 7 минутов!

;)

ЗЫ: говорю же шаловливые ручки натыкали!...скрипт не отрабатывает "из коробок"...  ))))


каких багов? - ну пишите в Вайн и Дебиан, что не умеют полностью загружать ядра процессора, у Вас МТ под какую ОС?

МТ само собой под Windows, да как сказать...
В VS Code на Debian, когда тестирую нагрузку других кодов, грузятся все ядра, так что на Debian грешить это лишнее.
А вот Wine может, а скорее всего MT не допилен под него. По этому недопил из под Wine.
А из под Wine на линуксах многие сидят.

 
Igor Makanu:

ааа, вон где собакен порылся!

мои тесты видел? вон и Роман тоже выложил

там теста на 436 секунд = 7 минутов!

;)

ЗЫ: говорю же шаловливые ручки натыкали!...скрипт не отрабатывает "из коробок"...  ))))


Добро. Без шаловливые ручек первый тест прошёл за пять минут. Остальные и через двадцать не закончились. Кулер начал взлетать, кофе, рядом стоящий - закипать... В общем - вырубил нафиг...
 
Какой вердикт по скорости функций - какая быстрее?
 
Renat Akhtyamov:
Какой вердикт по скорости функций - какая быстрее?

Похоже, что CopyXXX(), но не CopyRates(). Когда требуется одновременное получение нескольких данных - то CopyRates()

 
Artyom Trishkin:
Добро. Без шаловливые ручек первый тест прошёл за пять минут. Остальные и через двадцать не закончились. Кулер начал взлетать, кофе, рядом стоящий - закипать... В общем - вырубил нафиг...

хм, думаю у тебя биты в байты не хотят строиться...вариантов в принципе больше нет! ))))

если уж топик под пристальным оком модератора - значит нужно что то делать...разобрал макрос "на запчасти",

Артем, так хоть работает?

#property script_show_inputs

input ulong LoopCount=500000000;

// Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.
#define DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
  class CLASS##NAME                                                                                           \
  {                                                                                                           \
  public:                                                                                                     \
    static T Get(const string Symb,const int TimeFrame,const int iShift) \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
      return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \
    }                                                                                                         \
                                                                                                              \
    T operator[](const int iPos) const                                                                     \
    {                                                                                                         \
      return(CLASS##NAME::Get(_Symbol, _Period, iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS##NAME NAME;                                                                                           \
                                                                                                              \
  T i##NAME(const string Symb,const int TimeFrame,const int iShift) \
  {                                                                                                           \
    return(CLASS##NAME::Get(Symb, TimeFrame, iShift));                                                        \
  }
//+------------------------------------------------------------------+
DEFINE_TIMESERIE(Volume,TickVolume,long)
DEFINE_TIMESERIE(Time,Time,datetime)
DEFINE_TIMESERIE(Open,Open,double)
DEFINE_TIMESERIE(High,High,double)
DEFINE_TIMESERIE(Low,Low,double)
DEFINE_TIMESERIE(Close,Close,double)
//+------------------------------------------------------------------+
void OnStart()
  {
   double c,buff[1];
   MqlRates rates[1];
   ulong i;
//-----   
   Print("Start test № 1...");
   Sleep(125);
   srand(GetTickCount());
   uint start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      CopyClose(_Symbol,_Period,rand(),1,buff);
   printf("CopyClose : loops=%u , ms=%u",i,GetTickCount()-start);
//-----   
   Print("Start test № 2...");
   Sleep(125);
   srand(GetTickCount());
   start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      c = iClose(NULL,0,rand());
   printf("iClose : loops=%u , ms=%u",i,GetTickCount()-start);
//-----   
   Print("Start test № 3...");
   Sleep(125);
   srand(GetTickCount());
   start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      c = Close[rand()];
   printf("Close[i] : loops=%u , ms=%u",i,GetTickCount()-start);
//-----   
   Print("Start test № 4...");
   Sleep(125);
   srand(GetTickCount());
   start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      CopyRates(_Symbol,_Period,rand(),1,rates);
   printf("CopyRates : loops=%u , ms=%u",i,GetTickCount()-start);
   Print("End script");
  }
//+------------------------------------------------------------------+

2019.07.30 19:42:16.639 tst_iXXX_Copy (EURUSD,H1) Start test № 1...

2019.07.30 19:42:40.199 tst_iXXX_Copy (EURUSD,H1) CopyClose : loops=500000000 , ms=23422

2019.07.30 19:42:40.199 tst_iXXX_Copy (EURUSD,H1) Start test № 2...

2019.07.30 19:43:26.953 tst_iXXX_Copy (EURUSD,H1) iClose : loops=500000000 , ms=46609

2019.07.30 19:43:26.953 tst_iXXX_Copy (EURUSD,H1) Start test № 3...

2019.07.30 19:44:12.274 tst_iXXX_Copy (EURUSD,H1) Close[i] : loops=500000000 , ms=45156

2019.07.30 19:44:12.274 tst_iXXX_Copy (EURUSD,H1) Start test № 4...

2019.07.30 19:44:42.080 tst_iXXX_Copy (EURUSD,H1) CopyRates : loops=500000000 , ms=29656

2019.07.30 19:44:42.080 tst_iXXX_Copy (EURUSD,H1) End script

Файлы:
 
Renat Akhtyamov:
Какой вердикт по скорости функций - какая быстрее?

да одинаково они работают, имхо эксперименты для экспериментов... вот последний тест вызов на пол миллиарда раз, ну да видна разница, осталось прикинуть сколько тиков в минуте (~60), сколько в тиков в часу (~3600) и сколько в сутках (~86400) и сколько вот эти 23 секунды набегут на пол миллиарда вызовов ...

5 787 дней = 23 секунды профита?  если используем самую быструю функцию на каждом тике!  )))))

имхо, юзай, что удобно и никого не слушай

 
Igor Makanu:

да одинаково они работают, имхо эксперименты для экспериментов... вот последний тест вызов на пол миллиарда раз, ну да видна разница, осталось прикинуть сколько тиков в минуте (~60), сколько в тиков в часу (~3600) и сколько в сутках (~86400) и сколько вот эти 23 секунды набегут на пол миллиарда вызовов ...

5 787 дней = 23 секунды профита?  если используем самую быструю функцию на каждом тике!  )))))

имхо, юзай, что удобно и никого не слушай

я привык к 4-рке, компактнее и более читаемы портянки

на скорость и возможности не жалуюсь, всё норм

;)

Причина обращения: