Вопросы новичка в S#


Вопросы новичка в S# (Locked)
Atom
12/1/2010


ttt

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


<< < 12 13 14 15 16  > >>
MCTuTeJ|19951995

Avatar
Date: 3/14/2011


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

Mikhail Sukhov

Avatar
Date: 3/14/2011


MCTuTeJ|19951995 Go to
Ну да, сделал вроде всё как описано - колонки в конец и потом
Code

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


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

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

var columns = _trader.SecuritiesTable.Columns;

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

skuvv

Avatar
Date: 3/14/2011


skuvv Go to
Mikhail Sukhov Go to
skuvv Go to
По поводу ReRegisterOrder, при использовании такого кода:
Code

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 вывод тоже висит)
Code

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

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

MCTuTeJ|19951995

Avatar
Date: 3/14/2011


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

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


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

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

var columns = _trader.SecuritiesTable.Columns;

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

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

VsevolodG

Avatar
Date: 3/14/2011


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

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

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

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

MCTuTeJ|19951995

Avatar
Date: 3/14/2011


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

Mikhail Sukhov

Avatar
Date: 3/15/2011


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


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

skuvv

Avatar
Date: 3/15/2011


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


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

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

Mikhail Sukhov

Avatar
Date: 3/15/2011


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


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

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


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

IlyaILH

Avatar
Date: 3/15/2011


Добрый день.

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

Заранее благодарен за помощь.
Thanks:
<< < 12 13 14 15 16  > >>

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy