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


ttt

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

Теги:


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




506 Ответов
<< < 4 5 6 7 8  > >>
MCTuTeJ|19951995

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


Если Вы имели ввиду "Экспорт дополнительных колонок" то да, сделал.
Спасибо:

Mikhail Sukhov

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


MCTuTeJ|19951995 Перейти
Если Вы имели ввиду "Экспорт дополнительных колонок" то да, сделал.


Я имею ввиду Модификация стандартных таблиц. Прочитайте раздел Настройки Квика (там где написано про дату изменений на ФОРТС + ММВБ). И раздел Модификация стандартных таблиц, как чинить.
Спасибо:

MCTuTeJ|19951995

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


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

MCTuTeJ|19951995

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


а всё, нашел ))
Спасибо:

MCTuTeJ|19951995

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


Ну да, сделал вроде всё как описано - колонки в конец и потом
Код

Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.Volatility);
Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.SettlementDate);
Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.ExpiryDate);
Спасибо:

MCTuTeJ|19951995

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


А у всех в Win7 справка криво работает ? Её нужно в корень копировать (или чтобы путь был без спецальных символов и русских букв).
Спасибо:

Mikhail Sukhov

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


MCTuTeJ|19951995 Перейти
Ну да, сделал вроде всё как описано - колонки в конец и потом
Код

Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.Volatility);
Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.SettlementDate);
Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.ExpiryDate);


У меня в разделе Модификация стандартных таблиц версии 2.6 написано совсем другое:

Код
// создаем шлюз к Quik-у
_trader = new QuikTrader(this.Path.Text);

var columns = _trader.SecuritiesTable.Columns;

// вставляем колонку Время последнего изменения по индексу колонки Время последней сделки
// последняя при это перемещается "вперед"
columns.Insert(columns.IndexOf(DdeSecurityColumns.LastTradeTime), DdeSecurityColumns.LastChangeTime);
Спасибо:

skuvv

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


skuvv Перейти
Mikhail Sukhov Перейти
skuvv Перейти
По поводу ReRegisterOrder, при использовании такого кода:
Код

Ecng.Trading.BusinessEntities.Order _order = order.Clone();
_order.Volume = newQty;
_order.Price = newPrice;
_trader.ReRegisterOrder(order, _order);

получаю отклоненный ордер с сообщением "Сообщение [FORTS] Ошибка в задании входных параметров.. New Order1 ID: 0, new Order2 ID:0"


Подозреваю, что какие то параметры неправильные. newQty и newPrice проверьте.

v3.0.13 ошибка ушла.
замененный ордер не заполняет поле OrderStatus, и всегда ==null

PS для стоп-ордеров статус корректный

Подтверждаю в 3.0.16 ошибка исправлена,
Появилась новая, при использовании для снятия ордера команды TraderHelper, он фризит все потоки(на 20 секунд) и соответсвенно до таймаута не может получить новые события(dde вывод тоже висит)
Код

try
{
TraderHelper.GuarantyCancelOrder(order);
}
catch (Exception ex)
{
Console.WriteLine(Time.ToString(timefmt) + " ***Cancelling order Reject*** "+ex.ToString());
}

Как только срабатывает эксепшн, собятия начинают приходить
Спасибо:

MCTuTeJ|19951995

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


Mikhail Sukhov Перейти
MCTuTeJ|19951995 Перейти
Ну да, сделал вроде всё как описано - колонки в конец и потом
Код

Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.Volatility);
Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.SettlementDate);
Trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.ExpiryDate);


У меня в разделе Модификация стандартных таблиц версии 2.6 написано совсем другое:

Код
// создаем шлюз к Quik-у
_trader = new QuikTrader(this.Path.Text);

var columns = _trader.SecuritiesTable.Columns;

// вставляем колонку Время последнего изменения по индексу колонки Время последней сделки
// последняя при это перемещается "вперед"
columns.Insert(columns.IndexOf(DdeSecurityColumns.LastTradeTime), DdeSecurityColumns.LastChangeTime);

