Algorithmischer Handel für .NET und Python✦86+ Konnektoren · Börsen · Broker · Krypto✦S#.Designer · Backtest · optimieren · live gehen✦Eine Community von 31,455+ Tradern und Entwicklern✦Algorithmischer Handel für .NET und Python✦86+ Konnektoren · Börsen · Broker · Krypto✦S#.Designer · Backtest · optimieren · live gehen✦Eine Community von 31,455+ Tradern und Entwicklern✦
Это возникает при добавлении их в MultiTrader через
Trader.AggregatedTraders.Add.
Для меня некритично проверять пути самому, но хотелось бы чтобы такое
исключение отлавливалось внутри конструктора QuikTrader.
p.s. я похоже ошибся - там ключом ведь является аккаунт квика, так что
дело в совпадающих аккаунтах.
И попутно ещё вопрос - как быть с разными субсчетами в одном квике?
Необходимо создавать несколько QuikTrader с одинаковыми путями и
разными аккаунтами или есть способ получше посылать заявки на биржу?
Субсчет - это значит один квик и разные счета в заявках.
Следовательно, один QuikTrader, который подсовывается в
AggregatedTraders под разными ключами-субсчетами.
вот что удалось выцепить из интеллитрэйс (я в 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:
да, совершенно верно, не помогает. в этом-то и проблема.
т.е. тут выхода 2 - либо ручками проверять всё что добавляю на уже
наличие уже добавленного элемента с таким ключом, либо - ловить это
исключение внутри S# и выкидывать исключение, которое уже я смогу
отловить (вроде это возможно).
С точки зрения архитектуры, на мой взгляд, второй вариант
предпочтительней.
К примеру, я это свойство использую в 2х местах - для менеджера,
отслеживающего разрывы соединений, и для проверки, входит ли время N в
торговое время.
Сейчас биржа РТС изменила открытие на 10.00, в библиотеке оно стоит в
10.30, т.е. сейчас эти проверки в 10.00-10.29 работают неверно,
приходится вставлять дополнительные проверки. Вот этого хочется
избежать в случае если биржа надумает ещё раз изменить время начала
торгов.
Т.е. можно тоже какой-то setter\getter сделать, с заданными по
умолчанию значениями.
Хм, логично. Хорошо, посмотрю, как сделать лучше изменение настроек
биржи. По идее, надо бы заводить свой собственные, потому что РТС -
это скорее абстрактная биржа, чем реальная. Потому что для S# главное
рынок - Срочный, Стандарт.
Ещё вопрос - как-нибудь можно получить время начала торгов?
К примеру, меня интересует первая свечка за сегодняшний день. Сейчас я
завожу элемент класса DateTime и иницилизирую поля сегодняшним годом
\месяцем\днём, а в поле час\минута\секунда вбиваю то, что мне надо
(10,0,0).
Как раз помимо самого диапазона торгов в WorkingTime было бы здорово
сделать получения Начала\Конца торгов из них. =)
Не хочется создавать новую тему, спрошу здесь, почему в примере
стратегии по SMA в методе OnRunning() вызывается base.OnRunned() а не
base.OnRunning()? Ведь по идее, состояние ещё не изменилось...
Все правильно. Спасибо - поправил. Теперь уже в двух примера - и под
Смарт.
Wir verwenden Cookies, um die beste Erfahrung auf unserer Website zu gewährleisten. Durch die weitere Nutzung unserer Seite stimmen Sie der Verwendung von Cookies zu.
Kommentare (24)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
При попытке создать QuikTrader с добавленным ранее путём возникает эксепшен ArgumentException:
который невозможно отловить. Возникает он внутри конструктора QuikTrader, try\catch не помогают.
Предыдущий QuikTrader надо очищать - trader.Dispose().
Это возникает при добавлении их в MultiTrader через Trader.AggregatedTraders.Add. Для меня некритично проверять пути самому, но хотелось бы чтобы такое исключение отлавливалось внутри конструктора QuikTrader.
p.s. я похоже ошибся - там ключом ведь является аккаунт квика, так что дело в совпадающих аккаунтах.
И попутно ещё вопрос - как быть с разными субсчетами в одном квике? Необходимо создавать несколько QuikTrader с одинаковыми путями и разными аккаунтами или есть способ получше посылать заявки на биржу?
Субсчет - это значит один квик и разные счета в заявках. Следовательно, один QuikTrader, который подсовывается в AggregatedTraders под разными ключами-субсчетами.
с этим спасибо, буду так делать.
а всё же неотлавлимое исключение внутри конструктора QuikTrader (с добавлением одинаковых ключей) можно исправить в новой бете 2.0?
А можно сюда вставить полный текст ошибки (стек-трейс)?
вот что удалось выцепить из интеллитрэйс (я в 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:
Собственно и перехватить никак не удаётся.
Тоесть, try catch на new QuikTrader не помогает?
да, совершенно верно, не помогает. в этом-то и проблема. т.е. тут выхода 2 - либо ручками проверять всё что добавляю на уже наличие уже добавленного элемента с таким ключом, либо - ловить это исключение внутри S# и выкидывать исключение, которое уже я смогу отловить (вроде это возможно). С точки зрения архитектуры, на мой взгляд, второй вариант предпочтительней.
Ага, не увидел. Действительно, дде работает в другом потоке. Перехватить через try/catch не получится. Подумаю, как исправить ошибку.
Добрый день,
Еще раз выражаю автору респект и глубокое уважение за проект :).
Хотелось бы узнать - каковы дальнейшие планы по развитию библиотеки?
Сергей.
Выпустить релиз 2.0 =)
Библиотека, в своей функциональности, развивается стихийно. Появилась потребность - добавляется новая фича.
Глобально - покрыть еще Алор и Альфу. Думаю, на этом с терминалами можно остановиться. Все остальное - "не ликвид".
У свойства Security.MinPrice неправильное описание - должно быть "Нижний лимит цены." вместо верхнего лимита цены. =)
И будет здорово, если время работы биржи можно будет задавать самому - сейчас, к примеру, прописано в библиотеке что РТС начинает торги в 10.30
А западные рынки/брокеры?
С уважением, Сергей Зуев
Да хотя бы с нашими совладать. Ведь что не продукт, то куда ограничений и информации, что именно так должно быть, и никак иначе.
А что, есть какое-то особое видение западного рынка (+предложение)?
Хм, логично. Хорошо, посмотрю, как сделать лучше изменение настроек биржи. По идее, надо бы заводить свой собственные, потому что РТС - это скорее абстрактная биржа, чем реальная. Потому что для S# главное рынок - Срочный, Стандарт.
Ещё вопрос - как-нибудь можно получить время начала торгов? К примеру, меня интересует первая свечка за сегодняшний день. Сейчас я завожу элемент класса DateTime и иницилизирую поля сегодняшним годом \месяцем\днём, а в поле час\минута\секунда вбиваю то, что мне надо (10,0,0). Как раз помимо самого диапазона торгов в WorkingTime было бы здорово сделать получения Начала\Конца торгов из них. =)
Это можно и без функций S#:
var dateTime = DateTime.Today + exchange.WorkingTime.First().Min;
Спасибо за решение, теперь ждём новой версии с возможностью изменения начала торгов или с правильным началом торгов РТС =)
Не хочется создавать новую тему, спрошу здесь, почему в примере стратегии по SMA в методе OnRunning() вызывается base.OnRunned() а не base.OnRunning()? Ведь по идее, состояние ещё не изменилось...
Все правильно. Спасибо - поправил. Теперь уже в двух примера - и под Смарт.