Вопросы новичка в S# (Закрыта)
Atom
01.12.2010


ttt

Фотография
Добрый день.
Очень понравилась идея использования Вашей библиотеки для реализации роботов.
Подскажите, пожалуйста:
1) Как идентифицировать заявку?
//например, выставляю заявку buy RIZ0 4 контракта по цене 160500. Каким образом далее смогу ее отслеживать?
Вариант с использованием таблицы сделок не подходит - необходимо реализовать контроль исполнения заявок пользуясь исключительно информацией из таблицы заявок.
С языком C# только начал разбираться, возможно поэтому не нашел в представленных в дистрибутиве S# проектах примеров контроля состояния заявки по ее уникальному признаку.
2) Верно ли я понимаю суть работы с Квиком: для реализации автономного робота необходимо организовать два потока на C#:
- первый: выполняет функции получения данных из Квика через DDE сервер (используя библиотеку S#);
- второй: непосредственно реализует алгоритм выставления и снятия заявок.
Можно ли обойтись одним потоком?

Теги:


Спасибо: Николай_Флёров




506 Ответов
<< < 2 3 4 5 6  > >>
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 18.02.2011


skuvv Перейти
Вопрос по ситуации с [FORTS] В операции отказано: Превышен лимит операций от указанного клиента.:
Асинхронный режим, отменяется ордер и отправляется новый. Приходит сообщение о флуде(в новом ордере) и потом не приходит сообщение об отмене ордера - заявка остается активной, но TraderHelper.IsCanceled считает заявку отклоненной...
Посоветуйте, что можно сделать?


Какая версия?
Спасибо:

skuvv

Фотография
Дата: 18.02.2011


Mikhail Sukhov Перейти
skuvv Перейти
Вопрос по ситуации с [FORTS] В операции отказано: Превышен лимит операций от указанного клиента.:
Асинхронный режим, отменяется ордер и отправляется новый. Приходит сообщение о флуде(в новом ордере) и потом не приходит сообщение об отмене ордера - заявка остается активной, но TraderHelper.IsCanceled считает заявку отклоненной...
Посоветуйте, что можно сделать?


Какая версия?

2.6
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 18.02.2011


skuvv Перейти

2.6


В 3.0 я чинил снятие заявок в асинхронном режиме. Может это та самая ошибка.
Спасибо:

skuvv

Фотография
Дата: 18.02.2011


Mikhail Sukhov Перейти
skuvv Перейти

2.6


В 3.0 я чинил снятие заявок в асинхронном режиме. Может это та самая ошибка.

ОК, спасибо, проверю
Спасибо:

esper

Фотография
Программист
Дата: 21.02.2011


Всем добрый день. Возникла следующая ситауция, мне необходимо получить данные из талицы "Портфель по деривативам" с добавленными колонками.

Код примерно следующий:

//добавляем столбцы
trader.DerivativePortfoliosTable.Columns.Insert(2, DdeDerivativePortfolioColumns.CurrentLimitPositionsPrice);
trader.DerivativePortfoliosTable.Columns.Insert(5, DdeDerivativePortfolioColumns.ACI);
trader.DerivativePortfoliosTable.Columns.Add(DdeDerivativePortfolioColumns.MarketCommission);

//обработчик получения новых записей
trader.NewPortfolios += obj =>
{

};

В обработчик приходит список объектов BusinessEntities.Portfolio, но в свойстве ExtensionInfo нет данных по дополнительным полям, каким образом можно их получить?
Спасибо:

Alexander

Фотография
Дата: 21.02.2011


esper Перейти
Всем добрый день. Возникла следующая ситауция, мне необходимо получить данные из талицы "Портфель по деривативам" с добавленными колонками.

Код примерно следующий:

//добавляем столбцы
trader.DerivativePortfoliosTable.Columns.Insert(2, DdeDerivativePortfolioColumns.CurrentLimitPositionsPrice);
trader.DerivativePortfoliosTable.Columns.Insert(5, DdeDerivativePortfolioColumns.ACI);
trader.DerivativePortfoliosTable.Columns.Add(DdeDerivativePortfolioColumns.MarketCommission);

//обработчик получения новых записей
trader.NewPortfolios += obj =>
{

};

В обработчик приходит список объектов BusinessEntities.Portfolio, но в свойстве ExtensionInfo нет данных по дополнительным полям, каким образом можно их получить?


Аналогичная проблема была вчера. Версия 3.0.5.
Ожидание не помогло (ждал, может вначале портфели приходят из другого места, потом обновляется...).
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 21.02.2011


Alexander Перейти

Аналогичная проблема была вчера. Версия 3.0.5.
Ожидание не помогло (ждал, может вначале портфели приходят из другого места, потом обновляется...).


Да, во первых надо ждать и в NewPortolios и в PortfoliosChanged, так как ExtensionInfo может и позднее заполниться. А вот вторых подтверждаю багу с Insert. С Add у меня работает. Буду фиксить.
Спасибо:

esper

Фотография
Программист
Дата: 21.02.2011


Спасибо.
Попутно возник еще такой вопрос, в таблице "Портфель по деривативам" есть поле "Тип лимита" и ряд других, но в объекте BusinessEntities.Portfolio таких полей нет, их ожидать тоже в ExtensionInfo?
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 21.02.2011


esper Перейти
Спасибо.
Попутно возник еще такой вопрос, в таблице "Портфель по деривативам" есть поле "Тип лимита" и ряд других, но в объекте BusinessEntities.Portfolio таких полей нет, их ожидать тоже в ExtensionInfo?


Тип лимита нет. Смотрится только тип лимита Деньги. Другие - это какие?
Спасибо:

esper

Фотография
Программист
Дата: 21.02.2011


Mikhail Sukhov Перейти
Другие - это какие?


Если я правильно понял, то поля отображаются следующим образом.

Портфель по деривативам:

Торговый счет - Name
Предыд. лимит откр. поз. - BeginAmount
Тек. чист. поз. - CurrentAmount
Вариац. маржа - ?
Тип лимита - опускаем


Позиции по деривативам:

Торговый счет - Portfolio
Код инструмента - Security
Вход. чист. поз. - BeginValue
Тек. чист. поз. - CurrentValue
Акт. покупка - ?
Акт. продажа - ?
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 21.02.2011


esper Перейти

Вариац. маржа - ?


Да, это недоделка. Было желание вычислять текущее значение денег на ФОРТС, но не потом сдался. Надо это куда-то деть. Предлагаю в Portfolio.Leverage.

esper Перейти

Акт. покупка - ?
Акт. продажа - ?


Их сумма записывается в Position.BlockedValue
Спасибо:

a.dobryn

Фотография
Дата: 21.02.2011


а что произойдет, если пробовать снять заявку, у которой статус Done? кроме сообщения о невозможности сделать это. Как можно отловить подобное событие?
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 21.02.2011


D_Alex Перейти
а что произойдет, если пробовать снять заявку, у которой статус Done? кроме сообщения о невозможности сделать это. Как можно отловить подобное событие?


ITrader.OrdersFailed
Спасибо: a.dobryn

skuvv

Фотография
Дата: 21.02.2011


После вызова _trader.ReRegisterOrder
при изменении заявки, TraderHelper.IsCanceled = true.
Собственно вопрос как можно различить отмененный ордер от замененного?
В обоих OrderStates.Done и order.Balance > 0
Можно конечно last message смотреть как вариант.
PS На игровом сервере поле "снята(время)" пустое
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 21.02.2011


skuvv Перейти
Собственно вопрос как можно различить отмененный ордер от замененного?


Во-первых, это плохой подход, когда требуется такое различать. Потому что не существует такого понятия в бирже как "замененный ордер". Во вторых, успешно замененный ордер можно так же отменить. Какая логика должна быть в этом случае?
Спасибо:

skuvv

Фотография
Дата: 21.02.2011


Опять про Replace.
Попробывал пару вариантов и безуспешно. Верхний вариант с отслеживанием нового ордера (по TransactionId), нижние отслеживание старого ордера

Код

//Ecng.Trading.BusinessEntities.Order _NewOrder = _trader.ReRegisterOrder(Order, newPrice, (int)newQty);
21.02.2011 22:16:59 [Sending New Order] GZH1 Price: 19745 Qty: 1
21.02.2011 22:17:00 [parse_order] 79897973
21.02.2011 22:17:00 [_trader_OrdersChanged] order status Active
21.02.2011 22:17:00 [_trader_OrdersChanged] Thread: EventDispatcher thread #заявки
21.02.2011 22:17:00 [_trader_OrdersChanged] order Accepted Done
21.02.2011 22:17:00 [parse_order] 79897973
21.02.2011 22:17:00 [_trader_OrdersChanged] order status Active
21.02.2011 22:17:00 [_trader_OrdersChanged] Thread: EventDispatcher thread #заявки
21.02.2011 22:17:00 [parse_order] 79897973
21.02.2011 22:17:00 [_trader_OrdersChanged] order status Active
21.02.2011 22:17:31 [Replace] 19715 x 1
21.02.2011 22:17:31 [parse_order] 79897974
21.02.2011 22:17:31 [_trader_OrdersChanged] order status NULL
21.02.2011 22:17:31 [_trader_OrdersChanged] Thread: null
21.02.2011 22:17:32 [_trader_OrdersChanged] Thread: EventDispatcher thread #заявки
21.02.2011 22:17:32 [_trader_OrdersChanged] Thread: EventDispatcher thread #заявки
21.02.2011 22:17:32 [parse_order] 79897974
21.02.2011 22:17:32 [_trader_OrdersChanged] order status NULL
->в квике новая заявка без transaction id

//_trader.ReRegisterOrder(Order, newPrice, (int)newQty);
21.02.2011 23:29:53 [Sending New Order] GZH1 Price: 19799 Qty: 1
21.02.2011 23:29:53 [parse_order] 84292206
21.02.2011 23:29:54 [_trader_OrdersChanged] order status Active
21.02.2011 23:29:54 [_trader_OrdersChanged] order Accepted Done
21.02.2011 23:29:55 [_trader_OrdersChanged] Thread: EventDispatcher thread #заявки
21.02.2011 23:29:55 [parse_order] 84292206
21.02.2011 23:29:55 [_trader_OrdersChanged] order status Active
21.02.2011 23:29:55 [_trader_OrdersChanged] Thread: EventDispatcher thread #заявки
21.02.2011 23:29:55 [parse_order] 84292206
21.02.2011 23:29:55 [_trader_OrdersChanged] order status Active
21.02.2011 23:29:59 [Replace] 19759 x 1
21.02.2011 23:30:00 [_trader_OrdersChanged] Thread: null
21.02.2011 23:30:00 [parse_order] 84292206
21.02.2011 23:30:00 [_trader_OrdersChanged] order status Done
21.02.2011 23:30:00 [_trader_OrdersChanged] order Replaced Done
21.02.2011 23:30:01 [_trader_OrdersChanged] Thread: EventDispatcher thread #заявки
21.02.2011 23:30:01 [parse_order] 84292206
21.02.2011 23:30:01 [_trader_OrdersChanged] order status Done
21.02.2011 23:30:01 [_trader_OrdersChanged] order Replaced Done
21.02.2011 23:30:01 [_trader_OrdersChanged] Thread: EventDispatcher thread #заявки
21.02.2011 23:32:15 [Replace] 19752 x 1
->нет events//в квике новая заявка без transaction id

_trader.ReRegisterOrder(OrderList.ElementAt(index).Key, _order);
21.02.2011 23:48:30 [Sending New Order] GZH1 Price: 19809 Qty: 1
21.02.2011 23:48:31 [parse_order] 85085851
21.02.2011 23:48:31 [_trader_OrdersChanged] order status Active
21.02.2011 23:48:31 [_trader_OrdersChanged] order Accepted Done
21.02.2011 23:48:31 [_trader_OrdersChanged] Thread: EventDispatcher thread #заявки
21.02.2011 23:48:32 [parse_order] 85085851
21.02.2011 23:48:32 [_trader_OrdersChanged] order status Active
21.02.2011 23:48:32 [_trader_OrdersChanged] Thread: EventDispatcher thread #заявки
21.02.2011 23:48:32 [parse_order] 85085851
21.02.2011 23:48:32 [_trader_OrdersChanged] order status Active
21.02.2011 23:48:36 [Replace] 19803 x 1
->нет events//в квике нет новой заявки
Спасибо:

a.dobryn

Фотография
Дата: 24.02.2011


Mikhail Sukhov Перейти
D_Alex Перейти
а что произойдет, если пробовать снять заявку, у которой статус Done? кроме сообщения о невозможности сделать это. Как можно отловить подобное событие?


ITrader.OrdersFailed


глупый вопрос, а после этого события и выдачи messagebox, функция, в которой находилась строка CancelOrder продолжает работать дальше?

написано так:
Код
MainWindow.Instance.CancelOrder(MainWindow.Instance._ordersWindow.Orders[orderNum]);

if (MainWindow.Instance._ordersWindow.Orders[orderNum].IsCanceled() == false)
{
..... //в итоге в том случае, если заявка уже исполнена и возникла ошибка, сюда не приходит
}
Спасибо:

a.dobryn

Фотография
Дата: 24.02.2011


и еще вопрос - можно как-то узнать, что заявка была именно снята, а не исполнена, и наоборот?

upd: ой, я подобный вопрос уже спрашивала. Надо использовать метод TraderHelper..::.IsCanceled
Спасибо:

skuvv

Фотография
Дата: 24.02.2011


D_Alex Перейти
и еще вопрос - можно как-то узнать, что заявка была именно снята, а не исполнена, и наоборот?

upd: ой, я подобный вопрос уже спрашивала. Надо использовать метод TraderHelper..::.IsCanceled

Метод подходит если не планируется делать Replace заявки, после Replace IsCanceled=true
Спасибо:

a.dobryn

Фотография
Дата: 24.02.2011


skuvv Перейти
D_Alex Перейти
и еще вопрос - можно как-то узнать, что заявка была именно снята, а не исполнена, и наоборот?

upd: ой, я подобный вопрос уже спрашивала. Надо использовать метод TraderHelper..::.IsCanceled

Метод подходит если не планируется делать Replace заявки, после Replace IsCanceled=true


не планирую =) спасибо за информацию =)
Спасибо:

