Эмуляция тиков из советника/индикатора - страница 2

 
Meat:

В Вашем коде, во-первых, идёт не просто эмуляция тика, а принудительное обновление графика с соответствующей подгрузкой истории на каждом тике. Вы хоть в лог журнала заглядываете иногда? Загляните на досуге и посмотрите что там творится. И прикиньте что там будет через денёк например. Особенно если запущено несколько копий индикатора. Я уж молчу про нагрузку системы и интернет-канала.

Если же в вашем коде вместо обновления графика сделать именно эмуляцию тика, то это приведёт к зацикливанию (т.е. индикатор будет запускаться без остановки), а соответственно к подвисанию терминала.

Зачем нужно обновление без подгрузки истории? Принудительное обновление графика и есть эммуляция тика.

Вот лог после 2500 тиков:

00:51:32 Check_UpdateChart EURUSD,M1: loaded successfully
00:52:48 Check_UpdateChart EURUSD,M1: uninit reason 1
00:52:48 Check_UpdateChart EURUSD,M1: removed 

Ничего не подвисает. На то и делается эммуляция, чтобы зацикливался индикатор. Т.е. он сам себя запускает.
 
Zhunko:

Зачем нужно обновление без подгрузки истории? Принудительное обновление графика и есть эммуляция тика.

Вот лог после 2500 тиков:

00:51:32 Check_UpdateChart EURUSD,M1: loaded successfully
00:52:48 Check_UpdateChart EURUSD,M1: uninit reason 1
00:52:48 Check_UpdateChart EURUSD,M1: removed 

Ничего не подвисает. На то и делается эммуляция, чтобы зацикливался индикатор. Т.е. он сам себя запускает.


Я же вроде ясно написал: "лог журнала". Так зачем вы мне показываете лог экспертов?  Судя по всему я был прав, вы туда и не заглядываете никогда.  Не удивлюсь, если у вас половина жёсткого диска уже забита этими логами :)

И не нужно подменять понятия. Обновление истории и эмуляция тика - это разные вещи. Приходящие тики с сервера ведь не обновляют историю (т.е. предыдущие бары). Если бы это происходило, то терминал бы жрал немеряно трафика и ресурсов.

Поэтому вот как-раз непонятно, зачем вам нужно обновление на каждом тике, которое кроме всего прочего обнуляет состояние IndicatorCounted(), а значит необходимо самому проверять всю историю на каждом тике. Это ж сколько ресурсов впустую расходуется.

 
Meat:

 Приходящие тики с сервера ведь не обновляют историю (т.е. предыдущие бары). Если бы это происходило, то терминал бы жрал немеряно трафика и ресурсов.

А как быть если у меня к примеру 1 бар = 2 тика    )))))  В моем случае тики обновляют историю ? 
 
IgorM:

поставил после

в логе получил: 

23:39:01 test EURUSD,H1: loaded successfully
23:39:01 test EURUSD,H1: PostMsgAddr =1977398342
23:39:01 test EURUSD,H1: initialized
23:39:01 test EURUSD,H1: цикл завершен.... 

Да уж, непонятно, в чём же дело... Попробуйте тогда так:  в разделе импорта #import "user32.dll"  добавьте функцию:

CallWindowProcA(int lpPrevWndFunc[], int hWnd, int Msg, int wParam, int lParam);

 А в конце функции SetMyTimer добавьте строчку:  CallWindowProcA(code,0,0,0,0); 

И каким нибудь параллельно запущенным индикатором проверьте, генерируется ли тик в этот момент. 

 
solar:
А как быть если у меня к примеру 1 бар = 2 тика    )))))  В моем случае тики обновляют историю ? 
Ну разумеется текущий бар всегда обновляется. Но речь то шла об истории вообще.
 
Meat:


Я же вроде ясно написал: "лог журнала". Так зачем вы мне показываете лог экспертов?  Судя по всему я был прав, вы туда и не заглядываете никогда.  Не удивлюсь, если у вас половина жёсткого диска уже забита этими логами :)

И не нужно подменять понятия. Обновление истории и эмуляция тика - это разные вещи. Приходящие тики с сервера ведь не обновляют историю (т.е. предыдущие бары). Если бы это происходило, то терминал бы жрал немеряно трафика и ресурсов.

Поэтому вот как-раз непонятно, зачем вам нужно обновление на каждом тике, которое кроме всего прочего обнуляет состояние IndicatorCounted(), а значит необходимо самому проверять всю историю на каждом тике. Это ж сколько ресурсов впустую расходуется.

Лог журнала тоже пуст, но по другой причине. Чистилкой пользуюсь консольной после подкачки истории. У меня свой лог.

Меня лог МТ4 совсем не беспокоит. Метаквоты неоднокрано заявляли, что лог ведётся в последнюю очередь. Он не является приоритетом. Ресурсов не потребляет. Вовремя чистить надо и только. 

