Първоначално написано от
Mateev
И последно и няма повече да пиша по въпроса за логера:
Другата важна задача на логера, освен да логва тикове и да следи за промяна на тикети, е да натрупва статистическа информация за важни за трейдера цифрови редици. Например за средния спред на даден финансов инструмент или за средните РЕАЛНИ разходи за брокера при сключване на сделка - спред, слипидж и т.н.
Това допълнително изискване не е чак толкова страшно, ако човек има готов статистически клас. Аз имам такъв и дори доколкото си спомням съм публикувал неговия сорс код. Наличието на такъв клас позволява за секунди обект от него да се добави да следи и натрупва каквато си поискаме статистическа информация за който си поискаме параметър от нашия експерт. В случая с логера е добре да се следи, натрупва и записва статистическа информация за следното:
1. Спред по финансови инструменти, дни от седмицата и часове от денонощието
2. Микрогапове по финансови инструменти, дни от седмицата и часове от денонощието
3. Време за реакция на брокера по дни от седмицата и часове от денонощието (колко бави изпълнението на търговските операции)
4. Разходи за брокера по инструмент, дни от седмицата и часове от денонощието (спред + суап + слипидж + комисионни + дребни хватки)
Както сами виждате ще има няколко стотин обекта на нашия статистически клас, от които в реално време ще извличаме и ще показваме на екрана най-важните за нас статистики. Например Min, Max и Average Spread, Average разходи за брокера, Min, Max и Average време за реакция на брокера и т.н. Ако толкова ни е мерак, можем и да записваме стойностите на тези статистики на диск (класа го може), за да може следващия път да не започваме статистиката от нула, а да ползваме вече натрупаната стара такава.
Тука му е мястото да ви кажа и за един софтуерен трик, за който може и да не сте се досетили. Един експерт работи в 2 нишки. Едната нишка е тази, която ни се предоставя на нас за да пишем кода си в събитията OnTick и OnTimer. В тази нишка ние 1000 пъти в секундата ще проверяваме за нови тикове или за нови промени по тикетите - исторически или активни. В тази нишка обаче не е редно да извършваме дискови операции за запис/четене, защото това може да доведе до голямо забавяне и до пропускане на една или повече милисекунди от логването.
Хитроста се състои в това за дискови операции да използваме друга нишка, която да върви паралелно с нашата и операциите по нея да не забавят логването в милисекундната нишка. По принцип МТ не ни предоставя възможност да създаваме други нишки, или поне доскоро беше така, но ние можем да се изхитрим да ползваме нишка, която вече съществува. Това е нишката на основната графика, която се визуализира на дисплея. В тази нишка се изпълняват само операциите по дисплейване и операциите по изчисляване на индикаторите, тъй като те са част от дисплейващия процес. Ако обаче ние прехвърлим файловите си операции в индикатор, то тогава ние ще сме се сдобили с втора нишка, работеща паралелно с нашата милисекундна нишка. Да, понякога файловите операции могат да предизвикат временно притрепване или дори замръзване на дисплейващата част, но нова няма да попречи на работата на милисекундната ни нишка.
Това е само идея, която все още не съм я пробвал, но има всички шансове за успех.