← 戻る

Stock# + SmartCom для чайников, первый опыт

думаю это поможет начинающим сделать первые шаги в освоении ..... Респект автору за создание данной библиотеки, но уровень ее далек для понимания начинающими... сам когда то неплохо писал на процедурных языках, но тут совсем другое...несколько месяцев изучал С#, создавал структуру классов, когда увидел Stock#.... Зачем изобретать то, что уже сделано? Оказалось не тут то было...) Решил попробовать и что из этого вышло: У меня хороший комп (4 ядра 2.83ГГц и 8 Гиг памяти), Windows 7 x 64

  • .NET FW 4 + VS 2010 Express... установил SmarCom 2 и протестил его на примерах из ветки АйТи (у меня там реальный счет) работает.... Поставил проект S# 2.4 и начал пробовать:
  1. Ни один из проектов не захотел работать, пока не поставил ручками ссылку на Смартком и не добавил using StClientLib; Может у меня смартком не тот или установлен не там, но нигде инфы об этом я не нашел. Да и как я понял 99% инфы под Квик....
  2. запустил консольное решение и порадовался - заработало...))
  3. поменял эмитента на RIU0, и опять не пошло.... пока не поменял SecurityTypes.Equity на SecurityTypes.Future.... мелочи конечно, но новичков вышибает из колеи... Буду пробовать другие решения и комментировать их....

このトピックは参考になりましたか?

トピックを共有

コメント (31)

ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください

Craft
Craft

Спасибо, Valery, хорошее начинание.

Valery
Valery 著者

SampleSmart

Подключение произошло успешно, но ...

  1.  При нажатии экспорт пришлось значительное время подождать, пока
    

кнопка не стала красной... как я понимаю это означает, что можно работать дальше. Или нет? 2. Кликнув на Инструменты открылось окно , где выбрал фьючи , РТС и конкретный РИУ 3. Дальнейшие действия ничего не дали кроме исключений.... 4. Портфель и другие окна были пустые ... будем копать в коде... 5. Попытка отключиться ничего не дала ... пришлось прерывать принудительно... 6. Анализ кода привел к выводам, что кода в остальных окнах просто нет - просто вывод окна и все....

Хотелось бы знать, кто еще тестил это решение? Может у меня что не так ? Или это просто пример недописан? Если так ( я понимаю, что автор и так загружен), то хотя бы можно написать, что примеры не проверены...

Попробуем следующее решение....

Valery
Valery 著者

SampleSmartCandles

Так же подключился, кликнул Экспорт и .... Жду... сколько ждать, непонятно правда.... Периодически пытаюсь посмотреть Инструмент.... Кстати кнопка Подключиться стала недоступной (серой) . Полагаю Экспорт закончится, когда эта кнопка вновь станет доступной.... Что происходит во время экспорта непонятно? ... дебаггер тоже молчит, не ругается....

Думаю не один я это делал, но почему то никто не комментирует .... Типа пусть другие сами понаступают на грабли... Короче надо разбираться....

Mikhail Sukhov
Mikhail Sukhov

Демо подключение или реальное? "Ни один из проектов не захотел работать, " в чем именно выражалось? В выскакивающей ошибке, в падении примера или просто не реагировании примера на пользовательские действия?

Valery
Valery 著者

Еще раз о SampleSmart

При выборе Лукойл на Мамбе все работает в окне инструменты. При возврате на РИУ заявки выходят и даже видно номера счетов.... Но при вызове стакана получаем Невозможно вычислить выражение, поскольку текущий поток находится в состоянии переполнения стека.} В строке this.Trader.ProcessDataError += error => this.GuiAsync(() => MessageBox.Show(this, error.ToString(), "Ошибка обработки данных"));

Попробуем снова... создадим пару заявок в портфеле..... после этого портфель стал виден в окне Портфель... чудно однако... но в окнах заявок так ничего и не видно...

Да еще момент... кнопка Экспорт отрабатывается достаточно долго... Обычно Смарт также тормозит, когда обновляются справочники... тут похоже то же самое. Только в Смарте это происходит один раз после установки, а тут при каждом запуске... не айс, но наверняка есть способ это победить...

Вернемся снова к мамбе . Выбрали сбер. Стакан открывается без проблем, правда вверх ногами, но это поправимо...)) Ну тут при создание заявки создается исключение и подвешивает прогу намертво.... Повторный запуск отказал в заявке - мало средств, но это уже правильно.... Но в окне Портфель пусто, хотя на фортсе есть поза.... Кнопка Бид-Оффер не работает, но полагаю в выхи это нормально.. Ладно, будем считать, что это решение тест прошло.. можно доработать ....

