Корректная работа с событийной моделью на примере простого алгоритма~/topic/3502/korrektnaya-rabota-s-sobytiinoi-modelyu-na-primere-prostogo-algoritma/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-28T09:07:30Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/posts/m/24821/ - Доктор, когда я вот так делаю, у меня вот здесь болит - что делать? - Не делайте так!2013-03-26T13:16:01Z2013-03-26T13:16:01ZVassilSanychhttps://stocksharp.ru/users/6491/info@stocksharp.ru<div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />- Доктор, когда я вот так делаю, у меня вот здесь болит - что делать?<br />- Не делайте так!</div></div>Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/24815/Спасибо за ответ. Какие принципы борьбы с подобными вещами существуют?2013-03-26T12:32:19Z2013-03-26T12:32:19ZАндрей Шабановhttps://stocksharp.ru/users/16691/info@stocksharp.ruСпасибо за ответ. Какие принципы борьбы с подобными вещами существуют?Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/24787/Доброго времени суток. Начал знакомиться с событийной моделью в S#. Чтобы разобраться как все работа...2013-03-25T19:31:50Z2013-03-26T12:01:32ZАндрей Шабановhttps://stocksharp.ru/users/16691/info@stocksharp.ruДоброго времени суток. Начал знакомиться с событийной моделью в S#.<br />Чтобы разобраться как все работает решил реализовать простой алгоритм, который выглядит следующим образом.<br />На вход дается два параметра CurrentMidPrice и Step.<br />Робот выставляет две заявки на куплю и на продажу (по цене CurrentPrice+Step и СurrentPrice-Step)<br />Далее если произошла сделка на покупку то оставшаяся заявка снимается, CurrentPrice-=Step и алгоритм повторяется. Если произошла сделка на продажу то CurrentPrice+=Step соответственно.<br /><br />В моем понимании код стратегии выглядит примерно так:<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
class Mesh:Strategy
{
public decimal Step;
public decimal CurrentMidPrice;
protected override void OnStarted()
{
Security.WhenMarketDepthChanged()
.Do(() => SetBidAskOrders(CurrentMidPrice))
.Once().Apply(this);
base.OnStarted();
}
public void SetBidAskOrders(decimal price)//выставляем спред шириной 2*Step вокруг цены price
{
var h = new SyncObject();
CancelActiveOrders();
var sellOrder = this.CreateOrder(OrderDirections.Sell, price + Step);
var buyOrder = this.CreateOrder(OrderDirections.Buy, price - Step);
sellOrder.WhenNewTrades()
.Sync(h)
.Do(t =>
{
CurrentMidPrice += Step;
SetBidAskOrders(CurrentMidPrice);
})
.Once().Apply(this);
buyOrder.WhenNewTrades()
.Sync(h)
.Do(t =>
{
CurrentMidPrice -= Step;
SetBidAskOrders(CurrentMidPrice);
})
.Once().Apply(this);
lock (h)
{
RegisterOrder(sellOrder);
RegisterOrder(buyOrder);
}
}
</pre>
</div></div><br /><br /><br />Теперь суть вопроса. В целом алгоритм работает как ему и положено но если выставить Step=минимальный шаг цены то из-за задержек. В какой-то момент он начинает множить заявки выставлять по 2-3 спреда и не отменять те заявки которые висят в терминале. Хотя CancelOrders ему полагается делать на каждую сделку.<br /><br />Очевидно можно вводить флаги и останавливать работу всего алгоритма пока мы на каждый чих не получим возвратный чих от биржи, но я хотел бы в столь простом учебном примере обойтись без лишних костылей. вопрос какие вообще существуют пути решения проблемы транзакционости и синхронизации в такого рода роботах. Надо усложнять код или может я что-то проглядел в документации/подходах.<br /><br />Спасибо.<br />(проверял на тестовом квике, есть плаза и это первое решение естественно но она не решает проблему устойчивости событийного алгоритма к задержкам)Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/24803/Похоже, машинка не поспевает за рынком и перед локом формируется необработанная очередь. "Простой" а...2013-03-26T09:23:29Z2013-03-26T09:23:29ZVassilSanychhttps://stocksharp.ru/users/6491/info@stocksharp.ruПохоже, машинка не поспевает за рынком и перед локом формируется необработанная очередь.<br />"Простой" алгоритм - это, получается, злобный HFT со всеми техническими издержками.<br />Наверное. Copyright @ StockSharp Platform LLC 2010 - 2024