Советники: Ask Bid Ticks

 

Ask Bid Ticks:

"AskBidTicks" - высокоточный инструмент для анализа микроструктуры рынков в реальном времени.

Он экспортирует тиковые цены в CSV-файл. Имя файла, разделители и временные метки настраиваются. Советник работает с локальным временем компьютера, что позволяет отследить точное время прихода каждого тика.

Ниже приведен пример csv-файла с метками времени с точностью до миллисекунд:

output

Автор: Erdem Sen

 
Automated-Trading:

Тики Ask Bid:

Автор: Erdem Sen

Интересно, как вы можете использовать это в бэктестинге? Есть идеи?
 
Здравствуйте, вы можете эквивалент в баре M5 M15 H1 H4
 
vanvolxem:
Здравствуйте, можете ли вы эквивалент в баре M5 M15 H1 H4
Извините, я не могу понять, не могли бы вы уточнить.
 

Здравствуйте,

Время Символ OPEM CLOSE PH PB

2013.01.04 04:55 EURGBP 0.81065 0.81078 0.81086 0.81065 172

2013.01.04 05:00 EURGBP 0.81079 0.81046 0.81080 0.81044 90

2013.01.04 05:05 EURGBP 0.81047 0.81044 0.81056 0.81044 89

2013.01.04 05:10 EURGBP 0.81043 0.81059 0.81059 0.81033 111

2013.01.04 05:15 EURGBP 0.81057 0.81052 0.81059 0.81048 78

2013.01.04 05:20 EURGBP 0.81051 0.81065 0.81071 0.81050 124

2013.01.04 05:25 EURGBP 0.81067 0.81066 0.81070 0.81060 243

2013.01.04 05:30 EURGBP 0.81067 0.81076 0.81080 0.81063 108


 
vanvolxem:

Здравствуйте,

Время Символ OPEM CLOSE PH PB

2013.01.04 04:55 EURGBP 0.81065 0.81078 0.81086 0.81065 172

2013.01.04 05:00 EURGBP 0.81079 0.81046 0.81080 0.81044 90



Лучший способ получить периодические данные (по моему мнению) - это использовать историю MT4, вы можете скачать и экспортировать (в excel) исторические данные. но если вы хотите переделать этот код для периодических данных, я думаю, это вам подойдет:

//+------------------------------------------------------------------+
//|PeriodicRealTimeDataStream.mq5 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

datetime t1;
double   arro[1],arrh[1],arrl[1],arrc[1];
string   T,O,H,L,C;
long     arrv[1],V;

//+------------------------------------------------------------------+
void OnTick()
  {  

   t1 = (datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE);
   static datetime  t0 = t1;
//--- получите значения для указанного графика 
   if (t0!=t1)
      {  
         //--- копирование значений в массивы
         CopyOpen(_Symbol,_Period,0,1,arro);
         CopyHigh(_Symbol,_Period,0,1,arrh);
         CopyLow(_Symbol,_Period,0,1,arrl);
         CopyClose(_Symbol,_Period,0,1,arrc);
         CopyTickVolume(_Symbol,_Period,0,1,arrv);
         //--
         T=TimeToString(t1,TIME_DATE|TIME_MINUTES);
         O=DoubleToString(arro[0],_Digits);
         H=DoubleToString(arrh[0],_Digits);
         L=DoubleToString(arrl[0],_Digits);
         C=DoubleToString(arrc[0],_Digits);
         V=arrv[0];
         //--- выведите значения
         printf("%s  %s  %s  %s  %s  %s  %d",T,_Symbol,O,H,L,C,V);
         //--- установите время снова
         t0=t1;     
      }
//---
  }
//+------------------------------------------------------------------+

если вы хотите экспортировать данные в csv, вы можете использовать функции и переменные файла, как в основном коде

 
А как насчет тиков, которые вы пропускаете? Добавляете ли вы что-нибудь в TXT-файл для них? Если нет, то вы не "... сохраняете все тиковые данные о ценах спроса и предложения в txt-файл".
 
RaptorUK:
А как насчет тиков, которые вы пропускаете? Вы добавляете что-нибудь в TXT-файл для них? Если нет, то вы не "... сохраняете все тиковые данные о ценах спроса и предложения в txt-файл" .

