пятница, 29 октября 2010 г.

Stock# 2.5

Обновление версии до 2.5.2.

И так, очередной релиз - 2.5. Его можно охарактеризовать одной фразой - чистка. Чистка кода, улучшение и исправление функциональности, расширение возможностей. И так, по порядку.


Quik

  1. Появился класс QuikTerminal. Представляет собой обертку над кодом, работающим с окном Quik. Фактически вся магия по манипуляции с окнами Quik-а сосредоточена именно в нем. Подробнее, в разделе Управление окном Quik.
  2. QuikTrader.RegisterQuotes теперь автоматически открывает окно со стаканом, если оно не было до этого открыто. Фидбек поступил еще со времен группы, и, замечу, очень полезная вещь получилось.
  3. Думаю, уже многие благополучно забыли, для чего было введено Order.TransactionId. Впервые оно появилось в S# 1.8 и было предназначено для идентификации заявок в асинхронном режиме. Теперь, когда по прошествии такого времени уже у всех присутствует колонка с номером транзакции в таблице заявок, эта идентификация становится единой - и для синхронного режима и для асинхронного. Заявки, создаваемые "руками" по прежнему поддерживаются и обрабатываются.
  4. Из-за появления QuikTerminal удалил QuikFinder.
  5. Добавил раздел Включение и выключение Quik где показано, как можно запускать и выключать Quik. И более того, как автоматически производить вход через логин-пароль. Я уже поместил на рабочий стол иконку с быстрым запуском Quik. Главное, храните пароль шифрованно в коде. Можно использовать для этого Ecng.Security. Но вероятность получить трояна, который будет из такой программы вытаскивать секреты, ничтожна мала.
  6. Появилось событие QuikTrader.PreProcessDdeData, которое вызывается при получении по DDE новых данных прежде, чем QuikTrader начинает обрабатывать их.
  7. Сделал возможность обрабатывать произвольные DDE таблицы одним типом данных.
  8. Добавил возможность проверять, запущен ли экспорт DDE для необходимой таблицы. Делается через методы QuikTrminal.IsDdeStarted.
  9. Если идет попытка подключится к Quik, который в свою очередь не подключен к торгам, то выводится предупреждение через ConnectionError.
  10. Для экзотических инструментов (и бирж) добавил свойство QuikTrader.SecurityClassInfo, где по классу инструмента (ключ) задаются его тип и биржа. Реквест изначально пришел по РТС Стандарту, но его экзотикой уже сложно назвать.


SmartCOM

Тут изменение всего одно, но какое! Перевел на SmartCOM 2.0. Он сейчас пока в стадии бета, но работает уже лучше, чем релиз предыдущей версии. Будем надеяться, что парни из ИТ Инвест продолжат тенденцию.


Стратегии

  1. Говорящий синтаксис для стратегий, построенных на событиях. Просто приведу код:
    // если цена лучшего бида превысила 1600 то открыть позицию на 2 контракта
    When(lkoh.BestBidPriceMore((Unit)1600)).
    Do(this.OpenPosition(2));
    И как бы он выглядил без нового синтаксиса:
    if (lkoh.BestBid.Price > 1600)
        base.ChildStrategies.Add(new MarketQuotingStrategy(CreateOrder(OrderDirections.Buy, 2, 1600)))
    
    return true;
    
    Прогресс на лицо.
  2. В связи с предыдущим пунктом значительно расширил основные условия и действия. Полный список у классов ActionStrategyConditionHelper и ActionStrategyActionHelper.
  3. MarketQuotingStrategy теперь наследуется от BestByPriceQuotingStrategy. Преимущество BestByPriceQuotingStrategy в том, что он позволяет задавать максимальные размер колебания лучшей цены относительно котируемой заявки. Это предотвращает частые перестановки заявки (например, когда лучшая цена ушла всего лишь на пипс). Теперь и MarketQuotingStrategy обладает данной опцией, что повышает его полезность.
  4. Свойство Strategy.Trades теперь называется Strategy.MyTrades.
  5. Добавил методы Strategy.BuyAt и Strategy.SellAt для короткой записи создания заявок. Подчеркиваю, после создания заявки ее нужно зарегистрировать через Strategy.RegisterOrder.
  6. Добавил тип SecurityBasket, который из себя представляет корзину инструментов. Сам SecurityBasket отнаследован от Security для того, чтобы его можно было передавать в Strategy. Теперь парные стратегии (или стратегии, где создается индекс из инструментов) стало удобнее писать на S#.
  7. Для визуального контроля работы стратегий сделал StrategiesMonitorWindow, который позволяет просматривать наглядно работу стратегий, особенно вложенных. Подробнее в разделе Мониторинг работы, а так же скриншот:

  8. Добавил новые логгеры - EmailStrategyLogger, SoundStrategyLogger, SmsStrategyLogger, DebugStrategyLogger, ConsoleStrategyLogger. Особенно интересны три: звуковой, емейл и смс (работает, через Google Calendar). Подробнее, в расширенной документации.
  9. Сделал фильтрацию сообщения для логгеров - StrategyLogger.Filters. Например, что того, чтобы проигрывать звук только при сообщениях об ошибке.
  10. Strategy.ChildStrategies теперь имеет свой тип IStrategyChildStrategyList, у которого есть событие на добавление и удаление дочерней стратегии.
  11. ConditionStrategy переименовал в ProtectiveStrategy как более подходящее по названию.
  12. Изменил названия у некоторых методов класса QuotingStrategy.
  13. Появился метод Strategy.OnChildStopped, который вызывается при остановке дочерней стратегии.


