Cкальперский робо-привод - Glass (бета версия)

Cкальперский робо-привод - Glass (бета версия)
Atom
09.01.2011
denis


Привет всем форумчанам-скальперам.

Хочу поделиться своей собственной разработкой Glass. Понимаю, что сейчас пойдут ахи и вздохи, ну зачем еще один привод, но перед этим небольшая история о приводе и почему он не такой как другие.

Я сам скальпирую примерно 1.5 года. За это время перепробовал почти все известные приводы. В принципе, все они хорошо, но есть один недостаток - негибкие и нет полноценного авто-трейдинга. Сейчас скальпить с роботами затея бесперспективная (хотя бы посчитать сколько роботов было в TOP 20 ЛЧИ). Уходить полностью в роботы не планирую, многое еще зависит от моих глаз и понимания рынка. Поэтому я начал создавать свой привод, где можно совместить ручной трейдинг и скорость роботов. Сначала появился сам привод:



Затем я добавил возможность создания стратегий и запуск их в стакане:



Все, что видно на экране (расцветка, шрифт, форматирование), горячие клавиши и реакция на мышку - это все программируется во встроенном редакторе на C# (заморочки с программированием есть, но я старался их максимально спрятать, так что получилось очень просто). У всех свой уникальный стиль скальпинга, и нельзя его подстраивать под какую ни было программу. Если что-то не понравилось (нужно больше информации, или, наоборот, убрать лишнее), просто меняется код и стакан начинает работать по другому.

Есть еще много всяких плюшек как: одновременная работы с Quik и SmartCOM (привод получился кросс-платформенный), журнала сделок и заявок, экспорта в Excel и т.д..

Программа одновременно платная и бесплатная. Все, что относиться к приводу - бесплатно. Но можно использовать только одну стратегию, которую я придумал для себя. Если необходимо использовать свои наработки, то это уже за лицензию. Цену не ломлю, так как сам не из Москвы и понимаю тех, кто торгует их регионов. Но и чтобы штаны не спадали ;-). 200р в месяц, или купить сразу анлим.

Есть триал версия на полный режим в один месяц. Пока решил сделать бета тестирование. Всем, кто сильно "натестирует", вообще подарю пожизненную лицензию. Я не жадный. А еще хотел бы поработать вместе с теми, кто тоже интересуется автоматизированным скальпингом. Если есть идеи и желание запрограммировать + поделиться со всеми, пишите ответом или в личку. Можно совместно сделать самую продвинутую платформу для скальпинга ;-)

Glass написан с использованием S#. Так что, если кто-то захочет использовать привод как тестер для стратегий, чтобы потом их полностью перевести в автономный робот, то теоретически это можно сделать за несколько часов.



Спасибо:


<< < 2 3 4 5 6  > >>
dave

Фотография
Дата: 25.02.2011
Ответить


Привет, Denis и все все.
Надоело торговать руками, решил выбрать платформу для робота. Нашел сие гениальное творение.
В планах освоить простой стакан - потом купить робо-привод (если окажется что все работоспособно).

