Експерт за логване на тикове в МТ4

Forex пазарите от гледна точка на Теорията на вероятностите

Модератор: Mateev

Mateev
Мнения: 344
Регистриран: 02 окт 2017, 10:04
56 получени
44 дадени

Експерт за логване на тикове в МТ4

Мнение от Mateev » 23 юни 2018, 20:58

Реших да публикувам кода на един мой експерт за логване на тикове в МетаТрадер 4. Експерта може едновременно да логва тиковете на всички финансови инструменти, които предлага даден брокер. Пробвал съм го на брокери с по 400 финансови инструмента, и експерта логва всички тикове без проблеми (по над 1000 в секунда).

Всъщност експерта съм го направил да логва само тези символи, които потребителя е показал в прозореца Market Watch на MetaTrader 4. В реално време могат да се добавят или да се премахват символи, и експерта веднага се адаптира към новата ситуация, започвайки да логва новите символи или спирайки да логва премахнатите символи.

На екрана на графиката се визуализира списък от символите, които се логват, както и кратка информация за всеки един символ, състояща се от:
1. Името на символа
2. Броя на логнатите до момента тикове по този финансов инструмент
3. Цените от последния тик - Bid, Ask, а ако потребителя пожелае - и Last, както и Volume

Допълнително на екрана може да се визуализира и статистика за работата на програмата, ако се превключи в DEBUG режим. Тогава се появява и статистика на времето за изпълнение на различните операции в микросекунди.

Изображение
Прикачени файлове
RsmTickLogger.ex4
(40.63 KБ) Свален 8 пъти

Mateev
Мнения: 344
Регистриран: 02 окт 2017, 10:04
56 получени
44 дадени

Re: Експерт за логване на тикове в МТ4

Мнение от Mateev » 23 юни 2018, 21:07

Тиковете се логват в csv файлове, като всеки час се създава нов файл. Самите файлове се подреждат е директорийна структура (дърво) във следния формат:
MT4_Data_Folder\MQL4\Files\RSM\Ticks\CSV\!ALL\YYYY\MM\DD\HH.csv

Вътре в самия файл се записва следната информация:
1. Време във формат MM:SS.msc (минута, секунда и милисекунди)
2. Име на символа
3. Bid цена
4. Аск цена
и пожелание на потребителя:
5. Last цена
6. Volume на сделката по Last цената

Mateev
Мнения: 344
Регистриран: 02 окт 2017, 10:04
56 получени
44 дадени

Re: Експерт за логване на тикове в МТ4

Мнение от Mateev » 23 юни 2018, 21:33

Кода на експерта се състои от 9 файла - една главна програма и 8 Include файла, които съдържат различни класове и/или структури. Всичките файлове съм ги направил да се търсят в основната директория, в която е пуснат и експерта, така че да няма никакви проблеми с компилирането.

Файловете на експерта са следните:
1. RsmTickLogger.mq4 - главна програма на експерта
2. ClassSymbolTick.mqh - обвивка на MqlTick + допълнителни параметри, създаващи двойка key-value (symbol - parameters)
3. ClassSymbolTicksArray.mqh - сортиран динамичен масив от обектите по т.2, представляващ списък от всички символи за логване и данни за последния техен тик
4. ClassTimer.mqh - Измерва времето между две събития (Start и Stop на таймера) в микросекунди и натрупва статистика при многократно преминаване на програмата през тези събития.
5. ClassTimers.mqh - масив от таймери по т.4 + допълнителна функционалност за визуализация на статистиките върху графиката
6. StructSystemTime.mqh - структура с функционалност за четене и поддръжка на времето с точност до 1 милисекунда
7. RsmStdLibErr.mqh - стандартен клас на MQL4 библиотеката, побългарен и модифициран от мене за лични цели
8. RsmObject.mqh - стандартен клас на MQL4 библиотеката, побългарен и модифициран от мене за лични цели
9. RsmArray.mqh - стандартен клас на MQL4 библиотеката, побългарен и модифициран от мене за лични цели
Прикачени файлове
RsmTickLogger v1.10.rar
Пълен комплект от файловете на експерта
(65.32 KБ) Свален 8 пъти

Потребителски аватар
me4a_kryv
Мнения: 420
Регистриран: 02 авг 2010, 16:41
5 получени
4 дадени

Re: Експерт за логване на тикове в МТ4

Мнение от me4a_kryv » 23 юни 2018, 21:53

