Форум » Алгоритмы » Обработка котировок » Ответить

Обработка котировок

FMM_1970: Здравствуйте, форумчане! Сталкивался ли кто-нибудь с решением такой задачи, когда требуется предварительная проверка на присутствие котировок по валютным парам перед открытием или закрытием сделок в условиях мультивалютного трейдинга? Дело в том, что если цен нет, то от сервера придет сообщение с ошибкой 136 об отсутствии котировок. Одно из решений, которое мне известно, это проверка по условию (как пример): if (iVolume("EURUSD",0,0>1 || iVolume("GBPUSD",0,0>1)) return(0); //ничего не делаем. else { OrderSend("EURUSD",OP_BUY......); OrderSend("GBPUSD",OP_SELL......); } Знает ли кто какое-нибудь другое решение?

Ответов - 3

SK: Смотря что "ничего не делаем" и вообще смотря по тому, что, собственно, нужно. Такое впечатление, что здесь и зарыта собака. Вот, например, что Вы понимаете под выражением "присутствие котировок"?

FMM_1970: Здесь имеется ввиду, что сама по себе валютная пара существует и по ней можно вести торговлю. Но по причинам низкой ликвидности в какой-то определенный момент времени цен от брокера может не быть. Поэтому если отправить запрос на открытие позиции или закрытие позиции, если она существует, используя цены Bid или Ask, в зависимости, что нужно, то можно нарваться на ответ от торгового сервера, что цен нет. Такое явление присутствует на экзотических валютных парах типа HKDJPY, EURTRY и т.д. Осутствие цен при этом может существовать, по моему опыту, аж до 2х часов. Поэтому, чтобы советник не отсылал зря команды на сервер или когда, например нужно открыть или закрыть разновалютные пары одновременно, нужен метод определения, есть ли цены на самом деле или их нет, чтобы не получилось, что по одной паре позиция открыта/закрыта, а по другой этого не произойдет ввиду отсутствия цен. В МТ5 это проверить можно через OrderCheck(). А вот в МТ4 как?

SK: Наличие цены - это факт прошедшей истории. Т.е. наличие недавней цены ничего не гарантирует ни в настоящем, ни в будущем. Вообще в МТ 4 существует понятие, что цена должна быть "из потока" нескольких "последних" котировок. Под этим подразумевается, что погрешности интернета и клиента могут несколько задерживать торговые приказы. К этому лояльно относится сервер - не отфутболивает торговые приказы, построенные на малость устаревших ценах (особенно, если в приказе дано большое проскальзывание). Но это и всё. Ну, предположим, мы как-то узнали последнюю котировку по евро. Мы не можем ждать, пока придут котировки по фунту и франку (не смотря на то, что ещё каких-то несколько секунд назад по ним давались цены ), нужно немедленно формировать торговый приказ по евро, иначе будет поздно (больше 5 сек. даже лояльный сервер ждать не станет). И после этого, конечно, не факт, что котировки по фунту и франку придут в ближайшие секунды. Если частота котировок является критичным параметром, то нужно вести учёт котировок, вычислять их частоту и на это ориентироваться. Например, нетрудно регулярно (например, каждые 5- 10 сек) запрашивать цены на сервере по всем нужным валютам с помощью MarketInfo(). Это лучше осуществлять в зацикленном эксперте; т.е. start() должна пробуждаться на текущую итерацию не новым тиком по фин.инструменту, в окне которого торгует мультивалютник, а жестко - внутри start() должен быть построен бесконечный цикл (например, с выходом по нажатию на кнопку экспертов). Ну, и помнить статистику и на каждой итерации вычислять что-то типа вероятности появления котировки в ближайшее критичное время.




полная версия страницы