Там же вроде указано несколько вариантов...
Использую описанный выше - волатильность и дата эксперации нормально работают.
Спасибо:

VsevolodG

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


Здравствуйте!

Мне нужно сделать робота со следующим алгоритмом:
1. При запуске выставляются две заявки на покупку и на продажу
2. После двух подряд покупок или продаж выставлять стоп-лимиты
3. Когда срабатывает стоп-лимит выставлять тейк-профит на обратную сделку

На основе примеров я создал подключение к Quik. Дальше сразу же затык на получении текущей цены бумаги, на основании которой выставлять первые две заявки.
После выставления заявок, как я понимаю, необходимо отслеживать событие NewTrades. Я прав?

Уточните, пожалуйста, как узнать текущую цену бумаги (которая отображается на "графике цены и объема"). А также правильным ли путем я иду или надо создавать какие-то стратегии?
Спасибо:

MCTuTeJ|19951995

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


Не знаю как у других, но для меня стратегии существенно упростили работу со s#.
Спасибо:

Mikhail Sukhov

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


skuvv Перейти
Появилась новая, при использовании для снятия ордера команды TraderHelper, он фризит все потоки(на 20 секунд) и соответсвенно до таймаута не может получить новые события(dde вывод тоже висит)


А как проверялось что и другие потоки замирали? Вообще фриз происходит только на текущий поток. GuarantyCancel напрямую вызывался из кода или через котирование?
Спасибо:

skuvv

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


Mikhail Sukhov Перейти
skuvv Перейти
Появилась новая, при использовании для снятия ордера команды TraderHelper, он фризит все потоки(на 20 секунд) и соответсвенно до таймаута не может получить новые события(dde вывод тоже висит)


А как проверялось что и другие потоки замирали? Вообще фриз происходит только на текущий поток. GuarantyCancel напрямую вызывался из кода или через котирование?

Вызывался из основного потока и соответсвенно весь мой GUI замирал.
По логам никаких ивентов в этот промежуток небыло, зато сразу после фриза, накопленные данные пачкой выливаются из квика(сильный пик активности)
Спасибо:

Mikhail Sukhov

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


skuvv Перейти
Mikhail Sukhov Перейти
skuvv Перейти
Появилась новая, при использовании для снятия ордера команды TraderHelper, он фризит все потоки(на 20 секунд) и соответсвенно до таймаута не может получить новые события(dde вывод тоже висит)


А как проверялось что и другие потоки замирали? Вообще фриз происходит только на текущий поток. GuarantyCancel напрямую вызывался из кода или через котирование?

Вызывался из основного потока и соответсвенно весь мой GUI замирал.
По логам никаких ивентов в этот промежуток небыло, зато сразу после фриза, накопленные данные пачкой выливаются из квика(сильный пик активности)


1. Из GUI потока торговлю делать не нужно.
2. Потому что наверняка вы из других обработчиков делаете GuiSync. А так как GUI поток заблокирован из-за неправильного пункта 1, то виснут и сами обработчики.
Спасибо:

IlyaILH

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


Добрый день.

Приступил к изучению S# в связи с этим у меня возник вопрос:
при экспорте custom table все нормально работает, когда в таблице одна бумага, но как работать с несколькими бумагами
так, например, при завпросе code инструмента выдается только код 1-го по списку инструмента.

Заранее благодарен за помощь.
Спасибо:

Mikhail Sukhov

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


IlyaILH Перейти
Добрый день.

Приступил к изучению S# в связи с этим у меня возник вопрос:
при экспорте custom table все нормально работает, когда в таблице одна бумага, но как работать с несколькими бумагами
так, например, при завпросе code инструмента выдается только код 1-го по списку инструмента.

Заранее благодарен за помощь.


Чуть подробнее и с деталями.
Спасибо:

skuvv

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