Гн.Матеев как върви копането има ли файда или няма смисъл да си накопувам копачки ...заглеждах се по един АСИК дет копае едериум със 180 MH/s (цената малко дебела ама ...) смятах зимата да се отдам на крипто трейдинг и копане но в момента съм на процес учене и опипване на почвата ...така де здрава ли е или пълно блато.
Когато разумът се намеси интуицията отлита.

Mateev
Мнения: 344
Регистриран: 02 окт 2017, 10:04
56 получени
44 дадени

Re: Експерт за логване на тикове в МТ4

Мнение от Mateev » 23 юни 2018, 21:59

Инструкция за стартиране и използване на експерта за потребители, които не са програмисти

1. Изтеглете си файла RsmTickLogger.ex4 от първия постинг в тази тема. В момента експерта е версия 1.10, но ако за в бъдеще направя по-нови версии, ще ги пускам пак на този линк от първия постинг.
2. От менюто на MetaTrader 4 изберете File / Open Data Folder
3. В отворилия се прозорец на експлорера изберете MQL4 / Experts
4. Пуснете файла RsmTickLogger.ex4 в тази папка
5. Върнете се в MetaTrader 4 и отворете графиката на произволен символ. Хубаво е да е такъв, по който пристигат много тикове, но експерта спокойно ще работи по който и да е друг символ.
6. В един MetaTrader пуснете само един експерт. Не пускайте повече, защото ще настане конфликт в управлението на файловете.
7. В MetaTrader изберете Tools / Options / Expert Advisors и след това разрешете Allow DLL imports. С това ще разрешите на експерта да чете от Windows-а времето с милисекунди в него, за да може логването на тиковете да е прецизно по време..
8. Стартирайте експерта
9. В отворилия се прозорец превключете на таба Inputs. В него ще видите параметрите по подразбиране. Ако някой от тях не ви хареса, променете го.
10. Натиснете ОК и експерта ще тръгне.
11. Не е желателно при работещ експерт да превключвате различните TimeFrame-та. Това няма да обърка логиката на експерта, но самия процес на превключване отнема контрола от него за около 1 секунда, и през това време можете да загубите някой тик.
12. Експерта можете спокойно да си го оставите да работи денонощно, и през това време безпроблемно да си работите с MetaTrader-a по други графики. Работата на експерта ще натоварва само едно единствено ядро от процесора на 10 до 50% в зависимост от това колко символи сте включили да се логват.

Mateev
Мнения: 344
Регистриран: 02 окт 2017, 10:04
56 получени
44 дадени

Re: Експерт за логване на тикове в МТ4

Мнение от Mateev » 23 юни 2018, 22:30

Разяснения за работата на експерта за програмисти, които могат сами да си го модифицират и компилират

Структурата на експерта представлява един динамичен масив, в който се съхраняват последните тикове по всеки един финансов инструмент, който сме решили да го логваме. Символите в този масив отговарят на символите в прозореца Market Watch на MetaTrader-а. Ако добавите или премахнете символи в Market Watch, експерта ще го детектира това и ще се адаптира към новата ситуация (към новите символи).

Самия процес по откриването на нови тикове се извършва посредством периодично пресканиране на всички символи, и след това сравняване на техните тикове с тиковете, които се съхраняват в динамичния масив. И ако някъде се открие някаква разлика, то това означава, че по дадения символ е пристигнал нов тик. Този тик се записва на диска в csv файл и сканирането продължава.

Един пълен цикъл на сканиране включва всички символи в динамичния масив, и се извършва на един път. След това се изчаква малко време (5 милисекунди по подразбиране) и се прави ново пресканиране. Така за 1 секунда се извършват около 200 пресканирания, но ако потребителя реши, може да им увеличи бройката до 1000, като направи времето на изчакване само 1 милисекунда.

Въпреки че е възможно, не е желателно времето за изчакване между 2 цикъла да се сваля до нула милисекунди, защото при много символи това ще блокира работата на тази нишка и ще направи невъзможно да се променят настройките на експерта в реално време.

По отношение на записа - всички тикове се записват в един единствен файл по реда на тяхното пристигане. Файла се държи отворен и заключен за запис през цялото време, но в режим Read Only може да се отваря с външни програми и да се разглежда. При настъпването на нов час се отваря нов файл. При настъпването на нов ден се отваря нова директория с нов файл в нея. Същото се прави и при настъпването на нов месец или нова година. Така се получава едно директорийно дърво, развито по години, месеци и дни с едночасови файлове във всеки ден.

