воскресенье, 15 ноября 2009 г.

Ecng.Trading v1.2

Обновление! Рекомендую после данного сообщения прочитать это.

Руки окончательно дошли не только до Ecng.Trading, чтобы его расширить, но и выложить в общий доступ. Качайте. Самое главное изменение в этой версии - появились новые свечки. Раньше были свечки, основанные только на тайм-фрейме, причем, жестко определенном: минутка, пяти-, и т.д.. Теперь тайм-фрейм можно задавать любой, через .NET класс TimeSpan (например, TimeSpan.FromMinutes(2) создает двухминутку). И свечки стали вида:

1. TimeFrameCandle - старая добрая тайм-фрейм свечка.
2. TickCandle - свечка, строящаяся на основе количества сделок.
3. VolumeCandle - свечка, строящаяся на основе допустимого объема.
4. RangeCandle - свечка, строящаяся на основе максимального отклонения цены сделки от открытия свечки.

Для свечек я добавил два события в ITrader: NewCandle (вызывается для свечек, которые только что начали формировать), CandlesChanged (вызывается для измененных свечек).

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

1. RegisterTimeFrameCandles - передается инструмент, и нужный тайм-фрейм. После вызова этого метода, робот начнет получать события NewCandle и CandlesChanged с объектами TimeFrameCandle.
2. RegisterTickCandles - то же самое, что и RegisterTimeFrameCandles, только уже для свечек TickCandle.
3. RegisterVolumeCandles - аналогично.
4. RegisterRangeCandles - аналогично.

И последнее, немаловажное изменение, касается времени последней сделки (я уже писал об этом, пункт 2). Теперь, QuikWrapper принимает по DDE сразу два параметра, "Время последней сделки" и "Время изменения". Вот как выглядит теперь таблица инструментов:



Все скриншоты настроек DDE и файл с настройка окон в Квике я выложил в том же архиве.

