Часы реального времени MQL4 (секунда за секундой) - страница 4

 

Хорошо, но это не решение для реального времени, потому что мы не можем контролировать время отклика для событий без тиков.
В случае с "sleep()" мы можем.

 

Так что если мы объединим тик за тиком и несвежие цены со сном, то получим часы реального времени :)

 

Как я уже сказал, если это решение будет реализовано в советнике, то необходимость в TimeCurrent() отпадает, а цикл управляется Sleep(Interval-Runtime) (в мс).

Большая часть кода останется прежней, redraw() больше не понадобится. Также, если вам нужно увеличить скорость кода, вы можете использовать некоторые (ах, я пропустил английское слово) массивы с вращающейся нулевой точкой, чтобы избавиться от цикла сдвига.

AFAIK это (или подобное) лучшее решение, которое можно сделать на чистом MQL в индикаторе. Несомненно, существует лучшее решение, когда вы используете DLL и экспортируете вычисления во внешнюю программу.

 
spidermagos:

Так что если мы объединим тик за тиком и несвежие цены со сном, то получим часы реального времени :)

Да, но Sleep невозможен в индикаторах, это ваша проблема с самого начала этой темы.
 
zzuegg:
Да, но Sleep невозможен в индикаторах, это ваша проблема с самого начала этой темы.

Может ли советник вызывать индикатор?
 
Да, но только через icustom, что не решит вашу проблему.
 
Вы можете прикрепить к графику скрипт, который каждую секунду посылает на график фальшивый тик. Это то, что я обычно делаю для регулярного обновления многопарных индикаторов и советников.
 
7bit:
Вы можете прикрепить к графику скрипт, который каждую секунду посылает на график фальшивый тик. Это то, что я обычно делаю для регулярного обновления многопарных индикаторов и советников.
Вам нужна dll для этого или это возможно без нее?
 
zzuegg:
Вам нужна dll для этого или это возможно без нее?

Это всего лишь несколько строк в mql4 (конечно, вам нужны вызовы DLL, разрешенные для вызова API windows, но вам не нужно ничего устанавливать):

/**
* MT4/experts/scripts/ticks.mq4
* send a fake tick every 1000ms to the chart and
* all its indicators and EA until this script is removed.
*/

#property copyright "© Bernd Kreuss"

#import "user32.dll"
   int PostMessageA(int hWnd, int Msg, int wParam, int lParam);
   int RegisterWindowMessageA(string lpString);
#import

int start(){
   int hwnd = WindowHandle(Symbol(), Period());
   int msg = RegisterWindowMessageA("MetaTrader4_Internal_Message");
   while(!IsStopped()){
      PostMessageA(hwnd, msg, 2, 1);
      Sleep(1000);
   }
}

У меня этот скрипт в избранном, и когда мне нужны тики, я просто перетаскиваю его на график.


У меня также есть вариант этого скрипта без цикла, который посылает только один тик, а затем выходит, и я привязал его (one_tick.mq4) к горячей клавише ALT+T, и теперь я могу посылать тик на активный график, просто нажав ALT-T. Мне это нужно для некоторых моих советников stat-arb, когда я экспериментирую в выходные, чтобы заставить start() запускать их вычисления и построение графиков (я могу перемещать линии на графике, чтобы изменить интервал, а затем мне нужен новый тик, чтобы обновить их вычисления).

 

Отлично. Спасибо, что поделились

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