a.dobryn

Фотография
Дата: 24.02.2011


D_Alex Перейти
Mikhail Sukhov Перейти
D_Alex Перейти
а что произойдет, если пробовать снять заявку, у которой статус Done? кроме сообщения о невозможности сделать это. Как можно отловить подобное событие?


ITrader.OrdersFailed


глупый вопрос, а после этого события и выдачи messagebox, функция, в которой находилась строка CancelOrder продолжает работать дальше?

написано так:
Код
MainWindow.Instance.CancelOrder(MainWindow.Instance._ordersWindow.Orders[orderNum]);

if (MainWindow.Instance._ordersWindow.Orders[orderNum].IsCanceled() == false)
{
..... //в итоге в том случае, если заявка уже исполнена и возникла ошибка, сюда не приходит
}


проблема решена, надо использовать try{} catch(), так как "невозможно снять заявку" это exception
Спасибо:

esper

Фотография
Программист
Дата: 25.02.2011


Mikhail Sukhov Перейти
esper Перейти

Вариац. маржа - ?


Да, это недоделка. Было желание вычислять текущее значение денег на ФОРТС, но не потом сдался. Надо это куда-то деть. Предлагаю в Portfolio.Leverage.

esper Перейти

Акт. покупка - ?
Акт. продажа - ?


