Выставляю маркет ордер следующим образом
public void BuyMarket(Security security, int volume)
{
var order = new Order
{
Security = security,
Type = OrderTypes.Market,
Volume = volume,
Direction = OrderDirections.Buy
};
NewOrder(order);
}
private void NewOrder(Order order)
{
if (order == null)
throw new ArgumentNullException("order");
order.Account = Config.GetInstance().QuikAccount;
_quikTrader.RegisterOrder(order);
}
В результате получаю ошибку о недопустимой цене - 0. Но ведь я и не хочу устанавливать цену. Это же маркет ордер. Как правильно сделать?
评论 (6)
登录 或 创建账户, 登录或注册以发表评论
Если быть точным то ошибка такая:
не была зарегистрирована. Причина '[FORTS] Цена сделки вне лимита'.
Заявка по транзакции 'ACCOUNT=SPBFUT00265; CLIENT_CODE=XXX; TYPE=M; TRANS_ID=1; CLASSCODE=SPBFUT; SECCODE=RIH0; ACTION=NEW_ORDER; OPERATION=B; QUANTITY=1; PRICE=0;' не была зарегистрирована. Причина '[FORTS] Цена сделки вне лимита'. Parameter name: transactionTxt
Order.Type = OrderTypes.Market. Но РТС, насколько я помню, не поддерживает в класическом представлении тиы заявки Рыночная. Для этой биржи нужно указывать наихуд цену, и заявка будет удовлетворяться до этой наихуд цены. Затем она снимется.
Забыл добавить, что именно для таких случаев я и реализовал котирование. В документации описан процесс работы с этим алгоритмом.
Спасибо. Действительно при указании цены все проходит нормально. Т.е нужно указывать худшую цену чтобы стопроцентно купить или продать по маркету?
Получается что так. Это биржевые ограничения. Только я бы указывал не просто худшую, а наихудше допустимую. Чтобы был барьер ввиде стоп лосса.