Mikhail Sukhov Перейти
skuvv Перейти
Mikhail Sukhov Перейти
skuvv Перейти
Появилась новая, при использовании для снятия ордера команды TraderHelper, он фризит все потоки(на 20 секунд) и соответсвенно до таймаута не может получить новые события(dde вывод тоже висит)


А как проверялось что и другие потоки замирали? Вообще фриз происходит только на текущий поток. GuarantyCancel напрямую вызывался из кода или через котирование?

Вызывался из основного потока и соответсвенно весь мой GUI замирал.
По логам никаких ивентов в этот промежуток небыло, зато сразу после фриза, накопленные данные пачкой выливаются из квика(сильный пик активности)


1. Из GUI потока торговлю делать не нужно.
2. Потому что наверняка вы из других обработчиков делаете GuiSync. А так как GUI поток заблокирован из-за неправильного пункта 1, то виснут и сами обработчики.

Проблема повторяется и не только из мейн потока.
Попробовал TraderHelper в Sample примере, все ок.
Видимо проблема у меня, но раньше её не было(до 3.0.13 включительно)....
Спасибо:

VsevolodG

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


VsevolodG Перейти
Здравствуйте!

Мне нужно сделать робота со следующим алгоритмом:
1. При запуске выставляются две заявки на покупку и на продажу
2. После двух подряд покупок или продаж выставлять стоп-лимиты
3. Когда срабатывает стоп-лимит выставлять тейк-профит на обратную сделку

На основе примеров я создал подключение к Quik. Дальше сразу же затык на получении текущей цены бумаги, на основании которой выставлять первые две заявки.
После выставления заявок, как я понимаю, необходимо отслеживать событие NewTrades. Я прав?

Уточните, пожалуйста, как узнать текущую цену бумаги (которая отображается на "графике цены и объема"). А также правильным ли путем я иду или надо создавать какие-то стратегии?


Не оставляйте, пожалуйста, без внимания мои вопросы
Спасибо:

Alexander

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


VsevolodG Перейти
VsevolodG Перейти
Здравствуйте!

Мне нужно сделать робота со следующим алгоритмом:
1. При запуске выставляются две заявки на покупку и на продажу
2. После двух подряд покупок или продаж выставлять стоп-лимиты
3. Когда срабатывает стоп-лимит выставлять тейк-профит на обратную сделку

На основе примеров я создал подключение к Quik. Дальше сразу же затык на получении текущей цены бумаги, на основании которой выставлять первые две заявки.
После выставления заявок, как я понимаю, необходимо отслеживать событие NewTrades. Я прав?

Уточните, пожалуйста, как узнать текущую цену бумаги (которая отображается на "графике цены и объема"). А также правильным ли путем я иду или надо создавать какие-то стратегии?


Не оставляйте, пожалуйста, без внимания мои вопросы



В первую очередь следует изучить документацию и посмотреть примеры более внимательно.

1) Что значит "текущая цена бумаги"? Цена последней сделки бумаги?
В данном вопросе уже содержится ответ.
Security - бумага
LastTrade - последняя сделка
Price - цена

Получаем Security.LastTrade.Price

2) Зачем все сделки, если интересуют только собственные сделки?
NewMyTrades отслеживать

Если это всё что нужно, то можно и без стратегий.
Спасибо:

IlyaILH

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


Mikhail Sukhov Перейти
IlyaILH Перейти
Добрый день.

Приступил к изучению S# в связи с этим у меня возник вопрос:
при экспорте custom table все нормально работает, когда в таблице одна бумага, но как работать с несколькими бумагами
так, например, при завпросе code инструмента выдается только код 1-го по списку инструмента.

Заранее благодарен за помощь.


Чуть подробнее и с деталями.


Все с этим разобрался, Спасибо.
Спасибо:

VsevolodG

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


Alexander Перейти
VsevolodG Перейти
VsevolodG Перейти
Здравствуйте!

