MQL4 - automated forex trading   /  

Code Base

Code Base  Советники  Сборщик тиков (TickSave) Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый код


Скачай MetaTrader 5 и посети MQL5.community Code Base
и торгуй мобильно!
Библиотека программ на новом MQL5
Готовься к Чемпионату -
Не нашёл подходящий код? Закажи его в разделе Работа

Этот индикатор для
MetaTrader 4

и торгуй мобильно!

Имя:
Сборщик тиков (TickSave) [ en | cn ]
Автор: komposter (03.07.2006 12:05)
Рейтинг: 9
Скачано: 4082
Скачать:
 TickSave.mq4 (9.7 Kb) View
Эксперт сохраняет тиковую историю по указанным символам в csv-файлы.

Имя файла формируется из названия инструмента и текущей даты ("Символ_Год.Месяц.csv").
Файлы сохраняются в директорию "путь_к_терминалу\experts\files\[Ticks]\Имя сервера\".

Внешние переменные:
  • SymbolList - список символов, по которым необходимо собирать тики. Может содержать от 1 до 32 инструментов, разделенных запятыми (","). Все указанные символы должны присутствовать в окне "Обзор рынка".
  • WriteWarnings - разрешить (true) или запретить (false) запись сообщений о разрыве связи ("--------------------------Connection lost") и остановке эксперта ("--------------------------Expert was stoped"). Эта функция может стать полезной для "латания" дыр в истории.

Примеры файлов:
2006.06.21 11:14:39;1.2634
2006.06.21 11:14:48;1.2633
2006.06.21 11:14:50;1.2634
2006.06.21 11:14:52;1.2633
--------------------------Connection lost 
2006.06.21 11:18:13;1.2634
2006.06.21 11:18:23;1.2633
2006.06.21 11:18:29;1.2634
2006.06.21 11:18:37;1.2633

2006.06.21 04:06:15;1.2618
2006.06.21 04:06:36;1.2617
2006.06.21 04:06:38;1.2618
2006.06.21 04:06:41;1.2617
2006.06.21 04:06:42;1.2618
--------------------------Expert was stoped
2006.06.21 08:18:22;1.2618
2006.06.21 08:18:27;1.2619
2006.06.21 08:18:31;1.2618
2006.06.21 08:18:31;1.2619
2006.06.21 08:18:32;1.2621

8 комментариев  Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый комментарий

полагаю в логировании тиков нужно ставить запятую "," а не "пробел" и ";" по идее должно получиться не так как у вас

а так


23.05.2011 19:55 ruslanchik

спасибо!

07.09.2009 21:15 DKlim
В новой версии (03.01.2008) добавлено отключение записи информации о разрывах связи и остановке эксперта, и добавлены Год и Месяц в имя файла.
05.01.2008 17:54 komposter
Chen писал(а):
Что собственно и сделал во втором варианте (убежав от необходимости разбираться в сравнениях вещественных чисел - я все таки не профи-кодер) и обратился к Вам за консультацией.
Да я, собственно, тоже не профи.
Просто знаю, что лучше сравнивать даблы с допуском.
29.12.2007 23:37 komposter
komposter писал(а):
...Почитайте про ...

Спасибо за наколку. Изучу более пристально. Я уже пересекался с этой инфой и была задняя мысль, что не случайно у Вас код усложнен, но наткнулся на явное от разработчиков (я ссылался на Операции отношения):

Два ненормализованных числа с плавающей точкой нельзя связывать операциями == или !=. Следует из одного числа вычесть другое и нормализованный результат сравнить с нулем.

Что собственно и сделал во втором варианте (убежав от необходимости разбираться в сравнениях вещественных чисел - я все таки не профи-кодер) и обратился к Вам за консультацией.
29.12.2007 13:32 Chen
Chen писал(а):
1. Можно ли эту конструкцию заменить следующей (я ориентировался на Операции отношения):
if (NormalizeDouble(MathAbs (dBID_Current - dBID_Prev), curDigits) < 0.00000001 ) { continue; }
Да, так можно.

Chen писал(а):

или следующей:

 if (NormalizeDouble((dBID_Current - dBID_Prev), curDigits) == 0) { continue; }
Нет, так нельзя. Почитайте про сравнение вещественных чисел, например - Вопрос к мастерам MQL4. Опять про Double Compare.

Chen писал(а):

2. Я правильно понял, что если котировка не изменилась, то ее записи в файл не происходит?

Да, именно так.
29.12.2007 01:59 komposter

Здравствуйте, Андрей.

Подскажите, плз:

if (  NormalizeDouble( dBID_Current - dBID_Prev, curDigits ) < 0.00000001 && 
      NormalizeDouble( dBID_Prev - dBID_Current, curDigits ) < 0.00000001 ) { continue; }

1. Можно ли эту конструкцию заменить следующей (я ориентировался на Операции отношения):

if (NormalizeDouble(MathAbs (dBID_Current - dBID_Prev), curDigits) < 0.00000001 ) { continue; }

или следующей:

 if (NormalizeDouble((dBID_Current - dBID_Prev), curDigits) == 0) { continue; }

2. Я правильно понял, что если котировка не изменилась, то ее записи в файл не происходит?

28.12.2007 17:23 Chen
Спасибо
12.10.2006 05:04 Prival