Коллеги, прошу помощи! Есть много условий на выставление и изменение(перерегистрация)заявок. Все работает но в один момент заявка почему-то не выставляется. Понял что скорость анализа данных и выполнения условий мала.
private void button1_Click(object sender, RoutedEventArgs e)
{
bool flag=false;
Globals.Trader.QuotesChanged += depth =>
{
List<MarketDepthPair> t = Globals.Trader.GetMarketDepth(security).GetTopPairs(1).ToList();
foreach (MarketDepthPair t1 in t)
{
decimal spread = t1.Ask.Price - t1.Bid.Price;
if (условие 1)
{
if ( flag==false)
{
Dispatcher.BeginInvoke(new Action(() =>
{
order_buy = new Order
{
Portfolio = Portfolio,
Price = ...,
Security = security,
Volume = 1,
Direction = OrderDirections.Buy,
};
Globals.Trader.RegisterOrder(order_buy);
order_sell = new Order
{
Portfolio = Portfolio,
Price = ...,
Security = security,
Volume = 1,
Direction = OrderDirections.Sell,
};
Globals.Trader.RegisterOrder(order_sell);
}));
flag = true;
}
else if(order_buy.State == OrderStates.Done && order_sell.State==OrderStates.Active)
{
if (условие)
{
Dispatcher.BeginInvoke(new Action(() =>
{
Globals.Trader.CancelOrder(order_sell);
order_sell = new Order
{
Portfolio = Portfolio,
Price = ....,
Security = security,
Volume = 1,
Direction = OrderDirections.Sell,
};
Globals.Trader.RegisterOrder(order_sell);
}));
}
flag = true;
}
else if (order_sell.State == OrderStates.Done && order_buy.State == OrderStates.Active)
{
if (условие)
{
Dispatcher.BeginInvoke(new Action(() =>
{
Globals.Trader.CancelOrder(order_buy);
order_buy = new Order
{
Portfolio = Portfolio,
Price = ....,
Security = security,
Volume = 1,
Direction = OrderDirections.Buy,
};
Globals.Trader.RegisterOrder(order_buy);
}));
flag = true;
}
}
else if (order_sell.State == OrderStates.Done && order_buy.State == OrderStates.Done)
{
flag = false;
}
}
}
};
}
Понимаю, что if else - очень замедляет switch не подойдет, анализирую несколько переменных. Думаю создать события на каждое из условий. Может есть уже какие нибудь стандартизированные методы решения такой задачи?
Заранее благодарю!
コメント (5)
ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください
На будущее, используйте теги {/code}, вместо поставьте []. Без них код трудно воспринять.
Всю бизнес логику надо писать в классе наследованном от Strategy, а не в обработчике нажатия кнопки.
Помогите пожалуйста написать свое правило и активировать его! на форуме нашел такие примеры:
Саму идею я понял! Но конкретно где не правильно я делаю не вижу! Моя задача в следующем написать правило на изменение состояния статуса 2х заявок, т.е. допустим условие 1. заявка на продажу исполнилась а заявка на покупку еще активна -> если спред=х -> пере выставляем заявку на покупку уже с другой ценой. 2. Так же как 1, только на оборот по заявкам. 3. Обе заявки исполнились -> выставляем две новые. Вот собственно эти 3 я и написал, но они не срабатывают. (
немножко оффтоп, но вы собираетесь спред через quik торговать? вроде без плазы там(внутри спреда) делать нечего )))
В вашем случае я бы посоветовал создавать две стратегии котирования и, когда у обеих будет статус Stopped - создавать новые )