← Назад

Stock# 2.0

http://stockmarketdotnet.blogspot.com/2010/05/stock-20.html

Комментарии (24)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Alexander
Alexander

При попытке создать QuikTrader с добавленным ранее путём возникает эксепшен ArgumentException:

который невозможно отловить. Возникает он внутри конструктора QuikTrader, try\catch не помогают.

Mikhail Sukhov
Mikhail Sukhov Автор

Предыдущий QuikTrader надо очищать - trader.Dispose().

Alexander
Alexander

Это возникает при добавлении их в MultiTrader через Trader.AggregatedTraders.Add. Для меня некритично проверять пути самому, но хотелось бы чтобы такое исключение отлавливалось внутри конструктора QuikTrader.

p.s. я похоже ошибся - там ключом ведь является аккаунт квика, так что дело в совпадающих аккаунтах.

И попутно ещё вопрос - как быть с разными субсчетами в одном квике? Необходимо создавать несколько QuikTrader с одинаковыми путями и разными аккаунтами или есть способ получше посылать заявки на биржу?

Mikhail Sukhov
Mikhail Sukhov Автор

Субсчет - это значит один квик и разные счета в заявках. Следовательно, один QuikTrader, который подсовывается в AggregatedTraders под разными ключами-субсчетами.

Alexander
Alexander

с этим спасибо, буду так делать.

а всё же неотлавлимое исключение внутри конструктора QuikTrader (с добавлением одинаковых ключей) можно исправить в новой бете 2.0?

Mikhail Sukhov
Mikhail Sukhov Автор

А можно сюда вставить полный текст ошибки (стек-трейс)?

Alexander
Alexander

вот что удалось выцепить из интеллитрэйс (я в vs2010 работаю) -

A System.ArgumentException was thrown: "An item with the same key has already been added." Thread: Dde thread [2476]

Вот информация по исключению:

Message=An item with the same key has already been added. Source=System.Windows.Forms StackTrace: at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args) at NDde.Advanced.DdeContext.DdeThread.Invoke(Delegate method, Object[] args) at NDde.Advanced.DdeContext.Invoke(Delegate method, Object[] args) at NDde.Advanced.DdeContext.Invoke(ThreadStart method) at NDde.Server.DdeServer.Register() at . . () at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException:

Собственно и перехватить никак не удаётся.

Mikhail Sukhov
Mikhail Sukhov Автор

Тоесть, try catch на new QuikTrader не помогает?

Alexander
Alexander

да, совершенно верно, не помогает. в этом-то и проблема. т.е. тут выхода 2 - либо ручками проверять всё что добавляю на уже наличие уже добавленного элемента с таким ключом, либо - ловить это исключение внутри S# и выкидывать исключение, которое уже я смогу отловить (вроде это возможно). С точки зрения архитектуры, на мой взгляд, второй вариант предпочтительней.

Mikhail Sukhov
Mikhail Sukhov Автор

Ага, не увидел. Действительно, дде работает в другом потоке. Перехватить через try/catch не получится. Подумаю, как исправить ошибку.

skzuev
skzuev

Добрый день,

Еще раз выражаю автору респект и глубокое уважение за проект :).

Хотелось бы узнать - каковы дальнейшие планы по развитию библиотеки?

Сергей.

Mikhail Sukhov
Mikhail Sukhov Автор

Выпустить релиз 2.0 =)

Библиотека, в своей функциональности, развивается стихийно. Появилась потребность - добавляется новая фича.

Глобально - покрыть еще Алор и Альфу. Думаю, на этом с терминалами можно остановиться. Все остальное - "не ликвид".

Alexander
Alexander

У свойства Security.MinPrice неправильное описание - должно быть "Нижний лимит цены." вместо верхнего лимита цены. =)

Alexander
Alexander

И будет здорово, если время работы биржи можно будет задавать самому - сейчас, к примеру, прописано в библиотеке что РТС начинает торги в 10.30

skzuev
skzuev

А западные рынки/брокеры?

С уважением, Сергей Зуев

Mikhail Sukhov
Mikhail Sukhov Автор
  1. Спасибо, описание поправил.
  2. Хм, а для чего такое нужно? Давайте обсудим, может есть и более правильный вариант, чем менять время реальной биржи.
Mikhail Sukhov
Mikhail Sukhov Автор

Да хотя бы с нашими совладать. Ведь что не продукт, то куда ограничений и информации, что именно так должно быть, и никак иначе.

А что, есть какое-то особое видение западного рынка (+предложение)?

Alexander
Alexander
  1. К примеру, я это свойство использую в 2х местах - для менеджера, отслеживающего разрывы соединений, и для проверки, входит ли время N в торговое время. Сейчас биржа РТС изменила открытие на 10.00, в библиотеке оно стоит в 10.30, т.е. сейчас эти проверки в 10.00-10.29 работают неверно, приходится вставлять дополнительные проверки. Вот этого хочется избежать в случае если биржа надумает ещё раз изменить время начала торгов. Т.е. можно тоже какой-то setter\getter сделать, с заданными по умолчанию значениями.
Mikhail Sukhov
Mikhail Sukhov Автор

Хм, логично. Хорошо, посмотрю, как сделать лучше изменение настроек биржи. По идее, надо бы заводить свой собственные, потому что РТС - это скорее абстрактная биржа, чем реальная. Потому что для S# главное рынок - Срочный, Стандарт.

Alexander
Alexander

Ещё вопрос - как-нибудь можно получить время начала торгов? К примеру, меня интересует первая свечка за сегодняшний день. Сейчас я завожу элемент класса DateTime и иницилизирую поля сегодняшним годом \месяцем\днём, а в поле час\минута\секунда вбиваю то, что мне надо (10,0,0). Как раз помимо самого диапазона торгов в WorkingTime было бы здорово сделать получения Начала\Конца торгов из них. =)

Mikhail Sukhov
Mikhail Sukhov Автор

Это можно и без функций S#:

var dateTime = DateTime.Today + exchange.WorkingTime.First().Min;

Alexander
Alexander

Спасибо за решение, теперь ждём новой версии с возможностью изменения начала торгов или с правильным началом торгов РТС =)

Alexander
Alexander

Не хочется создавать новую тему, спрошу здесь, почему в примере стратегии по SMA в методе OnRunning() вызывается base.OnRunned() а не base.OnRunning()? Ведь по идее, состояние ещё не изменилось...

Mikhail Sukhov
Mikhail Sukhov Автор

Все правильно. Спасибо - поправил. Теперь уже в двух примера - и под Смарт.