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


ttt

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

Теги:


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




506 Ответов
< 1 2 3 4  > >>
a.dobryn

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


А что означает "Превышен лимит по инструменту?"
отправляю заявку так
Код

var order = new Order
{
Volume = volume,
Price = price,
Security = MainWindow.Instance._securitiesWindow.Securities[0],
Direction = oper == "Buy" ? OrderDirections.Buy : OrderDirections.Sell,
};
MainWindow.Instance.NewOrder(order);

Спасибо:

a.dobryn

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


или откуда вообще вытаскивать Security?
Спасибо:

Mikhail Sukhov

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


D_Alex
или откуда вообще вытаскивать Security?


ITrader.Securities, ITrader.NewSecurities. Как использовать показано в примерах.
Спасибо:

Mikhail Sukhov

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


D_Alex
А что означает "Превышен лимит по инструменту?"


Это лучше на сайте Квика поискать.
Спасибо:

a.dobryn

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


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

a.dobryn

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


все, поняла, при отправке заявки на продажу (и из примера тоже), вылезает эта ошибка. Оказывается, это возникает при недостатке ресурсов под заявку, то есть продавать нечего. А у Quik'а, как обычно, один ответ на все ошибки =)
Спасибо:

ttt

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


Использую S# выставляя ордер в Quik.
При создании ордеров явно указываю:
Comment = "мой коммент 123"
В Квике в таблице "Заявки" в поле "Комментарии" пишет "S#" для любого выставляемого ордера.
При проверке:
MessageBox.Show("комментарий="+ord.Comment);
оказывается, что поле Comment, создаваемого ордера, содержит значение "мой коммент 123".
В чем дело? Как сделать так, чтобы в Квике в таблице Заявки в поле "Комментарии" отражалось значение мой коммент 123"?
Автор топика
Спасибо:

Mikhail Sukhov

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


ttt Перейти
В чем дело? Как сделать так, чтобы в Квике в таблице Заявки в поле "Комментарии" отражалось значение мой коммент 123"?


Это вопрос из топ 10... Я передаю признак кода клиента как "S#", а не комментарий. Квик пишет, что комментарий некоторые брокеры используют для своих расчетов, поэтому его не выставить из кода. Напишите вопрос или брокеру или на форуме Квика.
Спасибо:

ttt

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


Каким образом установить код клиента?
//например, S#1
Автор топика
Спасибо:

Mikhail Sukhov

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


ttt Перейти
Каким образом установить код клиента?
//например, S#1


Код клиента
Спасибо:

a.dobryn

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


Михаил, снова вопросы от меня =)
Как определить, что начались новые торговые сутки?
Спасибо:

Alexander

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


D_Alex Перейти
Михаил, снова вопросы от меня =)
Как определить, что начались новые торговые сутки?


По DateTime.Date
Спасибо:

Valdis

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


подскажите , как получить значения активная покупка/ продажа и текущие чистые позиции для фьючерсов ФОРТС ?
Спасибо:

Alexander

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


Valdis Перейти
подскажите , как получить значения активная покупка/ продажа и текущие чистые позиции для фьючерсов ФОРТС ?


что такое активная покупка\продажа?
Если цена лучшей покупки\продажи в стакане, то Security.BestBid \ Security.BestAsk

Текущие чистые позиции - если по сделкам, совершённым в рамках стратегии, то берётся из PositionManager.Position
Если вообще, не учитывая в\вне стратегии - то Trader.GetPosition(Portfolio, Security)
Спасибо:

Valdis

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


Alexander Перейти
Valdis Перейти
подскажите , как получить значения активная покупка/ продажа и текущие чистые позиции для фьючерсов ФОРТС ?


что такое активная покупка\продажа?
Если цена лучшей покупки\продажи в стакане, то Security.BestBid \ Security.BestAsk

Текущие чистые позиции - если по сделкам, совершённым в рамках стратегии, то берётся из PositionManager.Position
Если вообще, не учитывая в\вне стратегии - то Trader.GetPosition(Portfolio, Security)

нет, это данные из таблицы позиции по деривативам ( DerivativePositionsTable )
т.е. колличество денег на счёте ММВБ и состояние портфеля мне понятно как отследить, а вот по бирже РТС -ФОРТС я не нашел таких же данных
активная покупка/продажа это колличество лотов по инструменту выставленных мной на биржу.
я так понимаю библиотека S# впервую очередь заточена для торговли акциями, а не фьючерсами.
т.е. напрямую, указанными вами способами не получить данных по счетам ФОРТС , их видимо надо как то считывать самому из экспортируемой таблицы DerivativePositionsTable , если я ошибаюсь , поправьте меня и подскажите тогда как вытащить данные из этой таблицы ?
Спасибо: Михаил

Alexander

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


Valdis Перейти
нет, это данные из таблицы позиции по деривативам ( DerivativePositionsTable )
т.е. колличество денег на счёте ММВБ и состояние портфеля мне понятно как отследить, а вот по бирже РТС -ФОРТС я не нашел таких же данных
активная покупка/продажа это колличество лотов по инструменту выставленных мной на биржу.
я так понимаю библиотека S# впервую очередь заточена для торговли акциями, а не фьючерсами.
т.е. напрямую, указанными вами способами не получить данных по счетам ФОРТС , их видимо надо как то считывать самому из экспортируемой таблицы DerivativePositionsTable , если я ошибаюсь , поправьте меня и подскажите тогда как вытащить данные из этой таблицы ?


1) Я торгую только на фортсе с помощью Stock# уже год. Он отлично заточен для торговли деривативами.
Trader.GetPosition(Portfolio, Security) возвращает ту позицию, которая соответствует данному портфелю для заданного инструмента.
А у вас он не возвращает для того же фьюча РТС позицию данным методом?

