Коллеги, прошу помощи! Есть много условий на выставление и изменение(перерегистрация)заявок. Все работает но в один момент заявка почему-то не выставляется. Понял что скорость анализа данных и выполнения условий мала.
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 - создавать новые )