Работаю с квиком(пока). Добился появления стакана с позициями. Однако в лог постоянно валятся сообщения и похоже что я не могу выставить ни одной заявки. Подскажите, как побороть, пожалуйста!
Извиняюсь за много текста :(
1)Валится куча таких сообщений:
System.InvalidOperationException: Инструмент с кодом GZH1 для деривативной позиции не найден.
в Ecng.Trading.Quik.QuikTrader.#=qTre19CdRPyKpnVO8WaQdUkvQrIiCuIHe9XcW7RXbC04=.#=qAw6bx57W6lM8GTpXWPCckA==(IList`1 #=qw0QSyhxdA2ygktRIeaDpsw==, Func`2 #=qUaGr534rtCUVxUZdZlNE8Q==)
в Ecng.Trading.Quik.DdeTable.#=qZiwPb3v2t_oT0D7mrAAKDQ==(IList`1 #=qGZJOOyj9_11QAXVxoVAHJQ==, Action`2 #=qytkU$YIpb54LPXCs3YXrAA==, Action`1 #=qrtTaqcpDj5SIhcizQIpeJg==)System.InvalidOperationException: Инструмент с кодом LKH1 для деривативной позиции не найден.
в Ecng.Trading.Quik.QuikTrader.#=qTre19CdRPyKpnVO8WaQdUkvQrIiCuIHe9XcW7RXbC04=.#=qAw6bx57W6lM8GTpXWPCckA==(IList`1 #=qw0QSyhxdA2ygktRIeaDpsw==, Func`2 #=qUaGr534rtCUVxUZdZlNE8Q==)
в Ecng.Trading.Quik.DdeTable.#=qZiwPb3v2t_oT0D7mrAAKDQ==(IList`1 #=qGZJOOyj9_11QAXVxoVAHJQ==, Action`2 #=qytkU$YIpb54LPXCs3YXrAA==, Action`1 #=qrtTaqcpDj5SIhcizQIpeJg==)System.InvalidOperationException: Инструмент с кодом RNH1 для деривативной позиции не найден.
в Ecng.Trading.Quik.QuikTrader.#=qTre19CdRPyKpnVO8WaQdUkvQrIiCuIHe9XcW7RXbC04=.#=qAw6bx57W6lM8GTpXWPCckA==(IList`1 #=qw0QSyhxdA2ygktRIeaDpsw==, Func`2 #=qUaGr534rtCUVxUZdZlNE8Q==)
в Ecng.Trading.Quik.DdeTable.#=qZiwPb3v2t_oT0D7mrAAKDQ==(IList`1 #=qGZJOOyj9_11QAXVxoVAHJQ==, Action`2 #=qytkU$YIpb54LPXCs3YXrAA==, Action`1 #=qrtTaqcpDj5SIhcizQIpeJg==)

Что делать?? В квике попытаться отфильтровать ненужные бумаги или что?? Там походу тоже что то подглючивает - не все отфильтровывается.

2) в Ecng.Trading.Quik.QuikTrader.get_MarketTime()System.ArgumentException: Order с номером '3255563633' дублируется в полученном DDE пакете.
Имя параметра: item
в Ecng.Trading.Quik.QuikTrader.#=qrXt6ZY0xLmVmdP0T5lJC_d5XbQc9$1mdG9KjUUABw_I=[TItem,TId](Dictionary`2 #=qupHND92A8jMQ$oz4s_kFNMNse96Vux3ILEJwSnV17mM=, TItem #=qACR2QcA$$oDZWee5lopzzQ==, IList`1 #=qcqvS7KBzswDJgSgvN4YWvA==, TId #=qxVNxom2gYAKy0D4lAkO0Pg==)
в Ecng.Trading.Quik.QuikTrader.#=qTre19CdRPyKpnVO8WaQdUkvQrIiCuIHe9XcW7RXbC04=.#=q2n_L7L8$G_jh0GBx824oXw==(IList`1 #=qLqq11SNvAcYdahmiJZRJeA==, Func`2 #=qA9RaMemF0FK6cf5hebQNJQ==)
(это походу постоянная бага отображения заявок в Квике. Но я не знаю критична ли она для гласа - он ругнулся и пошел дальше или что то сбойнуло реально??)