2) Суммируете оставшийся невыполненный объём в активных своих заявках.
Если заявка бай - то +n оставшихся контрактов, если селл - то -n.
Спасибо:

Valdis

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


Alexander
просто я подумал , раз есть уже экспортируемая изначально таблица
DerivativePositionsTable то можно как то из неё получать данные по текущим чистым позициям и активная покупка/ продажа.....но раз так нельзя будем пробовать ваш способ.
Благодарю за помощь
Спасибо:

MCTuTeJ|19951995

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


Насколько я понял, с помощью s# можно "выудить" любые данные из Квика. Попробуйте использовать CustomTables.
Спасибо:

Alexander

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


Valdis Перейти
Alexander
просто я подумал , раз есть уже экспортируемая изначально таблица
DerivativePositionsTable то можно как то из неё получать данные по текущим чистым позициям и активная покупка/ продажа.....но раз так нельзя будем пробовать ваш способ.
Благодарю за помощь


Не то чтобы нельзя - как раз любую таблицу можно получить, как уже ответили.
Просто так проще как я написал, без лишних заморочек. :)
Спасибо:

Valdis

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


снимал группу заявок по фильтру таким образом :
_Trader.CancelOrders(false, _portfolio, null, null, _security);
всё работало, но сегодня прямо в процессе работы вырубилось,
причем обычные ордера регистрируются , а снять группу заявок на фортс не получается.
ошибки не возвращает, причем в квике число полученных внешних транзакций при попытке снять ордера не меняется
из чего я делаю вывод что до квика вобще ни чего не доходит.
подскажите , в каком направлении копать ?

сам допетрил :)
я изначально _portfolio.Name = "11005";
задавал таким неверным способом . непонятно только почему это вначале работало а потом отключилось.
примеры из мануала рулят.
Михаилу респект за библиотеку !
Спасибо:

a.dobryn

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


а как лучше отслеживать заявки?
например, отсылается у меня заявка на продажу n лотов с ценой A. Через некоторое время произошла продажа n-2 лотов и мне нужно снять эту заявку и поставить новую, 2 лота по цене B. Искать их по таблице заявок с параметрами n и A? Или есть риск нарваться на другую, такую же?

upd: точнее, даже не так. Заявок может быть несколько, самых разных, но по их исполнению (даже частичному) надо их заменять. Как это организовать?
Спасибо:

Alexander

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


D_Alex Перейти
а как лучше отслеживать заявки?
например, отсылается у меня заявка на продажу n лотов с ценой A. Через некоторое время произошла продажа n-2 лотов и мне нужно снять эту заявку и поставить новую, 2 лота по цене B. Искать их по таблице заявок с параметрами n и A? Или есть риск нарваться на другую, такую же?

upd: точнее, даже не так. Заявок может быть несколько, самых разных, но по их исполнению (даже частичному) надо их заменять. Как это организовать?



событие NewMyTrades в данном случае как раз то что надо
Спасибо: a.dobryn

a.dobryn

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


Alexander Перейти
D_Alex Перейти
а как лучше отслеживать заявки?
например, отсылается у меня заявка на продажу n лотов с ценой A. Через некоторое время произошла продажа n-2 лотов и мне нужно снять эту заявку и поставить новую, 2 лота по цене B. Искать их по таблице заявок с параметрами n и A? Или есть риск нарваться на другую, такую же?

upd: точнее, даже не так. Заявок может быть несколько, самых разных, но по их исполнению (даже частичному) надо их заменять. Как это организовать?



событие NewMyTrades в данном случае как раз то что надо


спасибо!
а статус заявки меняется тогда, когда она исполнена целиком (например, куплено 5 лотов), или частично (куплен хотя бы 1 лот)?
Спасибо:

Alexander

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


D_Alex Перейти
Alexander Перейти
D_Alex Перейти
а как лучше отслеживать заявки?
например, отсылается у меня заявка на продажу n лотов с ценой A. Через некоторое время произошла продажа n-2 лотов и мне нужно снять эту заявку и поставить новую, 2 лота по цене B. Искать их по таблице заявок с параметрами n и A? Или есть риск нарваться на другую, такую же?

upd: точнее, даже не так. Заявок может быть несколько, самых разных, но по их исполнению (даже частичному) надо их заменять. Как это организовать?



событие NewMyTrades в данном случае как раз то что надо


спасибо!
а статус заявки меняется тогда, когда она исполнена целиком (например, куплено 5 лотов), или частично (куплен хотя бы 1 лот)?



Смотрите документацию, раздел Состояния заявок:
Цитата:
Если заявка исполняется частично, то вызываются события ITrader..::.NewMyTrades о новых сделках по выставленной заявке, а так же событие ITrader..::.OrdersChanged, где передается уведомление об изменении баланса по заявке Order..::.Balance

Спасибо:

Valdis

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


я что то не пойму , почему событие Trader.PositionsChanged
вызывается и при выставлении заявок и при исполнении их и даже просто, когда ни чего с позициями/заявками не происходит ?
причем в последнем случае это событие приходит с периодичностью примерно раз в минуту .
подскажите в чем может быть проблема ?
читал мануал но так и нашел точного определения - КОГДА НАДО ПОДПИСЫВАТЬСЯ на события
Trader.NewPositions
Trader.PositionsChanged
Trader.OrdersChanged
Trader.NewMyTrades
Trader.NewOrders

до коннекта с квиком Trader.Connect(); или после ?
или вобще без разницы ?
Спасибо:
< 1 2 3 4  > >>

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

loading
clippy