Мне нужно сделать робота со следующим алгоритмом:
1. При запуске выставляются две заявки на покупку и на продажу
2. После двух подряд покупок или продаж выставлять стоп-лимиты
3. Когда срабатывает стоп-лимит выставлять тейк-профит на обратную сделку

На основе примеров я создал подключение к Quik. Дальше сразу же затык на получении текущей цены бумаги, на основании которой выставлять первые две заявки.
После выставления заявок, как я понимаю, необходимо отслеживать событие NewTrades. Я прав?

Уточните, пожалуйста, как узнать текущую цену бумаги (которая отображается на "графике цены и объема"). А также правильным ли путем я иду или надо создавать какие-то стратегии?


Не оставляйте, пожалуйста, без внимания мои вопросы



В первую очередь следует изучить документацию и посмотреть примеры более внимательно.

1) Что значит "текущая цена бумаги"? Цена последней сделки бумаги?
В данном вопросе уже содержится ответ.
Security - бумага
LastTrade - последняя сделка
Price - цена

Получаем Security.LastTrade.Price

2) Зачем все сделки, если интересуют только собственные сделки?
NewMyTrades отслеживать

Если это всё что нужно, то можно и без стратегий.


Тогда вопрос, как получить значение Security.LastTrade.Price?
В документации написано:
"RegisterSecurity - Начать получать новую информацию (например, LastTrade или BestBid) по инструменту."

Соответственно, делаю так:
this.Trader.RegisterSecurity(_lkoh);
this.Trader.SecuritiesChanged += new Action<IEnumerable<Security>>(Trader_SecuritiesChanged);

В итоге это событие не вызывается в принципе. Хотя в Quik изменения в стакане происходят регулярно.
Спасибо:

VsevolodG

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


Событие SecuritiesChanged начало отрабатывать, после того как я подписался на событие:
this.Trader.RegisterQuotes(_lkoh);
this.Trader.QuotesChanged += new Action<IEnumerable<MarketDepth>>(Trader_QuotesChanged);

Но, цена последней сделки всегда равна нулю.
"LastTrade: 0, BestBid: Бид 1998,5 2"
Спасибо:

Mikhail Sukhov

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


VsevolodG Перейти
Событие SecuritiesChanged начало отрабатывать, после того как я подписался на событие:
this.Trader.RegisterQuotes(_lkoh);
this.Trader.QuotesChanged += new Action<IEnumerable<MarketDepth>>(Trader_QuotesChanged);

Но, цена последней сделки всегда равна нулю.
"LastTrade: 0, BestBid: Бид 1998,5 2"


А таблица сделок экспортируется?
Спасибо: VsevolodG

Igor_B

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


Михаил. доброе время.
Создали и экспортируем собственную таблицу из Квик. Данные по ДДЕ получаем (код, цена последней сделки, время посл.сделки...), сейчас пробуем экспорт стакана.
Работаем в своем приложении.
1.Можно ли экспортировать данные стакана (и/или любые другие) без открытия в Квике таблиц Инструменты...
2.Пробовали создавать таблицу инструменты в Квике (пример LKOH), при выполнении
lkoh = new Security();
Trader.RegisterQuotes(lkoh); - ошибка
"Для инструмента не было найдено информации в таблице инструменты.
Parameter name: security"
В чем м.б. ошибка?
Спасибо.


Спасибо:

VsevolodG

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


Подскажите, пожалуйста, по какой причине может не отрабатывать событие MyNewTrades?
Сделка в Quik появляется, а код, привязанный к событию MyNewTrades не отрабатывает.

Вот мой код:

this.Trader.NewMyTrades += myTrades =>
{
foreach (var myTrade in myTrades)
{
var trade = myTrade.Trade;
MessageBox.Show(String.Format("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time));
}
};

this.Trader.Terminal.StartDde(Trader.SecuritiesTable, Trader.MyTradesTable, Trader.EquityPositionsTable);
Спасибо:
<< < 4 5 6 7 8  > >>

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

loading
clippy