Вътре във файловете за всеки един нов тик се отваря нов ред. Времето на този тик се записва само като минути, секунди и милисекунди. Критерий за намирането и записването на нов тик е наличието на някаква разлика с предишния тик. Разликата може да е само в Bid или само в Ask или в Last, във Volume или в Time или в някаква комбинация от изброеното. Дублирани (напълно еднакви) тикове не се записват на диска, но се записват тикове с еднакви цени и различен таймщамп.

Потребителски аватар
alphaomega
Мнения: 155
Регистриран: 12 апр 2011, 22:09
7 получени
5 дадени

Re: Експерт за логване на тикове в МТ4

Мнение от alphaomega » 24 юни 2018, 18:38

Това логване на тиковете има смисъл само експерта стои включен 24/7/365 иначе ще има гапове. Това означава че трябва една работна станция да стои включена постоянно а това си е поне 150 лева на година :smile: (без амортизацията)

Не е ли по лесно да оставим някой друг да върши тази работа и ние просто да си теглим тиковата история без пари? Например от Дюкас или някой друг брокер?
Освен разбира се ако нямаме намерение да продаваме тази тикова история. Тогава усилията и разходите са оправдани.

Mateev
Мнения: 344
Регистриран: 02 окт 2017, 10:04
56 получени
44 дадени

Re: Експерт за логване на тикове в МТ4

Мнение от Mateev » 24 юни 2018, 22:11

Няма откъде да си изтеглиш качествена тикова история, и това е така именно защото очакваш да я намериш без пари. Собственото логване създава още един източник на тикове, в който също ще има дупки както навсякъде другаде, но с който би могъл да попълниш чуждите дупки. Също така би могъл да разгледаш на графика някои специални моменти от графиката на твоя брокер, като например поведението на цените му по време на скок.

И не на последно място - вече имаш информация за статистически анализ и търсене на микрозависимости в тик генератора на твоя собствен брокер. Знам от личен опит, че когато програмисти пишат код за генератора на котировки на някой брокер, те често поради незнание слагат разни Moving Average с цел да намалят вероятноста от игли. Това обаче вкарва микрозависимости и леки закъснения в потока от котировки, и това може да се детектира и използва за извличане на ПМО на микро ниво. От това ПМО не може да се спечели, но може да се намали влиянието на спреда върху една стратегуия от по-високо ниво, като се прецизират нейните входове и изходи съгласно ПМО-то от микро-ниво.

Mateev
Мнения: 344
Регистриран: 02 окт 2017, 10:04
56 получени
44 дадени

Re: Експерт за логване на тикове в МТ4

Мнение от Mateev » 24 юни 2018, 22:18

Иначе логването на тикове по няколко различни канала е само една малка част от задачата за сдобиване с качествена тикова история на даден финансов инструмент. Следващата задача е да се обединят много на брой потоци от тикове и от тях посредством статистическа обработка да се изгенерира такъв поток, в който да няма никакви дупки, прекъсвания, игли и т.н. Това няма откъде да го намериш - трябва да си го направиш сам.

И още нещо - някакви тикове могат да се намерят за някои финансови инструменти, но обикновено говорим само за 10-20 от най-масовите валутни двойки. Няма обаче откъде да намериш тикова история за хилядите други финансови инструменти, и единствения начин е да си я логнеш сам.

Потребителски аватар
alphaomega
Мнения: 155
Регистриран: 12 апр 2011, 22:09
7 получени
5 дадени

Re: Експерт за логване на тикове в МТ4

Мнение от alphaomega » 24 юни 2018, 22:33

Да качествена история не се намира лесно. Но може да се закупи. (Отново със съмнително качество)

А при условието при което решаваш да логваш цялата история, най добре би било да си нагласиш една яка работна станция със големи SSD-та която да се ползва само за това.
И едновременно да логваш тиковете на всички големи брокери. Дето се казва..."като ще е гарга да е рошава'. :grin:
Така поне усилията няма да са напразни и ще имаш една солидна база във която може да се търсят всякакви зависимости включително и възможности за арбитраж между различните брокери. Тази тикова история после след години можеш и да я продадеш на други играчи които се занимават със разработване на стратегии или изследване на пазарите.

Mateev
Мнения: 344
Регистриран: 02 окт 2017, 10:04
56 получени
44 дадени

Re: Експерт за логване на тикове в МТ4

Мнение от Mateev » 25 юни 2018, 03:21

Аз от дълги години логвам тиковете на десетки брокери по стотици финансови инструменти. Това съм го започнал още по времето на брокера STS FInance (преди повече от 15 години). Още тогава писах една програма за сървъра на STS Finance, която получаваше колосално количество котировки от къде ли не и в реално време генерираше тикове за сървъра на брокера без дупки и без игли. Та между другото тази програма записваше и логове на всеки един символ по всеки един брокер.

