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


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

Теги:


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


<< < 23 24 25 26 27  > >>
Mikhail Sukhov

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


MCTuTeJ|19951995
Михаил,а
Код
ReRegisterOrder(order,()=>newPrice,()=>newVolume,true)

это тоже самое, что и
Код

Trader.CancelOrder(order);
Order newOrder = new Order();
newOrder.Portfolio=order.Portfolio;
newOrder.Security = order.Security;
newOrder.Price = newPrice;
newOrder.Direction= order.Direction;
newOrder.Volume= newVolume;
Trader.RegisterOrder;


?


Для ФОРТС нет. Для всего остального да.
Спасибо:

Mikhail Sukhov

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


MCTuTeJ|19951995

Проблема в том, что иногда заявка исполняется после проверки на исполнение, в результате чего происходит ошибка - программа пытается передвинуть исполненную заявку. Не подскажете как это лечится ?


Отменять, дожидаться отмены, выставлять новую.
Спасибо: MCTuTeJ|19951995

Mikhail Sukhov

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


D_Alex
Код

this.Trader.NewMyTrades += trades => this.GuiAsync(() => _myTradesWindow.Trades.AddRange(trades));
this.Trader.NewTrades += trades => this.GuiAsync(() => _tradesWindow.Trades.AddRange(trades));


в таком случае обработка этих событий идет как-то в 2 потока, или по очереди?


Сами потоки ITrader в двух работают, так как синхронизация с ГУИ сделана асинхронно (GuiAsync).
Спасибо: a.dobryn

MCTuTeJ|19951995

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


Mikhail Sukhov
MCTuTeJ|19951995

Проблема в том, что иногда заявка исполняется после проверки на исполнение, в результате чего происходит ошибка - программа пытается передвинуть исполненную заявку. Не подскажете как это лечится ?


Отменять, дожидаться отмены, выставлять новую.

Но если к моменту отмены она уже будет исполнена всё равно ведь будет ошибка ?
Спасибо:

Mikhail Sukhov

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


MCTuTeJ|19951995
Mikhail Sukhov
MCTuTeJ|19951995

Проблема в том, что иногда заявка исполняется после проверки на исполнение, в результате чего происходит ошибка - программа пытается передвинуть исполненную заявку. Не подскажете как это лечится ?


Отменять, дожидаться отмены, выставлять новую.

Но если к моменту отмены она уже будет исполнена всё равно ведь будет ошибка ?


Конечно. И этот случай следовательно нужно обрабатывать.
Спасибо:

a.dobryn

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


Mikhail Sukhov
D_Alex
Код

this.Trader.NewMyTrades += trades => this.GuiAsync(() => _myTradesWindow.Trades.AddRange(trades));
this.Trader.NewTrades += trades => this.GuiAsync(() => _tradesWindow.Trades.AddRange(trades));


в таком случае обработка этих событий идет как-то в 2 потока, или по очереди?


Сами потоки ITrader в двух работают, так как синхронизация с ГУИ сделана асинхронно (GuiAsync).


просто в программе по NewTrades происходит куча действий, в том числе и проверка, есть ли новые сделки (по _myTradesWindow.Trades, а они не всегда обновляются). Может быть такое, что при постоянной обработке NewTrades обработка NewMyTrades просто не успевает выполниться?
Спасибо:

Mikhail Sukhov

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


D_Alex
просто в программе по NewTrades происходит куча действий, в том числе и проверка, есть ли новые сделки (по _myTradesWindow.Trades, а они не всегда обновляются). Может быть такое, что при постоянной обработке NewTrades обработка NewMyTrades просто не успевает выполниться?


Сами они между собой не синхронизируются внутри QuikTrader. А вот в обработчиках у вас вполне может. Отключайте что-то, смотрите.
Спасибо: a.dobryn

IlyaILH

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


Mikhail Sukhov
IlyaILH
Trader.NewSecurities += securities =>
{

foreach (Security tool in securities)
{

MessageBox.Show(tool.Id +" "+ tool.State.ToString());

}
};

На этот код, мне выводится не понятно что, но предположительно данные из таблицы Все сделки.


Выделенное можете как-то подробнее описать? Код выводит идентификатор инструмента и его состояние. Причем здесь сделки?


Я получаю следующие сообщения по вышестоящему коду:

VDSB@EQNE Trading
LK20000BF1@RTS Trading и т.д.

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

Mikhail Sukhov

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


IlyaILH
Я получаю следующие сообщения по вышестоящему коду:

VDSB@EQNE Trading
LK20000BF1@RTS Trading и т.д.

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


Понял. Информация об инструментах идет отовсюду. В том числе и из таблицы сделок.
Спасибо:

Vyacheslav

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


Михаил, спасибо за Ваш огромный труд!

Только начал изучать S#.
Сразу вопрос: запускаю sampleconsole.exe, однако возникают ошибки:

Введите номер счета, через который будет выставлена заявка: NL0011100043
Производим подключение...
Подключение было произведено успешно.
Дожидаемся появления в программе инструмента Лукойл и портфеля NL0011100043...
Инструмент Лукойл появился.
Портфель NL0011100043 появился.
Первоначальное значение середины спреда 0
System.ArgumentException: Транзакции 'ACCOUNT=NL0011100043; CLIENT_CODE=S#; TRAN
S_ID=83785079; CLASSCODE=QJSIM; SECCODE=LKOH; QUANTITY=1; OPERATION=B; TYPE=L; A
CTION=NEW_ORDER; PRICE=0; EXECUTION_CONDITION=PUT_IN_QUEUE;' не была зарегистрир
ована. Причина 'Цена заявки должна быть положительна'.
Parameter name: transactionTxt
at #=qoXwOPiKu6rKxfqRbyQH_8kmNOB382r_Z62UoStG__20=.#=qqqjfNu5FDvUnmIHLI7eIpqU
LYCdQ6s45iJpvRMufTTo=(String #=qMyxjjZn7gcLlgrKmKE6fdw==, OrderStatus& #=qfMzUMV
woA9vTKeRIC2yVBg==, UInt32& #=qx89Qmj8$YdXkVw2g47iBHA==, Int64& #=qru3jL$hLUeCws
hCq6a0lcA==, String& #=qJTAyuLuvPwQ9HQzhdHWM2g==)
at Ecng.Trading.Quik.QuikTrader.#=q54MTj4O0HyGlsuBk4LMgvyLClWnXw07g5l8N_CZjZX
o=(Order #=qfB2F85tURLB4YdJcjKMYgg==, TransactionBuilder #=qk_SbqcrTyofJ_NTgcHp8
Fg==)
at Ecng.Trading.Quik.QuikTrader.OnRegisterOrder(Order order)
at Ecng.Trading.Algo.BaseTrader.RegisterOrder(Order order)
at SampleConsole.Program.Main() in E:\StockSharpReleases\StockSharp_3.0.19\So
urces\SampleConsole\Program.cs:line 143

C:\StockSharp_3.0.19\Exe\SampleConsole>


QUIK также выбрасывает сообщение:
DDE сервер 'wrapper'.Документ 'стакан [LKOH-QJSIM]'.
Таблица 'LKOH-QJSIM'. Произошла ошибка: Ошибка при передаче таблицы,
вывод приостановлен. Неверные параметры.


Использую Ваш info.wnd
Verifier показывает отсутствие ошибок.
S# 3.0.19, QUIK-JUNIOR 5.21
Однако, такое чувство, что нет экспорта стакана по DDE.

Что делать?



Спасибо:
<< < 23 24 25 26 27  > >>

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

loading
clippy