← Назад

Как мне выставить заявку с вычисляемой ценой?

Здравствуйте, выставляю заяки на покупку-продажи фьючерсов с помощью метода

private void BuySell(decimal price, OrderDirections orderDirection, decimal volume )
{
    var order = new Order
    {
         Trader=_trader,
         Portfolio=_portfolio,
         Security = _sec,
         Volume = volume,
         Price = price,
         Direction = orderDirection 
    };
    Trader.RegisterOrder(order);
}

Всё работает, kind of, когда я передаю цены, пришедшие в S# из КВИК, без каких-то вычислений выражений, например:

  • BuySell(_sec.MinPrice, OrderDirections.Sell, 2); или
  • BuySell(_sec.MaxPrice, OrderDirections.Buy, 3);

Но когда я пытаюсь подправить миним-ю/максимальную цену, для того чтобы гарантировать, что цена попадает в границы допустимых и в связи с округлением максимальной/минимальной возможной цены в Stock#, например, как:

BuySell(_sec.MaxPrice-1.0M, OrderDirections.Buy, 1);

или

BuySell(_sec.MinPrice+1.0M, OrderDirections.Sell, 5); 

или

BuySell(_sec.MaxPrice-1, OrderDirections.Buy, 1);

или

BuySell(_sec.MinPrice+1, OrderDirections.Sell, 5);

то заявка не выставляется, при всех тех же одинаковых условиях, причём нет никаких предупреждений-сообщений со стороны Stock#, а в КВМК выдаётся предупреждение:

"DDE сервер 'STOCKSHARP'. Документ 'позиции по дериватвам[]'. Таблица 'Позиции по дертвативам'. Произошла ошибка: Ошибка при передаче таблицы, вывод приостановлен. Неверные параметры"

Ошибка DDE сервера STOCKSHARP

Каким образом можно делать преобразования-вычисления на ценой выставляемой заявки?

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

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

Геннадий Ванин (Gennady Vanin)
Геннадий Ванин (Gennady Vanin) Автор

Если пишу напрямую (или вызову без параметров) - то де самое

 
Order order = new Order
    {
         Trader=_trader,
         Portfolio=_portfolio,
         Security = _sec,
         Volume = 2,
         Price = _sec.MaxPrice,
         Direction = OrderDirection.Buy 
    };

то заявка проходит.

А если вместо Price = _sec.MaxPrice, напишу Price = _sec.MaxPrice-1, или Price = _sec.MaxPrice-1.0M, то заявк не выставляется... И, главное - в Ы№ никаких предупреждений или ошибок

Moadip
Moadip

Какой инструмент используется?

напишу Price = _sec.MaxPrice-1, или Price = _sec.MaxPrice-1.0M,

Вы уверены что шаг цены инструмента кратен 1?

Допустим для RIZ2 сейчас верхняя планка равна 147550. Получается вы пытаетесь отправить заявку с ценой 147549, хотя у ри шаг цены 10п.

Правильней писать так:


Price = _sec.MaxPrice - _sec.MinStepSize;

Тогда при смене инструмента не придется менять отступ.

Геннадий Ванин (Gennady Vanin)
Геннадий Ванин (Gennady Vanin)
Геннадий Ванин (Gennady Vanin) Автор

Moadip: Какой инструмент используется?

Геннадий Ванин (Gennady Vanin): Здравствуйте, выставляю заяки на покупку-продажи фьючерсов с помощью метода

SIZ2, RIZ2

Moadip: Вы уверены что шаг цены инструмента кратен 1?

Допустим для RIZ2 сейчас верхняя планка равна 147550. Получается вы пытаетесь отправить заявку с ценой 147549, хотя у ри шаг цены 10п. Ой, это очень хитро, спасибо.

Тем более, я не понимаю - зачем нужно проверять на кратность, если я, например, выставляю на покупку по 141, 200., а сделка, всё равно совершается по рыночной цене 139,930. Это защита от новичков?

esper
esper

Trader.ProcessDataError и Trader.OrdersRegisterFailed что-нибудь выдают?

Геннадий Ванин (Gennady Vanin)