Алгоритмы

  1. Произошла реструктуризация сборки Algo. Я сгруппировал функциональность в отдельные папки. Все, что связанно со стратегиями, теперь находится в Algo.Strategies, cвечки - Algo.Candles и т.д. Как начнете писать код, все сами увидите.
  2. Расширил Unit, чтобы через него можно было задавать значения ввиде пунктов и пипсов. Выглядит следующим образом:
    var total = 10.Points(riz0) + 3.Percents();
    Довольно наглядное представление трейдинговой арифметики. Подробнее, в разделе Арифметические операции.
  3. События CandleManager.NewCandles и CandleManager.CandlesChanged изменили свою сигнатуру. C IEnumerable работать привычнее, чем с MultiDictionary.
  4. Метод TraderHelper.GetCandleBounds теперь учитывает время биржи, как писали об этом.
  5. Для создания разреженного стакана теперь необходимо вызывать метод TraderHelper.Rare. Раньше метод назывался Invert.
  6. Добавил метод TraderHelper.GroupByPriceRange для группировки стакана по ценовым уровням. Подробнее, в разделе Стакан: разреженный и сгрупированный.
  7. BaseTrader перекочевал из BusinessEntities в Algo.
  8. ReConnectionManager находится теперь внутри BaseTrader. Теперь, при использовании MultiTrader перезапуск соединения происходит для конкретного шлюза, а не для всего MultiTrader.
  9. Появилось свойство BaseTrader.ReConnectingSettings, через которое можно задавать настройки контроля соединения: количество попыток установить соединение, длительность ожидания при подключении и отключении и т.д. Подробнее в обновленном разделе Переподключение.
  10. Метод TraderHelper.ShrinkPrice чуть изменил свою работу. Теперь он автоматически определяет, до какого уровня цены нужно округлять (в большую сторону или меньшую), а так же принимает дополнительный параметр rule, через который можно явно задать вид округления.
  11. Новый метод TraderHelper.GetTheoreticalTrades, через который осуществляется анализ ликвидности в стакане.


Общее

  1. Улучшил сериализацию всех торговых сущностей. Фактически, теперь все можно записать в файл (или другое хранилище) и считать обратно. Поддерживается и WCF сериализация, и Binary, и Xml, и даже родная, Ecng.Serialization.
  2. Удалил WrapperTrader как рудимент.
  3. Обновил графическую библиотеку amCharts до версии 1.3.1. Стало чуть быстрее и исчезли глюки, которые я скрывал до этого в классе ChartControl.
  4. Переименовал ChartControl.CreateChartGraph в ChartControl.CreateTrend.
  5. Добавил свойство LogWindow.TimeFormat, через которое можно задавать формат вывода времени лог записи.
  6. Появился отдельный компонент LogControl, который можно использовать в своем окне робота.
  7. Удалил сборку AlgoEntities.
  8. Добавил свойство MarketDepth.Trader, чтобы знать, через какой шлюз получен стакан. Особенно удобно в случае работы с MultiTrader.
  9. Добавил информацию о тестовой бирже Exchange.Test. Ее можно использовать при работе с демо счетами, которые работают практически в круглосуточном режиме.
  10. Добавил PortfolioComboBox для выбора портфеля из списка.
  11. Добавил возможность клонирования стакана через MarkerDepth.Clone.


