Първоначално публикувано от
Mateev
По принцип най-лесния метод за отработка на търговски операции не в един, а в много на брой тикове с подбор на най-добрия тик, се състои именно в идеята, която вече написах. Имаме желано състояние (желан от стратегията брой лотове) и реално състояние (реален брой лотове). Желания брой лотове непрекъснато може да се променя нагоре или надолу, тъй като той представлява сума от желанията на много стратегии. Търговския алгоритъм така ще манипулира реалния брой лотове, щото той с минимални закъснение да догонва желания брой. Няма обаче да се втеляваме всичко да става в един единствен тик. Ще има закъснение и изчакване на тик с по-нисък спред.
На пръв поглед това забавяне губи точноста на отработването на сделките на всяка една стратегия, но това не е опасно в статистически план. Да, някои единични сделки ще станат по-губещи или по-печеливши, но в статистически план крайния резултат на ефекта от закъснението ще е нулев, или по-скоро дори положителен, защото подбираме тикове с нисък спред.
Ако приемем, че например имаме стратегия със сделки със средна продължителност от 24 часа, и ПМО-то на стратегията е 24 пипа, то тогава ние имаме средностатистически ръст от 1 пип на час. Е как тогава едно закъснение от 20-30 секунди или дори 5 минути може да повлияе на крайния статистически резултат?
Това мое разсъждение е изтествано на практика още преди 15 години. Тогава Иво Сеизов караше дилърите да покриват големите сделки буквално на секундата, а аз твърдях, че няма смисъл толкова да бързаме. И за да разрешим спора, накарахме дилърите да записват цената на сделката на клиента и цената, на която те са успели да я покрият със закъснение, стигащо до 1 минута, че и повече. И след около 100 сделки се оказа, че средностатистическата разлика е по-малка от 1 пип, въпреки че при някои единични сделки имаше разлика от по 20-30 пипа.
В заключение:
Аз твърдя и съм дълбоко убеден, че известно закъснение при отваряне или затваряне на сделките няма да промени средностатистическия резултат от търговията, но за сметка на това може да ни даде редица екстри и най-вече облегчения при написването на кода на търговската логика. Като цяло кода ще стане по-прост, по-разбираем и по-лесен за дебъгване. Неговата логика ще е елементарна - прави се опит за търговска операция и се приключва, независимо дали операцията е успешна или не. Следващия опит ще е не на следващия тик, а например след 50 милисекунди. Въобще нашите роботи няма да работят на OnTick(), а на OnTimer() с период 50 ms.