37 комментариев:

  1. Здравствуйте.

    Класс Security должно быть событые
    public event PropertyChangedEventHandler PropertyChanged;
    Но его там нет. Как это понять?
    А как можно отловить изменение LastTrade?

    Спасибо.

    ОтветитьУдалить
  2. Если предыдущая версия у меня работала, то пример вложенный в архиве не принимает данных с Quik по DDE. Mika есть у Вас более живописный пример работы вашей библиотеки или это черные ящики? по не совсем ясна их функциональность.

    ОтветитьУдалить
  3. Mika. Во время Debug режима видны классы со странными названиями, например класс чертик, или класс квадратик, класс ветикальная черта. Вы можете исправить имена этим классам, чтобы легче было понимать что происходит Runtime?
    Спасибо.

    ОтветитьУдалить
  4. Gazrvs, а что именно не работает? Какая ошибка возникает? Вы изменили настройки таблицы инструментов как я показал на рисунке?

    ОтветитьУдалить
  5. Vahe,

    1. Почему не видно - http://msdn.microsoft.com/en-us/library/aa288461%28VS.71%29.aspx
    2. Интерфейс INotifyPropertyChanged нужен для WPF и WinForms (технологии визаульных приложений в .NET). Вы можете и в своем коде использовать это событие, но зачем? Квик данные обновляет по инструментам раз в секунду. Просто напишите вечный цикл, в котором крутится алгоритм торговли и проверяйте данные.

    ОтветитьУдалить
  6. Vahe,

    А чем именно затрудняет в написании программ такие имена? Это все таки стоит воспринимать как особое внутреннее поведение, которое не должно влиять на внешний разрабатываемый торговый алгоритм.

    ОтветитьУдалить
  7. Mika, все настройки применил согласно скриншотам, и использовал прилагаемый файл настроек. Ошибки не выдаются, значит DDE сервер работает, только пример не отображает данные. Может у Вас есть пример, где видно как получать данные из таблиц, работа со свечками?

    ОтветитьУдалить
  8. Подпишитесь в примере на событие DdeError. Что оно говорит?

    ОтветитьУдалить
  9. Еще после запуска ДДЕ проверьте в самом крике, запущен ли экспорт.

    ОтветитьУдалить
  10. С событием DDeError не вариант, боюсь опыта не хватит на эту процедуру. C экспортом по DDE все нормально, т.к. на другом тестовом сервере DDE проступает. Так как с примером? по действующему примеру гораздо проще разобраться не профессионалам. А профессиональному программисту по моему проще самому написать все библиотеки под свои цели.

    ОтветитьУдалить
  11. Gazrvc,

    Не совсем понятно, что именно у Вас не работает. Пример не работает вообще или с конкретно каким-то сервером?

    Отпиши насчет пример чуть подробнее. Чем не устраивает текущий?

    ОтветитьУдалить
  12. Всем

    Перезакачайте архив. Закралась досадная ошибка. info.wnd файл не содержал новую колонку таблицы Инструменты, которая показана на скриншоте.

    ОтветитьУдалить
  13. Здравствуйте! Очень понравилась ваша разработка(судя по описанию), но столкнулся с проблемой. Компилировал проект и запускал с экзешника, выдает ошибку not found QUIK terminal in directory C:\Program Files\QUIK-Junior
    C чем это может быть связано?
    Заранее спасибо!

    ОтветитьУдалить
  14. Скорее всего не включили в Quik обработку внешних транзакций торговля/Внешние транзакции/Началь обработку.
    Mika, вопрос по обработке полученных табличных данных остался открытым! Имеется ли у Вас пример, в котором показан доступ к произвольной строке (значению) из таблицы (или коллекции). А расчет индикаторов у Вас планирется производить по свечкам или по табличным данным? Тоже бы пример не помешал.

    ОтветитьУдалить
  15. Gazrvs, спасибо большое!
    Привык обрабатывать транзакции из файла, про этот пункт даже не подумал

    ОтветитьУдалить
  16. Gazrvs,

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

    ОтветитьУдалить
  17. Mika, c# это хорошо, но dde это плохо,
    быстрее чем 10мс он работать не будет, quik не даст

    для получения данных лучше использовать опрос памяти QUIK, там скорость может быть больше в разы

    ОтветитьУдалить
  18. Doletel,

    1. Квик сам не всесилен, и получает данные с биржи не мгновенно. Время получения данных из интернета несоизмеримо большое по сравнению с получением данных под ДДЕ.

    2. Опрос памяти Квика - звучит жутко. Что под этим подразумевается?

    ОтветитьУдалить
  19. Doletel, опрос памяти Quik не просто нелегкое. а еще и неблагодарное занятие, т.к. Quik постоянно модифицируется. Можно перехватывать данные получаемые Quik, кто то говорил что надо переписать winros, но это уже другой уровень полета, тогда и с С# надо переходить на С++. Поэтому DDE в этом случае самый быстрый способ получения данных. Спасибо и на этом.
    Mika, мне просто хочется увидеть пример в котором я могу прочитать, например, из таблицы "Инструменты", которую принял по ДДЕ, значение последней цены в 5-ой строке и присвоить это значение переменной типа Float или Decimal.

    ОтветитьУдалить
  20. 2. Опрос памяти Квика - звучит жутко. Что под этим подразумевается?
    >readprocessmemory
    ну вообще молодежь пишет приводы на основе опроса памяти ttools.ru,

    ОтветитьУдалить
  21. Denis_DD. там хороший привод, только как то я прошел мимо, внимательно не изучив, надо исправить проявленную оплошность.

    ОтветитьУдалить
  22. хороший привод тот который написан своими руками, все что сделано для общего пользования отчасти неудобно,

    ОтветитьУдалить
  23. Mika, при загрузке обновленного info.wnd Quik пишет ошибку: "Не удалось установить ДДЕ соединение с сервером". Либо не запущен 'order'. либо в него не загружен лист. Таблица 'Заявки'.
    Коллеги у кого то заработал новый вариант?

    ОтветитьУдалить
  24. Denis_DD,

    readprocessmemory - как я уже писал, основной лаг в подобных системах - это соединение Квика с биржей (я думаю, не нужно объяснять, сколько посредником между этими вещами). Так что эта оптимизация не раст ровным счетом ничего. Разве что моральное успокоение, что проделал все от меня зависящее.

    ОтветитьУдалить
  25. Gazrvs,

    В новой версии как раз появиться возможность получения сырых данных DDE. Будет приходить что-то ввиде матрицы:

    var riz09Bid = rows[1/* номер строки */][28/* номер колонки */]

    ОтветитьУдалить
  26. Denis_DD,

    ttools.ru делает упор на готовые программы. Я же делаю упор на то, чтобы можно было разрабатывать эти самые программы. Есть готовая стратегия или нужно автоматизировать ряд рутинных действий - Ecng.Trading.

    ОтветитьУдалить
  27. Mika, ну тогда я за модульность, чтобы не сносить весь дистрибутив. а добавив новый Dll или его заменив, можно было расширить функциональность.
    А насчет прямого доступа данных, там было ясно видно, что программа требует перенастройки под новую версию Quik. А ДДЕ, как ODBC универсальные протоколы и в большинспве прикладных задач ДДЕ устраивает.

    ОтветитьУдалить
  28. > Я же делаю упор на то, чтобы можно было разрабатывать эти самые программы
    Mika , вы конечно извините, но задайте себе вопрос будут ли нормальные люди писать серьезные программы работающие с деньгами, на основе закрытого кода.
    Нормальный программист пройдет мимо вас. Идею он свою вам не даст, нет идей нет развития

    ОтветитьУдалить
  29. Denis_DD
    Думаю вы правы.
    Я сам уже разрабатываю свою собственную и думаю выложить ее на sourceforge.
    Так больше людей заинтересуются проектом. И думаю помогут мне сделать много исправленей и добавить новые возможности.

    ОтветитьУдалить
  30. Denis_DD,

    Насчет открытого кода - вопрос очень интересный. Во-первых, возьмем тот же Квик (да и любую торговую программу, которую Вы знаете). Там код открыт? Я думаю, что нет. Возьмем любой нормальный АПИ, например, Windows API. На нем писали и Квик и многое другое. Никто в здравом уме в компании ARQA не задавался вопросом об открытости АПИ. Потому что люди понимают, их главная задача, на чем они деньги будут рубить - это выкатить продукт на рынок, а не кривиться по поводу несовершенства с их точки зрения мира. ИМХО.

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

    В-третьих, о каких программистах и идеях идет речь? Если под идеями Вы подразумеваете торговые стратегии, то никакие стратегии я брать от пользователей не собираюсь. Это их коммерческая идея и бремя на всю жизнь. У меня свои дела и заботы. Вот одно из них - Ecng.Trading.

    ОтветитьУдалить
  31. нужно понимать что API известных систем хоть и закрытый но он сертифицирован, он распрастранен, он как минимум не содержит вирусов, над ним работает команда, которая исправляет косяки друг друга с них и спрос.

    по поводу программистов, я понимаю что ваше видение кода оно свое, но оптимизацию ни кто не отменял, и что делать если вам надоест развивать проект?
    эти вопросы не праздные но прежде чем начать разработку на основе ваших библиотек, нужно не раз подумать а стоит ли?

    ОтветитьУдалить
  32. Denis_DD скажите всем читающим что вы, добиваетесь, если есть что-то полезное и рациональное. то изложите.
    Чем Вас ДДЕ не устраивает?
    По большому счету то, что мы пишет или мечтаем написать уже много лет как написано, на том же sourceforge это хорошо видно.
    Просто пользователь/программист хочет все контролировать:
    - ДДЕ - понятно и универсально, при прямом чтении памяти при смене версии Quik потеряешь контроль;
    - C# - тоже думаю всем понятно;
    - остается только сделать библиотеку для доступа к таблицам по ДДЕ на С# и прописать стратегию торговли;
    - прикрутить, при желании, исторические данные на SQL и графику например на библиотеке Nevron;

    поэтому дайте Mika спокойно завершить Dll для разбора данных Quik по DDE, до этого, на сколько мне известно, все подобные разработки были "замышкованы" или продавались за деньги.

    ОтветитьУдалить
  33. Интересно очень когда же будет новая версия.

    ОтветитьУдалить
  34. Mika, можно пример стоп-заявки?

    ОтветитьУдалить
  35. Vahe, на выходных не успел. Только сейчас - http://stockmarketdotnet.blogspot.com/2009/11/ecngtrading-13.html.

    Насчет стоп-заявок. Смотрели Order.Condition?

    ОтветитьУдалить
  36. Denis_DD,

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

    Я развиваю проект в мире своих сил и возможностей. Надеюсь, что мои труды не канут в лету. И проект забрасывать не собираюсь. Сертификата честности моих слова, к сожалению, не имею. Придется поверить на слово. =)

    ОтветитьУдалить