Исправленные баги

  1. Вошли все исправления из промежуточной версии.
  2. StartExport, StartDDE, IsExportRunnin.
  3. Бага с MarketTime.
  4. QuikTrader.ProcessWellKnownDdeData передает пустой Dictionary.
  5. Strategy.NewStopOrder не вызывается.
  6. Ошибка при сериализации Exchange.
  7. При загрузке стратегий из xml происходит ошибка.

Всем приятного перехода на новую версию. Для новых пользователей успехов в написании роботов.

вторник, 28 сентября 2010 г.

Форум Stock#

С утра сделал рассылку с приглашением всем участникам группы Stock# о появлении собственного форума. Форум доступен по адресу http://stocksharp.com/forum/ и ссылка на главной странице сайта ведет уже на данный адрес. Новым пользователям придется регистрироваться самостоятельно.

На форуме действует специальный робот, который переливает архив группы и новые сообщения к себе. Это сделано специально, чтобы сохранить накопленную базу знаний, и иметь возможность делать поиск. Приятно удивило количество сообщений. Для менее одного года работы группа набрала приличное количество сообщений. Это значит, что S# идет правильной дорогой.

Отказаться от Google группы решил по ряду причин.

Во-первых, полное отсутствие какого-либо форматирования. Google группы созданы для переписки по email, поэтому там plain text. А для обсуждения программирования роботов нужно и форматирование кода, и текста, и оформление ссылок.

Во-вторых, нет никакой возможности к сообщениям добавлять картинки (например, скрины ошибок).

В-третьих, что для меня стало полной неожиданностью качество сервиса. Google Groups явно меньше стандарта 24x7. От такой громадной компании уж никак не ожидал такого.

В-четвертых, какие-то глюки с русскими кодировками. Это вообще ниже всякой критики.

В-пятых, пока писал это сообщений получил от Google предупреждение. Правильно делаю, что перехожу =)

Новый форум постарается все исправить и сделать лучше. Всем приятного пользования.

вторник, 21 сентября 2010 г.

Quik2Quant 1.0 beta release!

Полнофункциональный адаптер, обеспечивающий абсолютную интеграцию ИТС QUIK и последней версии передовой программы квантового анализа OpenQuant 2.9.7. Такая связка позволяет обеспечить полный комплекс решений на фондовом рынке, включая, но не ограничиваясь:
  • тестирование торговых стратегий на исторических данных;
  • реализацию любых в том числе самых изощренных торговых стратегий;
  • мгновенное получение любой необходимой информации из ИТС QUIK;
  • накопление и хранение информации о состоянии стаканов, котировок и сделок по множеству инструментов в режиме реального времени;
  • исполнение ваших стратегий в режиме реального времени;
  • отсутствие задержек в выставлении/снятии заявок;
  • контроль текущей позиции, изменения позиции, частичного исполнения, снятия заявки, качества исполнения;
  • … 
Интеграция OpenQuant и QUIK основана на событийной модели рынка и обеспечивает возможности быстрого создания и изменения торговых роботов, работу на любом таймфрейме и инструменте.
Решение, в настоящее время, не имеет аналогов на российском рынке и предоставляет неоспоримые преимущества создателям механических торговых систем высокого уровня.

Главное окно программы выглядит следующим образом:

В этом окне мы можем получить любую необходимую рыночую информацию из терминала QUIK. Однако самую большую ценность представляют иные возможности OpenQuant, которые делают его практически универсальным продуктом для создания роботов. Итак
1. График сделок по SRZ0 (1min) - встроенная стратегия SMA Crossover:

2. Ордера по стратегии и результаты их исполнения:

3. Контроль состояния счета в режиме он-лайн:

И это еще малая толика всех возможностей OpenQuant и QUIK. Более подробно с программой и предлагаемыми решениями можно ознакомиться тут & там
Посмотреть обучающее видео, чтобы узнать еще больше можно тут
Поинтересоваться как начать использовать продукт можно здесь.

суббота, 18 сентября 2010 г.

S# исполнился один год

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

За прошедший год было сделано довольно много работы. Во-первых, для Quik S# стал самой мощной платформой для разработки роботов. Ни один из аналогичных продуктов не имеет столько обширного функционала как S#. Во-вторых, S# стал поддерживать платформу SmartCOM, которая за последнее время стала набирать обороты. В-третьих, S# вырос из простой обертки над торговыми шлюзами, и стал предоставлять свои реализации некоторых алгоритмов.