От тогава през годините тази програма се е развивала и усъвършенствала, и винаги поне 2-3 нейни копия са работили на 2-3 различни сървъра именно с цел събиране на котировки. Така че имам не знам колко терабайта логнати котировки, и наистина живея с тайната мисъл някога да започна да ги обработвам с цел изчистване и след това да ги продавам.

Колкото до логването от самия MetaTrader - това е защото за нуждите на експертите непрекъснато се сблъсквам с един огромен проблем. Когато генерирам рекурсивни сегменти или зигзаци от едноминутни барове се допускат груби грешки, защото не знам кое от двете е дошло по-напред - High или Low. В момента избирам за първо това, което е по-близо до Open, но сам разбираш, че за част от баровете няма да е вярно, и така мога да получа зигзаци, които не отговарят на действителноста. Затова и написах логера на тикове - за да го ползват експертите ми, и където имам логната история, вече получавам верни зигзаци. А цялата ми останала развойна дейност зависи от тези зигзаци. Десетки класове се базират на тях и целия ми ресърч се върти около тях, така че не мога да си позволя компромиси в това отношение.

Mateev
Мнения: 344
Регистриран: 02 окт 2017, 10:04
56 получени
44 дадени

Re: Експерт за логване на тикове в МТ4

Мнение от Mateev » 26 юни 2018, 12:24

Вече 2 денонощия експерта работи без да съм го спирал, и няма никакви проблеми. Пуснал съм го да логва тиковете на реален акаунт в InstaForex-Europe.com. Логват се 402 различни символа, като броя на логнатите тикове за 1 час е между 50 000 и 400 000 в зависимост от часа. Най-много тикове има в часовете 13,14 и 15 по UTC време.

Файловете стават с дължина между 1 и 12 MB, като директорията съм я обявил за компресирана, така че на диска заемат средно 2 пъти по-малко масто. За едно денонощие се натрупват средно по 100MB файлове с котировки, което означава, че 1TB диск ще събере около 10 000 дена (30 години). Тоест не би трябвало да има проблеми, дори и ако на 1 диск логваме 20-30 различни брокера с по 400-500 символа на всеки един от тях.

Терминала натоварва интернет връзката средно със 2-3 kB/s (16-24 kb/s). Тоест и тука няма да има проблеми, ако решим да логваме 20-30 брокера. Процесора се натоварва средно на 13%. Тъй като той е Intel Core i7 с 8 логически ядра, то това означава, че логера натоварва едно от ядрата на 100%.

Други статистики:
1. Средно време на запис на 1 котировка на диска - 16 микросекунди (диска е SSD).
2. Средно време за пресканиране на всичките 400 символа - 325 микросекунди. Тоест отнема по по-малко от 1 микросекунда на символ.
3. Брой пресканирания на всички символи за 1 секунда - 500 пресканирания през 2 милисекунди.
4. Процент от времето на нишката, през което работи логера - 16%. През останалите 84% от времето MetaTrader-a прави нещо друго.

Като цяло може да се каже, че логера отнема учудващо малко ресурси от компютъра, предвид факта, че развърта по 200 000 цикъла в секунда.

Mateev
Мнения: 344
Регистриран: 02 окт 2017, 10:04
56 получени
44 дадени

Re: Експерт за логване на тикове в МТ4

Мнение от Mateev » 26 юни 2018, 13:07

Още една информация:
На рутера наблюдавах връзката на MetaTrader-a със сървъра, и установих, че комуникацията между тях се извършва сравнително рядко. Прехвърлят се средно по 10-12 пакета в секунда. Най-ниското, което видях за няколко минути следене, е 7 пакета в секунда, а най-високото - 20 пакета в секунда.

От тука можем да си направим извода, че сървъра изпраща котировките на групи, или 100-200 тика в секунда пристигат средно в 10 групи с по 10-20 тика във всяка една от тях. Следователно логването на тикове с точност от 1 милисекунда е излишен лукс. Достатъчна е и 1/10 от секундата.

Другият извод, който можем да си направим, е че няма смисъл да се развъртат по 500-1000 сканирания всяка една секунда. Достатъчни са и 50 сканирания в секунда, и пак ще имаме гаранция, че няма да пропуснем нито един тик. Затова аз препоръчвам времето за изчакване между два цикъла да се вдигне на 10 или дори на 20 милисекунди, а в следващата версия ще увелича и настройката по Default.

Отговори

Върни се в “Mateev”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 1 гост