По поводу IndicatorCounted()... Не пользую. Индикаторы у меня пустышки-подокна для вывода информации из эксперта. Считаю, вредно пользоваться индикаторами в МТ4. Интерфейсный поток тормозят и работают в 3 раза медленнее экспертов.

Выделенное, конечно, верно, но стоит ли так сильно заморачиваться разделением?

Вот лог журнала на 415 обновлений:

03:00:44 Custom indicator Check_UpdateChart EURUSD,M1: loaded successfully
03:00:46 HistoryCenter: synchronize 'EURUSD1'
03:00:46 HistoryCenter: 2 bars imported in 'EURUSD1'
03:00:47 HistoryCenter: synchronize 'EURUSD1'
03:00:47 HistoryCenter: 2 bars imported in 'EURUSD1'
03:00:47 HistoryCenter: synchronize 'EURUSD1'
03:00:47 HistoryCenter: 2 bars imported in 'EURUSD1'
03:00:48 HistoryCenter: synchronize 'EURUSD1'
03:00:48 HistoryCenter: 2 bars imported in 'EURUSD1'
03:00:48 HistoryCenter: synchronize 'EURUSD1'
03:00:49 HistoryCenter: 2 bars imported in 'EURUSD1'
03:00:49 HistoryCenter: synchronize 'EURUSD1'
03:00:49 HistoryCenter: 2 bars imported in 'EURUSD1'
03:00:50 HistoryCenter: synchronize 'EURUSD1'
03:00:50 HistoryCenter: 2 bars imported in 'EURUSD1'
03:00:51 HistoryCenter: synchronize 'EURUSD1'
03:00:51 HistoryCenter: 2 bars imported in 'EURUSD1'
03:00:51 HistoryCenter: synchronize 'EURUSD1'
03:00:52 HistoryCenter: 2 bars imported in 'EURUSD1'
03:00:52 HistoryCenter: synchronize 'EURUSD1'
03:00:55 HistoryCenter: 2 bars imported in 'EURUSD1'
03:00:55 HistoryCenter: synchronize 'EURUSD1'
03:00:55 HistoryCenter: 2 bars imported in 'EURUSD1'
03:00:55 HistoryCenter: synchronize 'EURUSD1'
03:00:55 HistoryCenter: 2 bars imported in 'EURUSD1'
03:00:55 HistoryCenter: synchronize 'EURUSD1'
03:00:56 HistoryCenter: 2 bars imported in 'EURUSD1'
03:00:56 HistoryCenter: synchronize 'EURUSD1'
03:00:57 Custom indicator Check_UpdateChart EURUSD,M1: removed
03:00:59 HistoryCenter: 2 bars imported in 'EURUSD1'
03:01:01 MetaTrader build 438 stopped 

По моему, это не имеет значения для тестирования работоспособности индикатора в выходные. Лог можно вручную почистить после работы.

Но вставить одну строку кода в конец start(), всё же, проще, чем вставлять Ваш код. Нет смысла так усложнять.

 

У меня ХР - вроде работает - потом сворачивает терминал ....

что в коде индикатора - что в коде советника - что сам по себе - результ один - вылет терминала примерно через 15 - 50 секунд ...

так что что то там у Вас недодуМАТО ...

а так идея неплохая ... 

 

А вот как-нибудь похоже для индикатора сделать можно?: 

 

 

 

 

 

Просто, указывая курсором на тот момент времени, где я хочу увидеть показания индикатора (на тот момент)? 

 

Zhunko, ну так если у вас всё нестандартное (свой лог, своя реализация индикаторов и т.д.), то к чему тогда вы затеяли весь этот разговор?  Мы тут вообще-то обсуждаем работу конкретно с МТ4, а не со своими собственными разработками.

Я же в первом посте специально указал, что мой код будет полезен именно в том случае, если стоит задача обойтись без сторонних ДЛЛ, т.е. реализовать самодостаточный советник/индикатор, который использует лишь системные библиотеки.  А если вы используете свои собственные разработки, то значит к вам это не относится.

И вообще я не понимаю, зачем "вручную чистить лог после работы", если легче просто не захламлять его. Ведь насколько я понял, вы свои разработки реализуете в ДЛЛ. Тогда что вам мешает установить там такой же таймер, как и я предложил здесь. Только там это займёт всего несколько строчек кода. Но вы почему-то предпочитаете всякие пляски с бубном и чисткой лога.  Как-то не по программистки мыслите...   Мой код вас видите-ли напрягает, а чистить ежеденевно логи вам не лень :) 

 
elmucon:

У меня ХР - вроде работает - потом сворачивает терминал ....

что в коде индикатора - что в коде советника - что сам по себе - результ один - вылет терминала примерно через 15 - 50 секунд ...

так что что то там у Вас недодуМАТО ...

а так идея неплохая ... 


Да, возможно не додумано. Я в ассемблере не большой знаток, так что не судите строго :) Попробую разобраться в чём проблема.