И так, S# уже год как гордо шагает по России. Уже год, но все же находятся трейдеры, которые уверяют - проект завтра умрет, и его страшно использовать. Другие уверяют наоборот - следующий релиз станет коммерческим, поэтому начинают изобретать свой велосипед. Господа, так куда мне двигаться? =)

Вопрос, конечно же, риторический. Потому что на него я знаю четкие ответы. Более того, уже сейчас есть параллельно нескольких проектов (увы, пока не в публике), которые в скором времени еще более подстегнут интерес перейти на S# как можно быстрее. Потому что S# - не на сегодня и не на завтра. Он на российском рынке надолго. И в каждой новой версией будет предлагать все больше и больше возможностей.

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

И уважающий себя роботовод писал для себя собственное решение на базе какого-то API. И у него было преимущество перед тем трейдером, кто не мог себе позволить такое решение.

С появлением S# эта картина стала меняться. Начинающие роботоводы автоматически получают технологические преимущества, которых не было у их предшественников. Далее, кто решил остаться на своих решениях, с новой версией S# теряют свой первоначальный отрыв. И тот самый элитарный клуб становится доступным практически всем, кто прилагает усилия в разработке роботов.

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

понедельник, 13 сентября 2010 г.

Сравнение TOP5 API для роботов.

Наконец, выпустил новый релиз S#, и настало время для написания беллетристики. Я уже писал подобные заметки о том, для чего нужен робот, чем он может пригодится вообще. Теперь я решил написать о том, какой API лучше выбрать для робота. Заметьте, именно для тех, кто пишет (+ собрался писать) на API, а не использует ТА программы. О последних и так достаточно написано и без меня.

Я сознательно не пишу данный пост для тех, кто программирует на S#. А для тех, кто любит самостоятельно вникнуть в проблемы системного программирования (именно системного, потому что разбираться, скажем, с TRANS2QUIK.dll это вовсе не программирование робота, как многие думают =) ). Конечно, мне до сих пор не понятно, как людям не жаль своего времени, но я хочу поделиться и с ними своим опытом работы (пусть даже с готовым решением).

И так, сравнение будет производиться между следующими API:
  1. Quik API
  2. SmartCOM
  3. Alfa Direct
  4. Alor COM
  5. Plaza2
.... и по следующим категориям:
  1. Сложность освоения
  2. Полнота данных
  3. Поддержка
  4. Распространенность
  5. Уровень документации
  6. Стабильность и ошибки
Все нижеописанное - мое личное мнение, основанное на использовании всех этих продуктов. Подчеркиваю, я не являюсь сторонником какой-то одной из API, и старался сделать вывод независимым.

И так, сначала опишу вкратце основные черты каждой из API.
  1. Quik API. По определению - это trans2quik.dll. По факту, это еще и собственный DDE сервер. Все потому, что обратная связь через API практически отсутствует. Приходится делать ну очень много работы. Поддержка отвечает стабильно, по плану. Документация сносная.
  2. SmartCOM. Ребята стараются, делают, но пока все плохо. Плохо в плане стабильности. Документация лучше, чем у Квика, да и использование много проще. Но вот данных - просто не достаточно. Если писать робота, нужно использовать внешние источники. Поддержка - самая лучшая.
  3. Alfa Direct. Похож на SmartCOM, только работает значительно стабильнее. Но. Поддержка отсутствует вообще как таковая. Я бы сказал, на любителей.
  4. Alor COM. Разобраться очень сложно. Пожалуй, сложнее только Plaza2. Документация нормальная (при таком запутанном API это большой плюс). Поддержка еле живая. Летом ее не было вообще.
  5. Plaza2. Такое же запутанное API как у Alor, только еще плюс к тому, что через данный API нужно посылать еще и специальные сообщения. Количество параметров компилятором не ограничивается, поэтому получается некий квест с разбором документаций (а их читать надо сразу как минимум две). Думаю, если нет хотя бы пару лет в программировании, можно даже в эту сторону не смотреть. Поддержка хорошая.

Получившаяся итоговая таблица (отмечал как с школе советских времен - от 1 до 5):

Quik SmartCOM Alfa Direct Alor COM Plaza2
Сложность освоения45321
Полнота данных51445
Поддержка45124
Распространенность53221
Уровень документации35432
Стабильность и ошибки41335
Итог2520171618