3) Это тоже регулярная ошибка
System.Collections.Generic.KeyNotFoundException: Данный ключ отсутствует в словаре.
в System.ThrowHelper.ThrowKeyNotFoundException()
в System.Collections.Generic.Dictionary`2.get_Item(TKey key)
в Glass.GlassQuikTrader.<>c__DisplayClass2.<OnProcessUnknownDdeData>b__0(Portfolio p)
в System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
в Glass.GlassQuikTrader.OnProcessUnknownDdeData(String name, IList`1 rows)
в Ecng.Trading.Quik.QuikTrader.#=qTyEXCG5fxCLPQKsFuORupQ==(String #=qmp5_0wYMdoaIiCu_o72BFg==, IList`1 #=qGZJOOyj9_11QAXVxoVAHJQ==)
в Ecng.Common.DelegateHelper.SafeInvoke[T1,T2](Action`2 handler, T1 arg1, T2 arg2)
в #=q2hR5Ek620fAZiffD$Kf9WScub0dKyK3HruD9iJiZ2H3_IvEpwT1aL4$4nskNdoEy.#=qeU4ltJT_L2ZPLPjMKhXWHlhewCz1CrfBHVyNca252vI=.#=q3crMY5u7kzulRnQqfL8rKw==()
в Ecng.ComponentModel.EventDispatcher.<>c__DisplayClass1.<Add>b__0()
Спасибо:

denis

Фотография
Дата: 26.02.2011
Ответить


1) позиции по газу, луку, ри - есть? ну тогда нужно добавить эти тикеры в таблицу инструментов.
2) появляется когда выставляется ордер или когда? что делать чтобы повторить ошибку?
3) когда появляется? как повторить?
Спасибо:

dave

Фотография
Дата: 27.02.2011
Ответить


denis
1) позиции по газу, луку, ри - есть? ну тогда нужно добавить эти тикеры в таблицу инструментов.?

Есть. В понедельник добавлю, проверю. (я так понимаю только в раб. дни тестить получится.) Но кстати, все равно может вам не стоит пользователя заставлять все позиции добавлять? Я вообще через Glass собирался только индексом торговать.

denis
2) появляется когда выставляется ордер или когда? что делать чтобы повторить ошибку?

Ошибка появляется просто когда стакан запускаю. Вообще как я написал, могу предположить это из за того что ты не учел что в Квике в таблице заявок могут неверно заявки отображаться(например дублируются). У меня например такое часто бывало когда я в ту же торговую сессию торговал через WEBquik, может из за этого. В принципе не сильно мешало. Надо что бы ваше приложение от этого не "рушилось"

denis
3) когда появляется? как повторить?

Определю - сообщю. Для начала мне надо 1) убрать.

Спасибо
Спасибо:

denis

Фотография
Дата: 28.02.2011
Ответить


1) не позиции, а инструменты. добавить их легко.
2) не учел что заявки могут дублироваться. думал что эта сущность уникальна.
3) жду
Спасибо:

patch

Фотография
Дата: 28.02.2011
Ответить


Приветствую !
Установил Ваш привод и возникла такая проблемка - "Ошибка регистрации ордера" при попытках продать\купить. Подскажите - это может быть связано с тем что я торгую на Украинской бирже и коды классов у нас другие (GTS 4 spot & FUTUX 4 future) ?[blush]
Спасибо:

dave

Фотография
Дата: 28.02.2011
Ответить


denis
3) жду

Проверил - та ошибка(System.Collections.Generic.KeyNotFoundException: Данный ключ отсутствует в словаре.
...) появляется сразу после запуска Гласа, даже если ниче в стакане не кликать.

Еще пробовал выставлять заявку левым кликом в самый правый столбец результат - другая ошибка:
Код
Ошибка регистрации ордера System.Reflection.TargetInvocationException: Адресат вызова создал исключение. ---> System.ArgumentException: Транзакции 'ACCOUNT=9847g; CLIENT_CODE=S#; TRANS_ID=83250207; CLASSCODE=SPBFUT; SECCODE=RIH1; QUANTITY=1; OPERATION=S; TYPE=L; ACTION=NEW_ORDER; PRICE=196365;' не была зарегистрирована. Причина 'Вам запрещена работа по данному торговому счету'.
Имя параметра: transactionTxt
в #=qCzG06jA5pttFRr53_6g2gGTXqBvaHYS8TGbFa2nwhH0=.#=q304JTuTcHw511pPvyFcIAosKVGnSfnAX0ktZjW5YBs0=(String #=qo9hczXr4ZAfLDcETgSwzwA==, OrderStatus& #=qNnaFmXy$1KhKV9wazFxrcw==, UInt32& #=qN3HdqREy3X11sBA8RsQBIQ==, Int64& #=qUCvWky4AlQ87BxYhTcL7xA==, String& #=qRrFtKPhpm4fCtblEbf7dSA==)
в Ecng.Trading.Quik.QuikTrader.#=qDN8Jgv78NY1KqyESakCnnGSmWTZ6IVqiK4F7nGep0XI=(Order #=q17zLtNU0PdgxzOwvds5Ahw==, TransactionBuilder #=q9hD6GoEsg3Ujhb4IYYgPiA==)
в Ecng.Trading.Quik.QuikTrader.OnRegisterOrder(Order order)
в Ecng.Trading.Algo.BaseTrader.RegisterOrder(Order order)
в Ecng.Trading.Algo.MultiTrader.RegisterOrder(Order order)
в Ecng.Trading.Algo.Strategies.Strategy.RegisterOrder(Order order)
в Glass.Core.GlassStrategy.SellAtLimit(Double price)
в Glass.DefaultStrategy.OnSellLeftClick(IGlassQuote quote)
в Glass.Core.GlassStrategy.OnMouseLeftClick(MarketDepthColumns column, IGlassQuote quote)
в Glass.MarketDepthWindow.MarketDepthWindowActionList.<>c__DisplayClass1c.<TryInvokeMouse>b__1b(MarketDepthWindowAction a)
в Ecng.Collections.CollectionHelper.ForEach[T](IEnumerable`1 source, Action`1 action)
в Glass.MarketDepthWindow.MarketDepthWindowActionList.TryInvokeMouse(MarketDepthColumns column, MouseAction action, ModifierKeys modifierKey)
в Glass.MarketDepthWindow.OnCellMouseUp(Object sender, GridCellMouseControllerEventArgs e)
--- Конец трассировки внутреннего стека исключений ---
в System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
в System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
в System.Delegate.DynamicInvokeImpl(Object[] args)
в System.Windows.RoutedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
в System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
в System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
в System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
в System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
в Syncfusion.Windows.Controls.Grid.GridControlBase.OnCellMouseUp(GridCellMouseControllerEventArgs args)
в Syncfusion.Windows.Controls.Grid.GridControlBase.RaiseCellMouseUp(MouseControllerEventArgs e)
в Syncfusion.Windows.Controls.Grid.GridSelectCellsMouseController.MouseUp(MouseControllerEventArgs e)
в Syncfusion.Windows.Controls.Scroll.MouseControllerDispatcher.MouseUp(MouseEventArgs e, Boolean isPreview)
в Syncfusion.Windows.Controls.Scroll.MouseControllerDispatcher.OnPreviewMouseUp(MouseButtonEventArgs e)
в Syncfusion.Windows.Controls.Scroll.MouseEventTargetCollection.OnPreviewMouseUp(MouseButtonEventArgs e)
в Syncfusion.Windows.Controls.Scroll.ScrollControl.OnPreviewMouseUp(MouseButtonEventArgs e)
в System.Windows.UIElement.OnPreviewMouseUpThunk(Object sender, MouseButtonEventArgs e)
в System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
в System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
в System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
в System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
в System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
в System.Windows.Input.InputManager.ProcessStagingArea()
в System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
в System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
в System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
в System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
в System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)

Спасибо!

PS: Я конечно и сам чайник, но все же количество ошибок реально отпугивает от продукта.
Спасибо:

denis

Фотография
Дата: 02.03.2011
Ответить


patch
Приветствую !
Установил Ваш привод и возникла такая проблемка - "Ошибка регистрации ордера" при попытках продать\купить. Подскажите - это может быть связано с тем что я торгую на Украинской бирже и коды классов у нас другие (GTS 4 spot & FUTUX 4 future) ?[blush]

такая ошибка часто бывает из-за неверного торгового счета. Точнее можно сказать после того как Вы покажете лог ошибки.
Спасибо:

denis

Фотография
Дата: 02.03.2011
Ответить


to dave:
Транзакции 'ACCOUNT=9847g; CLIENT_CODE=S#; TRANS_ID=83250207; CLASSCODE=SPBFUT; SECCODE=RIH1; QUANTITY=1; OPERATION=S; TYPE=L; ACTION=NEW_ORDER; PRICE=196365;' не была зарегистрирована. Причина 'Вам запрещена работа по данному торговому счету'.

т.е. получается что аккаунт указан ММВБ-шный, а инструмент риха, непорядок. Надо на ммвбшном счету торговать ммвб, а на фортовском фортс. Банально, но факт.

Теперь по багу номер три: да, таки баг. Сейчас залью апдейт.
Спасибо:

denis

Фотография
Дата: 03.03.2011
Ответить


залил, сообщите о результатах.
Спасибо:

dave

Фотография
Дата: 03.03.2011
Ответить


Ошибка 3 исправлена. Спасибо.
Вообще, щас у меня что то уже работает. Заявки выставляются, снимаются.

Однако попробовал подключиться теперь к Quik junior. Получил ошибку при тесте\добавлении подключения. http://ifolder.ru/22225294
Врядли, но может окно не настроил - ночю буду проверять.
Спасибо:
<< < 2 3 4 5 6  > >>

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

loading
clippy