Valery
Valery 著者

И на десерт SampleSmartSMA

Попытка подключиться вызвала сразу исключение... Подозреваю, что связано с новой версией Смарткома.. В диспетчере задач висит процесс, который я никак не могу завершить.... Vshost32-dr2.exe

Завтра попробую со старой....

Mikhail Sukhov
Mikhail Sukhov

Непобедимый эффект WPF. Проге не виснет, просто окно с ошибкой - модальное, и уходит на другой план. Приходится на Alt+Tab нажимать.

Судя по продвижению, все таки примеры заработали? Если да, то мой первый вопрос насчет "Ни один из проектов не захотел работать, пока не поставил ручками ссылку на Смартком и не добавил using StClientLib; " В чем это выражалось? Проекты не компилировались? Компилировалось, но возникала ошибка при запуске? Или все запускалось но не реагировало на пользовательский ввод.

Mikhail Sukhov
Mikhail Sukhov

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

Valery
Valery 著者

я хоть и не программист, но стараюсь писать четко...)) Именно не заработали... при запуске реакция на кнопки =0....))) так как все же по поводу ссылки - ее нужно добавлять? у меня на ноуте стоял старый смартком по стандартному пути....с ним работало без добавления....при переустановке Смарткома все работать перестало.... я заметил, что изменился путь установки Смарткома... в связи с чем я хотел бы уточнить, как библиотека находит Смартком? А она его находит... По пути инсталяции? :)

Mikhail Sukhov
Mikhail Sukhov

Лучше просто текст ошибки. Ctrl+C - если запущено не под Debug (как обычное exe). Или из студии, при наведении на иконку ошибки.

А на какую версию переставили? Та, которая сейчас бета - 2.0? Или на 1.1.6.2

Библиотека ее не находит. Смарком сам приходит =) Это такая особенность COM технологии. Через реестр пути указаны.

Valery
Valery 著者

И снова SampleSmartSMA

Запустил этот проект на своем старом ноуте с ХР, VS2010 + FW 3.5 + Smartcom 1162 Забавные ребята из АйТи - новая версия Смарткома ставится по новому пути ... сразу не заметишь.... Кстати Путь установки могли бы и упростить, а то сначала ставили в папку <<JSC IC IT Invest>>, а потом в <<IC IT Invest>>.... Не сразу и заметишь разницу... Хвала создателю, то бишь автору проекта... выглядит неплохо... правда свечки грузились несколько минут, думаю тормозит расчетная часть (на ноуте простой Пень 2Ггц), т.к. нагрузка на проц была почти под завязку, а сетка не была перегружена... но проверю еще разок после Повторная попытка запуска сразу меня обломила... сначала мне сказали, что неверный логин или пароль(что не может быть, т.к. они забиты в прогу до компиляции... Потом при повторном клике на Подключиться получил вот это: _trader.Connect();

Исключение из HRESULT: 0x800706BE А потом на пол экрана портянка вылезла со списком проблем... скопировать не смог...

Залез в диспетчер задач и нашел процесс, который завершается только при закрытии VS .... Т.е. у меня было запущено 2 копии одновременно... Буду проверять на будущее...

Кстати кнопка Подключиться работала только на подключение... отключаться она не пожелала.... В связи с чем и была проблема Оказалось не совсем в этом... Айти опять отключил серверы может поэтому и проблема с отключением была.... Не порадовала реакция программы на это... Такое и во время сессии бывает частенько....Хотя как я полагаю, прога видать пыталась восстановить связь, как нибудь надо проверить Еще одно маленькое замечание для автора: При смене таймфрейма не всегда выполняется масштабирование - не сразу вьехал, где копать на графике... но это мелочь.... PS. Не все исключения удается копировать, т.к. они не все копируются....разве что скрин делать...

Valery
Valery 著者

буду стараться...

самое смешное что одну и ту же...1162 просто скачал с сайта и поставил заново ... а пути установки изменились...))

тогда непонятно, почему если я не пропишу ссылку и не добавлю using, то прога Смартком не видит? Кстати, как я читал, в Смарттрейде вроде встроен СмартКом ... при переустановке Смарттрейда иногда начинает глючить Смартком... но не всегда...