Их сумма записывается в Position.BlockedValue


С этим можно сказать разобрались. А вот еще такой вопрос, есть портфель по деривативам, подписываюсь на новую запись в таблице и на изменение данных, событие изменения данных возникает до события новой записи, это нормальная ситуация?

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.02.2011


esper Перейти
А вот еще такой вопрос, есть портфель по деривативам, подписываюсь на новую запись в таблице и на изменение данных, событие изменения данных возникает до события новой записи, это нормальная ситуация?


Не могу воспроизвести.
Спасибо:

esper

Фотография
Программист
Дата: 26.02.2011


Mikhail Sukhov Перейти
esper Перейти
А вот еще такой вопрос, есть портфель по деривативам, подписываюсь на новую запись в таблице и на изменение данных, событие изменения данных возникает до события новой записи, это нормальная ситуация?


Не могу воспроизвести.


У меня тоже не всегда удается повторить эту ситуацию, если удасться найти что приводит к ней, то отпишусь здесь.
Спасибо:

freelancer

Фотография
Дата: 02.03.2011


Здравствуйте. Все цены инструмента (лучшая покупка, продажа и т.д.) у меня равны нулю почему-то (событие SecuritiesChanged). И даже в примере "Sample". Почему так ? Версия - последняя
Спасибо:
<< < 2 3 4 5 6  > >>

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy