Понадобилась функция закрытия ордера встречным. Как бы раньше особо экономией на спредах не заморачивался, а щас пришлось.
Вот что сваял:
Первый недостаток который сразу понимаю - излишний перебор, так как при нахождении встречного начинаю все ордера перебирать заново, хотя можно было продолжить дальше до конца. Но у меня не миллионы ордеров поэтому этой потерей скорости могу пренебречь.
Ещё какие то недостатки есть ? И кто как закрывает встречными ? может кто то использует более оптимальный или изящный алгоритм ?
Мне вот это не нравится, выделил жирным. А если встретится отложенник?
if (tkt1!=0 && tkt2!=0 && tkt1!=tkt2 && smb1==smb2 && type1!=type2)
Я делал по другому, правда, для других целей, но и тут сгодится. Один раз пройтись по всем ордерам, данные по каждому ордеру писать в структуру, там нужно немного: тикет, прибыль (посчитанная со свопами и комиссией). Эти данные писать в два массива, на бай и на селл.
Потом массивы отсортировать по величине прибыли, так будет выгоднее закрывать.
Честно говоря, не мерял время выполнения ордерных функций, но такой подход явно будет быстрее и гибче.
Мне вот это не нравится, выделил жирным. А если встретится отложенник?
Создать структуру тоже можно и потом закрыть всё по ней, но на глаз мне показалось что разница в скорости не такая большая чтобы создавать структуру, а код вырастет значительно., а соотвественно и баги.
Alexey Volchanskiy:
Честно говоря, не мерял время выполнения ордерных функций, но такой подход явно будет быстрее и гибче.
Понадобилась функция закрытия ордера встречным. Как бы раньше особо экономией на спредах не заморачивался, а щас пришлось.
Вот что сваял:
Первый недостаток который сразу понимаю - излишний перебор, так как при нахождении встречного начинаю все ордера перебирать заново, хотя можно было продолжить дальше до конца. Но у меня не миллионы ордеров поэтому этой потерей скорости могу пренебречь.
Ещё какие то недостатки есть ? И кто как закрывает встречными ? может кто то использует более оптимальный или изящный алгоритм ?
Конечно будет быстрей, ведь контрагента не надо искать. А что касается спреда, так я очень сомневаюсь в экономии.
У вас не анализируется объем встречных. Логичнее сначала закрывать пары с одинаковыми объемами, чтобы не плодить "остатки", потом из оставшихся пары с максимальными объемами, чтобы остатки были минимальны.
И я об этом, но пдля этого удобнее и быстрее заранее считать данные по всем ордерам и потом их анализировать. И никакого раздутия кода тут не будет, 5-6 дополнительных строчек максимум.
Конечно будет быстрей, ведь контрагента не надо искать. А что касается спреда, так я очень сомневаюсь в экономии.
я тоже раньше сомневался, особенно когда вся торговля идёт в долгосрок, там не то что спред, там даже новости не волнуют, и вообще всё что твориться внутри дня это мелочь не заслуживала внимания :)
Но сейчас потребовался внутридневной робот, который к тому же очень активно торгует и на спредах получается хорошая экономия.
У вас не анализируется объем встречных. Логичнее сначала закрывать пары с одинаковыми объемами, чтобы не плодить "остатки", потом из оставшихся пары с максимальными объемами, чтобы остатки были минимальны.
Как изменю функцию так выложу новый вариант.
В случае с остатками структуры надо будет перезаполнять, т.к в результате закрытия пары будет появляться новый ордер. В МТ4 он будет иметь новый тикет, в МТ5 тикет не меняется.
Вот этого еще не знал, надо проверить
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Понадобилась функция закрытия ордера встречным. Как бы раньше особо экономией на спредах не заморачивался, а щас пришлось.
Вот что сваял:
Первый недостаток который сразу понимаю - излишний перебор, так как при нахождении встречного начинаю все ордера перебирать заново, хотя можно было продолжить дальше до конца. Но у меня не миллионы ордеров поэтому этой потерей скорости могу пренебречь.
Ещё какие то недостатки есть ? И кто как закрывает встречными ? может кто то использует более оптимальный или изящный алгоритм ?