Mikhail Sukhov
Mikhail Sukhov

Свечечный компонент взят отсюдаhttp://wpf.amcharts.com/. Версия не последняя, так что есть вероятность того, что производительность поднята.

В проге после подключение прописан код очищения поля с паролем. Это учтено?

Тоесть, один раз нажали на подключиться, затем второй раз? Между этими кликами прогу перезапускали?

vshost? Это специальный процесс, он автоматически создается студией.

Все может быть. Пример - он ведь не идеален =)

Должен начать работать ReConnectionManager. Он смотри на два события. Во первых, что СмартКом живой. Это можно протестить, убив его процесс. Второе - что течет экспорт (СмартКмо может быть и жив, но при этом сам потерять соединение). Нужно вызывать метод SetExportTimeOut. Тогда будет мониториться входящий трафик. Как долго нет известий - перезапуск СмартКом.

Valery
Valery 著者

SmartCom v.2 - несовместимость с SampleSmartSMA

Попробовал заменить сабж v.1.1.6.2 на новую бету версию 2 Сразу получил ошибку в проекте ... похоже изменены методы получения баров...и еще (см. аттач) Проект со свечками не ругается , но и ни чего не делает... После Подключитсяничего не происходит... кнопка становится серой, Экспорт ни к чему не приводит... проц не грузится... точнее наблюдается кратковременная загрузка проца и чуток сетевого трафика... Комбобар Инструмент остается пустым...

Завтра верну на старую версию и попробую на Вин 7

Valery
Valery 著者

Забыл вложить аттач... блин, а как его добавить то сюда?

Valery
Valery 著者

понял, не учел ... спасибо

я имел в виду сам проект...

А для него нужно снова пароль? Он ведь очищается...

Он смотри на два события.

А если брокер не пускает на сервер? т.е. сервер пингуется, а ответа нет...

Valery
Valery 著者

Аттач SmComEX.JPG в разделе файлы... как его сюда присобачить не знаю...

Mikhail Sukhov
Mikhail Sukhov

Понятно. Видимо Вы используете параллельно S# и ссылку на новый СмартКОМ. Так не прокатит. Нужно или то или другое. Потому что метаданные в сборках несовместимы.

Valery
Valery 著者

Конечно параллельно, а как иначе то? Если я не добавляю ссылку, то S# просто не находит СмартКом... новый он или старый.... только совсем старый находил... и вообще как запретить S# искать Смартком или указать на новый СмартКом без добавления ссылки?

Mikhail Sukhov
Mikhail Sukhov

У Вас какой версии сейчас установлен СмартКОМ? 2.0?

Valery
Valery 著者

вернулся на старую версию 1162(пока смысла нет без поддержки S#), но его тоже не находит... приходится ручками ссылку добавлять...

Mikhail Sukhov
Mikhail Sukhov

У меня путь к СмартКом такой - "C:\Program Files (x86)\IC IT Invest \SmartCOM 2" У Вас такой же?

toyan
toyan

Помогите начинающему... Если я правильно понимаю, в этом выражении

this.Trader.ProcessDataError += error => this.GuiAsync(() =>
MessageBox.Show(this, error.ToString(), "Ошибка обработки данных"));

объединены сразу несколько действий.

Нельзя ли его для примера расписать в несколько строк, снабдив их комментариями, желательно без использования делегатов и лямбда-выражений. Спасибо.

Mikhail Sukhov
Mikhail Sukhov

toyan: ... объединены сразу несколько действий.

  1. Подписываемся на событие ProcessDataError.
  2. Его обработчик синхронизует вывод ошибки с GUI потоком.
  3. После синхронизации появляется MessageBox

toyan: Нельзя ли его для примера расписать в несколько строк, снабдив их комментариями, желательно без использования делегатов и лямбда-выражений. Спасибо.

Я пишу доку только по созданию роботов на C#. По самому языку C# я объем не осилю. Язык популярный. Информации бесплатной и на русском - море. Читай - не хочу. Могу посоветовать форумы rsdn.ru и gotdotnet.ru, где тамошние корефеи с легкостью Вам объяснят, как пользоваться языком.

TH_one
TH_one

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

Ошибка обработки данных

System.Runtime.InteropServices.COMException (0x80004005): В результате вызова компонента COM возвращена ошибка в формате HRESULT E_FAIL. в StClientLib.StServerClass.ListenTicks(String symbol)
в Ecng.Trading.Smart.SmartComWrapper.<>c__DisplayClass5d.<RegisterTrades>b__5c(StServer server)
в Ecng.Trading.Smart.SmartComWrapper.Do(Action1 action) в Ecng.Trading.Smart.SmartComWrapper.RegisterTrades(Security security) в Ecng.Trading.Smart.SmartTrader.RegisterTrades(Security security) в Ecng.Collections.CollectionHelper.ForEach(IEnumerable1 source, Action1 action) в SampleSmartCandles.MainWindow.<Connect_Click>b__10(IEnumerable1 securities) в C:\Users\TH_one\Documents\Visual Studio 2008\Projects\StockSharp_2.6.2\Sources\SampleSmartCandles\MainWindow.xaml.cs:строка 84
в Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) в Ecng.Trading.Algo.BaseTrader.#=qG1PeR6$x3ss8SKTcZRPx7YO2u9Ws0wOPD$7oJ4bnZ1c=.#=q8spuXbKfmTxQpmv$3l7AkQ==(IEnumerable1 #=qOgckecuuB1zZO9JVCQwkIQ==)