Вы правы, есть вероятность пропустить котировки из-за способа обработки события NewTick, но код достаточно быстрый, чтобы сделать эту возможность очень маленькой (почти нулевой). если пропущенных тиков больше, чем я думал (что может повлиять на значимость анализа), то это ошибка Ontick(), а не моего кода.

а насчет фразы "... сохраняет все тиковые данные цены спроса и предложения в txt-файл.", я давно это понял и изменил :) теперь там нет "всех", но на форуме все осталось по-прежнему - извините, у меня нет возможности это изменить, я люблю редактировать комментарии, но для этой фразы это невозможно :(

 
erdogenes:

Вы правы, есть вероятность пропустить котировки из-за способа обработки события NewTick, но код достаточно быстрый, чтобы сделать эту вероятность очень маленькой (почти нулевой). если пропущенных тиков больше, чем я думал (что может повлиять на значимость анализа), то это ошибка Ontick(), а не моего кода.

а насчет фразы "...сохраняет все тиковые данные цены спроса и предложения в txt-файл.", я давно это понял и изменил :) теперь там нет "всех", но на форуме все осталось по-прежнему - извините, у меня нет возможности это изменить, я люблю редактировать комментарии, но для этой фразы это невозможно :(

Это не баг, это просто так работает... если OnTick() выполняется в момент прихода нового тика, то новый тик игнорируется...

NewTick

СобытиеNewTick генерируется при появлении новых котировок, оно обрабатывается OnTick() подключенных советников. В случае если при поступлении новой котировки функция OnTick для предыдущей котировки обрабатывается, то новая котировка будет проигнорирована экспертом, так как соответствующее событие не будет занесено в очередь.

Все новые котировки, полученные во время работы программы, будут игнорироваться до завершения работы функции OnTick(). После этого функция будет запускаться только после получения новой котировки.

... Вы проверяли, сколько тиков вы обычно пропускаете?

 
RaptorUK:

Это не ошибка, это просто то, как это работает ... если OnTick() выполняется, когда новый тик прибывает, новый тик игнорируется ...

Я запутался, то есть вы считаете, что это способ обработки новых тиков, и я тоже:)

erdogenes:

Вы правы, есть вероятность пропустить кавычки из-за способа обработки события NewTick

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

RaptorUK:

. ... Вы тестировали, чтобы увидеть, сколько тиков вы обычно пропускаете?

Я не знаю о пропущенных тиках, я получаю то, что получает программа, как я могу рассчитать это? или можно ли это как-то рассчитать?, я не могу знать, сколько тиков пропускает Ontick за день (я не разрабатываю mql5). Я не могу говорить за MetaQuotes. У меня нет прямого доступа к торговому серверу, чтобы сравнить фиды. Я не могу рассчитать это для программы, это не будет изменено, когда программа будет моей, я могу говорить только статистически.

Для вас я отредактировал пример с обработкой данных HF. Я получаю скорость прихода тиков за одну миллисекунду с межбанковскими ставками 27.01.2011 - программа для расчета - Gretl, коды вы можете использовать, а данные отправлены в PM (я не могу поделиться этими данными публично, извините). Результат ~0.003 (это скорость прихода за одну миллисекунду и это был активный день).

Предположим, что данные обрабатываются в MT5 и (абсурдно), что все они (~0.003) отсутствуют. Итак, теряет ли сигнал, который случайным образом ресамплится с частотой ~0.003, какую-либо значимость? Мой ответ - нет. Мы используем ресамплинг с более высокой частотой уже в анализе.

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

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

(Я отредактировал комментарий: Я исправил код, который я отправил вам, он был с ошибкой, реальный результат ~0.003 код прилагается)

Файлы:
codes.zip  1 kb
 
erdogenes:

Я запутался, то есть вы считаете, что это способ обработки новых тиков, и я тоже:)

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

Я не знаю о пропущенных тиках, я получаю то, что получает программа, как я могу это вычислить? или это можно как-то вычислить?, я не могу знать, сколько тиков пропускает Ontick за день (я не разрабатываю mql5).

Да, вы можете ... вы можете считать тики, как вы видите их для текущего бара и проверить значение тикового объема для текущего бара, если ваш счет и тиковый объем не совпадают, значит вы пропустили один или несколько тиков ....