← Назад

как дождаться снятия заявки

Михаил, а как в асинхронном режиме реализовать такое

1.Снять заявку 2.дождаться результат снятия - успешно снята или знятие не прошло

мне нужно отправить запрос на снятие и в результати от успеха/ неуспеха снятия предпринимать те или иные действия

Комментарии (12)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Mikhail Sukhov
Mikhail Sukhov

OrdersChanged пока не придет State Done

Tauler
Tauler Автор

мутить блокировки с помощью ManualSetEvent?

Mikhail Sukhov
Mikhail Sukhov

Да, видимо придется как в примере SampleConsole раз у вас шаг за шагом... Надо бы глянуть на этот новый WF. Рекомендуете статью для начинающего?

Tauler
Tauler Автор

Да я как то так ,по мсдну разбирался. и по примерам. я пару статей по 3.5 прочитал, начинал с него. но думаю в этом плане 3.5 и 4 - разницы никакой нет.

Mikhail Sukhov
Mikhail Sukhov

Вы пишите, что там state режима нет. Так что есть.

Tauler
Tauler Автор

в смысле state режима? там есть Flowchart

Mikhail Sukhov
Mikhail Sukhov

Так а зачем тогда Вы while чиклы пишите? Торговые алгоритмы опираются на события. Думаю не спроста такие системы как ВетЛаб и Квант предоставляют именно событийную модель работы. Понятно, что внутри иет логика последовательная ввиде условий и циклов. Но отправная точна всегда событие: закончился бар, начался новый, цена превысила, заявка изменилась и т.д. Может все же идти по пути именно событий? Его до нас уже протоптали.

Tauler
Tauler Автор

Писал развернутый ответ - и тырнет крякнул.

Суть в том что все эти танцы с бубном лишь для того, чтобы сварганить инструмент, в ктором трейдер будет робота РИСОВАТЬ, а рисовать он может только в виде детерминированых блок-схем. трейдеру будет трудно рассказать, как пользовать события, почему вмсето того, чтобы на снятие заявки получить ответ - успешно или неспешн опрошло снятие, он должен слушать событие, да и мне - разработчику намного удобнее было бы написать

if(trader.CancelOrder(order)) { действия при успешном снятии

else { при неуспешном

чем отменять заявку, а потом в событии получть заявку, выснять что именно это за заявка, и какие действия были с ней в прошлом, и что делать в будущем..

так же намного удобнее проверять заявку

if( status.Done && PartiallyMatched) чем слушать событие.

а если заявок много, кторые надо проверять? тут уже в событийно модели начинаются неудобства :)

Вообще конечно, как мне кажется, много пользы прнес бы смешаный режим, т.к. выстаявлять заявки удобно в асинхронном - и там уже слушать событии, а вот снимать например лучше в синхроноом - там сразу ясно - снял или не снял.А так придется блокировки ставить пояле запроса на снятии, в событии снимать - ну вы сами понимаетет прелести ассинхронного программирования. :) Извините что так сумбурно :)

P.S. События жутко удобная вещь для написания всяческого рода индикаторов, тут они выше всяких похвал.

Mikhail Sukhov
Mikhail Sukhov

Напрашивается обертка над ITrader (по аналогии с SyncTrader). Может сами сделаете? У меня сейчас приоритеты другие.

Tauler
Tauler Автор

так GuaranteeCancelOrder вроде решение проблемы.А насчет обертки - буду думать. у меня счас приоритет арбитражер. :) Ежели обертку синхринизирвоаную намучу - дам вам знать - может сгодится в стокшарпе :)

Mikhail Sukhov
Mikhail Sukhov

Насколько я понял, у Вас таких мест уже несколько:

  1. Connected
  2. NewSecurities
  3. NewOrders
  4. NewTrades

Так что Вам по любому такое надо. Иначе код будете загромождать While Wait и т.д.

Tauler
Tauler Автор

Я сейчас отложил воркфлоу немножко,пишу арбитражера по человечески, на событиях. Но обязательно вернусть к этому вопросу.