Через несколько секунд, таких ошибок выпадает целый веер и они продолжают выпадать. При этом пример SampleSmartConsole работает нормально. Не могу ничего понять. SmartCOM 2.0, Win7.

Mikhail Sukhov
Mikhail Sukhov

TH_one: Скачал StockSharp 2.6.2.

В S# 3.0 смотрели тот же пример?

TH_one
TH_one

Посмотрел. Получается точно так же:


Ошибка обработки данных

System.Runtime.InteropServices.COMException (0x80004005): В результате вызова компонента COM возвращена ошибка в формате HRESULT E_FAIL.
в StClientLib.StServerClass.ListenTicks(String symbol)
в Ecng.Trading.Smart.SmartComWrapper.#=qzOhOrOml2PAgCG7rTCjWFaXI399INYZlVBVicdKHZxI=.#=qPZhWQWobmRxwWDuTixn1XVpU8Up$Mh5H24JVzDpvuA8=(StServer #=qJsly6K3VmZ_7IUgAXDwOsw==)
в Ecng.Trading.Smart.SmartComWrapper.#=qum0zEdttrRQfO1KlDO3NQw==(Action1 #=q36EXl8DghQyD$7JPPLnWGQ==) в Ecng.Trading.Smart.SmartComWrapper.RegisterTrades(String securityId) в Ecng.Trading.Smart.SmartTrader.RegisterTrades(Security security) в Ecng.Collections.CollectionHelper.ForEach(IEnumerable1 source, Action1 action) в SampleSmartCandles.MainWindow.<Connect_Click>b__10(IEnumerable1 securities) в E:\StockSharpReleases\StockSharp_3.0\Sources\SampleSmartCandles\MainWindow.xaml.cs:строка 85
в Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) в Ecng.Trading.Algo.BaseTrader.#=q3abNZvXrYgKL68sk6_DkevG11gLGXcY9f0xIrpLlDIU=.#=q1JeNjzk3dQ9MbXuehH1QFg==(IEnumerable1 #=qBCmpU1le4ErdfKR6lMTszQ==)

А SampleSmart работает.

Mikhail Sukhov
Mikhail Sukhov

TH_one: Посмотрел. Получается точно так же:

А SampleSmart работает.

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

Mikhail Sukhov
Mikhail Sukhov

Mikhail Sukhov:

TH_one: Посмотрел. Получается точно так же:

А SampleSmart работает.

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

  • ко всему в примере инструменты "протухли"... Вообщем, вот такие барьеры. Если сможете их пройти, значит готовы к S#😀
toyan
toyan

У меня тоже самое. S# 3.0, SmartCOM 2, с другими прогами работает нормально, Win 7 x64.

toyan
toyan

// так как инструментов слишком много, то выводим только два популярных с ММВБ и РТС this.GuiAsync(() => _securitiesSource.AddRange(securities.Where(s => s.Id == "LKOH" || s.Id == "<mark>RTS-3.11_FT</mark>")));

// начинаем получать текущие сделки (для построения свечек в реальном времени) <mark>//</mark>securities.ForEach(_trader.RegisterTrades); securities<mark>.Where(s => s.Id == "LKOH" || s.Id == "RTS-3.11_FT")</mark>.ForEach(_trader.RegisterTrades);

Так вроде заработало. Тест прошел, давайте следующий. 😀