Я не удивлен полученным двум лидерам. Они вечно дышат друг другу в спину. Но и какого-то явного отрыва от других API не видно. Рынок постоянно будет модернизироваться, брокера предлагать все больше своих услуг, и все эти цифры будут стремиться к одному общему числу.

Вместо заключения хочу отметить, что в этой таблице все-таки нужно смотреть не на итоговые значение, а как конкретные цифры. Скажем, Alfa победила Alor. Но, если вы новичок, то из-за пункта "поддержка" вам путь заказан. Или другой вариант. Вы, наоборот, профи. Тогда при всей своей усредненности можно попробовать и Plaza2. Или, если взять мой жизненный пример, я не смог написать один из своих роботов на SmartCOM, потому что по нему невозможно было получить необходимые данные по опционным контрактам.

Дерзайте!

пятница, 3 сентября 2010 г.

Stock# 2.4

Вышла внеочередная версия S#. Внеочередная, потому, что перескочили 2.3, и в новость выходит 2.4. Получилось это в следствии непрерывных фидбеков и баг реквестов, за что отдельное спасибо Alexander и Tauler. Не успела зарелизиться версия 2.3, как поступили дополнительный запросы, и пришлось переделывать сразу на 2.4.

Очень хорошо, что поступает такое количество отзывов. Потому как это сильно помогает улучшать S#, делая его и быстрее и стабильнее. Тем более, что основная черта S# от тех технологий, что он оборачивает в себя (напомню, это и Trans2Quik.api и DDE и SmartCOM), это быстрая реакция. Согласитесь, на рынке ПО для трейдинга не так много подобных библиотек для роботов, которые развиваются такими же темпами, как S#.

Но у быстрого развития есть и обратная медаль - это ошибки, которые могут возникнуть (и возникают) при разработке. Поэтому, этот релиз посвящен именно стабильности S#, а не функциональному расширению. Все как в трейдинге, есть импульс, и есть коррекция. Сегодня у нас коррекция.

Поэтому, традиционный список изменений начинается именно с устраненных ошибок.
  1. Улучшена производительность StrategyLogger (который теперь называется FileStrategyLogger) и исправлена ошибка с параллельной записью в файл разными стратегиями.
    Огромная благодарность Иванову Андрею, который далее в топике расписал все особенности работы с файлами. Можно смело утверждать, что в S# завелся профи. Жаль, появляется только по ночам =).
  2. Переделан экспорт портфелей. Теперь информация о счетах берется не из таблиц с позициями, а напрямую из Quik в разделе управление счетами. Это предотвратило ошибку, когда при отсутствии позиций не экспортировалась информация по портфелям.
  3. Исправлена ошибка с необновлением нетокорых параметров Security. Теперь Security обновляется всегда.
  4. Исправлена ошибка при регистрации заявки через MultiTrader
  5. Исправлена ошибка в методе Strategy.CancelActiveOrders.
  6. Исправлена ошибка в определении времени задержки заявки (TraderHelper.GetLatency).
  7.  Исправлена ошибка в получении времени биржи через Quik при отсутствии соединения.
  8. Исправлена ошибка, когда исполненная заявка на время возврашалась в активное состояние.
  9. Исправлена ошибка в обработке стратегий, превыщающее количество потоков в StrategyManager.
  10. Исправлена ошибка, когда для исполненной заявки менялся баланс. Кстати, очень интересная ошибка, потому как она тянется своими корнями к некорректной передаче данных Quik. Когда он извещает о том, что заявка исполнена, но в то же самое время баланс отличен от 0. Поэтому, в QuikTrader была введена специальная проверка такой ситуации.
  11. Исправлена ошибка в дублировании тиков, получаемых через MultiTrader.Trades.
  12. Исправлена ошибка в ExcelStrategyReport при генерации отчета под Office 2010 (сейчас генерация файлов происходит без использования Excel API).

И, конечно же, есть и нововведения, которые привели к отдельной версии, а не фиксу 2.3.
  1. S# и его примеры переведены на VS 2010. Пока не осуществлен переход на .NET 4.0 по причине не совсем стабильной работы SmartCOM под этой новой версий .NET. Но использовать новое все равно необходимо. Да и скачивать бесплатную среду разработки VS 2008 Express теперь стало проблематичнее. Везде предлагают VS 2010 Exress.
  2. Удалено свойство Order.Account. Все, теперь оно в прошлом. И необходимо использовать Order.Portfolio.
  3. В QuikTrader реализованы методы RegisterTrades и UnRegisterTrades. Эти методы служат для фильтрации потока тиков по инструментам. Проблема в том, что Quik не дает программно управлять этим потоком. Поэтому, данные методы напрямую в Quik-е меняют фильтр инструментов. Сама по себе операция смены инструмента очень тяжелая, и Quik "просыпается" не быстро. Так что, настоятельно рекомендуется менять фильтр перед запуском торговых стратегий. Дополнительно, данные методы по-умолчанию не работают (ничего не делают). Чтобы они начали функционировать, необходимо включить флаг QuikTrader.EnableFiltering. Это специальная защита для тех ситуаций, если кто-то уже в своем роботе вызывал данные методы (например, сделал вызов и забыл про него).
  4. Добавлен метод TraderHelper.GetAveragePrice для вычисления средневзвешанной цены исполнения заявки как просили здесь.
  5. Как уже упомянуто выше, StrategyLogger стал базовым абстрактным классом, и вся его логика работы с текстовым файлом перенесена в FileStrategyLogger. По умомчанию, класс создает синхронизированный текстовый поток TextWriter. Если его скорости будет недостаточно, можно передавать не синхронизированный поток через конструктор FileStrategyLogger(TextWriter). Но это чревато ошибками вида.
  6. Добавлен GuiStrategyLogger, который записывает сообщения от стратегии в специальный класс LogWindow. Может работать в двух режимах: писать все сообщения в одно окно или создавать на каждую стратегию по отдельному LogWindow. Подробнее, в обновленной документации по логированию.
  7. Метод Strategy.Process сделан невидимым из вне, чтобы не было желания его вызвать.
  8. Убран у многих методов TraderHelper аргумент ITrader. Теперь передаваемых параметров стало меньше, и, значит, удобнее использовать.
  9. Метод StrategyLogger.WriteMessage сделан виртуальным, чтобы его можно было перегружать своей реализацией. Например, сейчас в файл не пишется информация о типе сообщения (StrategyErrorStates). Если вдруг кому-нибудь это потребуется, всегда будет возможность это сделать.
  10. Добавлен виртуальный метод StrategyReport.FormatTime для переопределения формата времени в отчетах.
  11. Добавлен адрес демо сервера SmartCOM - SmartAddresses.Demo.
  12. Для предыдущего пункта добавлен специальный визуальный контрол SmartAddressComboBox для выбора сервера. Он уже используется в примерах. Вот как выглядит теперь SmartSample:
  13. SmartTrader.RegisterPortfolio теперь вызывается автоматически при появлении в системе портфеля.
  14. Добавлена дополнительная проверка на Security.MinStepSize в метод TraderHelper.ShrinkPrice, чтобы предотвратить ситуацию, аналогичную этой.
  15. Добавлен метод QuikTrader.Initialize, который инициализирует соединение с окном Quik, чтобы позволить работать с экспорт DDE без подключения к серверу торгов. Такое соединение позволяет манипулировать Quik-ом, запуская, к примеру, экспорт DDE.
  16. Переделан метод QuikTrader.ReRegisterOrder, чтобы стало возможным перерегистрировать заявки на ММВБ через снятие и новую регистрацию.
  17. Переделано событие ITrader.QuotesChanged, чтобы он передавал коллекцию стаканов. Для аналогии с другими событиями, а так же для будущих систем, передающие потоком данные сразу по нескольким стаканам.
  18. Добавлены два события MarketDepth.UpdatingStarted и MarketDepth.UpdatingFinished для определения, когда стакан начал обновляться, и когда закончил. Имеет смысл использовать в работе с SmartTrader, так как там стакан обновляется построчно.  
Вот так, исправлена дюжина ошибок и 18 нововведений.

четверг, 29 июля 2010 г.

Stock# 2.2.1

Вышло обновление версии 2.2 до 2.2.1. В него вошли критические исправления работы стратегий, об ошибках которых писалось в группе после выхода 2.2.

В 2.2 было исправлено достаточно много в алгоритмическом части S#. Из-за этого могли случиться ошибки, и они случились. Хорошая новость, в 2.3 будут изменения в ширь, так что такого сложного перехода как на 2.2 ожидаться не должно.

Качаем, проверяем, сообщаем.