Версия 4.2
Atom Ответить
11.02.2013


Сейчас в тёмных кузницах S# выплавляется новая версия 4.2. Версия будет содержать ряд революционных изменений, которые я предлагаю обсудить. На вскидку, будут следующие мажорные изменения:


  1. Trader будет переименовал в Connector. Смысл, что SmartTrader и OECTrader - это существующие торговые марки.
  2. Английская локализация. Уже с этой версий и Студией мы планируем начать себя рекламировать в Валиноре.
  3. Новая потоковая модель, которая окончательно поставит точки над i в области синхронизации данных и событий.
  4. Облачное тестирование.


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

Теги:


Спасибо: VassilSanych




21 Ответов
ra81

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


Новая потоковая модель. Это о чем?
Спасибо: VassilSanych

VassilSanych

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


Раз уж и так жёстко ломаете API, то наверное стоит проследить за более чёткой типизацией.
Например, Candle сделать дженериком от типа Arg, а то приведение object к нужному типу как-то не правильно и, наверное, не производительно, учитывая боксинг-анбоксинг и т.п.
Спасибо: Терпила

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 12.02.2013
Ответить


VassilSanych Перейти
Раз уж и так жёстко ломаете API, то наверное стоит проследить за более чёткой типизацией.
Например, Candle сделать дженериком от типа Arg, а то приведение object к нужному типу как-то не правильно и, наверное, не производительно, учитывая боксинг-анбоксинг и т.п.


Изначально так и было, а почему потом изменилось - уже не помню. Но можно попробовать еще раз. В любом случае тогда нужен интерфейс. Потому что нужно как-то кастить разные типы свечек между собой.
Автор топика
Спасибо:

ra81

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


Как-то дискуссии не выходит. Выходит констатация фактов. Мы изменим и все. А на вопрос про потоковую модель ответа не услышал :(
Спасибо: Терпила

pyhta4og

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


ra81 Перейти
Новая потоковая модель. Это о чем?


Сейчас стратегия выполняется в нескольких потоках. Это происходит от того что стаканы приходят в одном потоке, а сделки в другом. Как результатнеобходимость использования блокировок для доступа к полям например объекта Order.

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

ra81

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


pyhta4og Перейти
ra81 Перейти
Новая потоковая модель. Это о чем?


Сейчас стратегия выполняется в нескольких потоках. Это происходит от того что стаканы приходят в одном потоке, а сделки в другом. Как результатнеобходимость использования блокировок для доступа к полям например объекта Order.

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


Я то думал... эрланг... крутизна.
В механизмы того как сейчас все работает я неплохо посвящен. Куча локов и прочей ерунды включая пачку потоков.
А в чем беда использовать SyncronizedTrader?? Он ведь делает ту же самую петрушку? Через что планируется сделать синхронизацию, то есть как будет реализована вот эта самая очередь куда будет все заноситься? Она будет делаться на входе в стратегию для каждой стратегии?? А сам Trader кидать данные будет так же в многопоточном режиме?
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 13.02.2013
Ответить


ra81 Перейти
А в чем беда использовать SyncronizedTrader??


Смысл уйти от локов к лок-фри, а не создавать еще новых локов.
Автор топика
Спасибо:

ra81

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


Mikhail Sukhov Перейти
ra81 Перейти
А в чем беда использовать SyncronizedTrader??


Смысл уйти от локов к лок-фри, а не создавать еще новых локов.


Тогда снова вопрос, как будет реализоваться эта процедура? В предыдущем посте вопросы все в общем озвучены. Не просто так спрашиваю. Сам пришел к такой схеме еще в том году. НА входе в страту все события пакуем в очередь и с ними работаем линейно. Интересно решение, которые вы хотите сделать.
Спасибо:

Den

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


ra81 Перейти

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


Получается, что пока одно событие из очереди полностью не обработано - все стоит и ждет?
Спасибо:

ra81

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


Den Перейти

Получается, что пока одно событие из очереди полностью не обработано - все стоит и ждет?


Совершенно верно. Вот так нехорошо и плохо происходит :)). Но в случае многопоточной работы происходит совершенно тоже самое. Пока ваш рулес не отпашет, другой рулес сидит и курит в локе, при этом запирает нафиг весь поток. Моя же схема так не делает, событие пакуется в Action и кладется в очередь, лок есь тока в фазе укладки Событий в очередь. Очень незначительный. Надыбаю нормальную неблокирующую очередь будет вообще четко. Пока не парился этим.
Ну и есеесно нет глюков дедлоков итд. Да и бошку греть не надо как разрулить весь этот гемор с потоками, тут надо было профессором чтобы все грамотно сделать. А в одну струю и ламер разберется.

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 13.02.2013
Ответить


ra81 Перейти
событие пакуется в Action и кладется в очередь


И это есть самая грубая ошибка. Не зря делегаты иногда называют замыканием. Ой не зря.
Автор топика
Спасибо:

ra81

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


Mikhail Sukhov Перейти
ra81 Перейти
событие пакуется в Action и кладется в очередь


И это есть самая грубая ошибка. Не зря делегаты иногда называют замыканием. Ой не зря.

Пока это работает лучше локов. Вы бы Михаил лучше просветили народ по части вашего решения. Авось ума разума наберемся. Да и интересно же.

Спасибо:

VassilSanych

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


Тоже не вижу смысла в многопоточности с локами, когда логика работы системы строго последовательная (а иначе и актуального тестирования стратегий не получится).
Что нужно сделать, - это чётко нарисовать workflow и определить статусы. Дальше всё нарастёт практически само по себе.
Очередь - хороший вариант. Производительный.
А главное - очень удобный для тестирования.
Спасибо:

VassilSanych

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


Mikhail Sukhov Перейти
Не зря делегаты иногда называют замыканием. Ой не зря.

Я бы не перебарщивал с функциональщиной.
Всему своё место.
Есть место ООП, а есть место data driven или реляционной логике.
Есть место функциональщине, есть - старой доброй императивщине.
Трейдинг - штука глубоко императивная: получили сигнал - приняли решение на основе существующих статусов. Функции принятия решения, в свою очередь, до отупения просты.
Понимаю, что не модно. Зато актуально.

Спасибо:

VassilSanych

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


О стэйтлесс:

Зачем стэйтлесс, когда в системе одновременно может быть принято только одно решение, причём основанное на характеристиках всех составляющих этой системы?
Спасибо:

Терпила

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


А почему попросту не привлечь реактивную модель Reactive Extensions (Rx) for .NET, которая как раз и заточены (и уже давненько) под решение таких проблем?
Кстати, разработка Rx была проопенсорсена и переведена в https://rx.codeplex.com/

VassilSanych Перейти
когда в системе одновременно может быть принято только одно решение, причём основанное на характеристиках всех составляющих этой системы?

Это неочевидно при параллельном (мультиядерном) multicore, multiprocessor and/or (и распределённом кросс-машинном) multimachine программировании
Спасибо:

VassilSanych

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


Терпила Перейти
Это неочевидно при параллельном (мультиядерном) multicore, multiprocessor and/or (и распределённом кросс-машинном) multimachine программировании

Я вообще-то о бизнес-требованиях говорил.
Или "у меня есть золотой молоток и всё кругом - гвозди"?

Кстати. Ещё один вариант - уйти в многопоточности условно от транзакций Serializable к Read Committed. Т.е. где возможно, лочить только запись, а не чтение.
Я даже в своих исходниках в паре мест это реализовал через ConcurrentDictionary.
Должно повысить отзывчивость.

Спасибо:

ak

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


В качестве пожелания - рассмотрите возможность ухода от использования Ecng библиотеки, то, как она работает с памятью - это ужасно (http://stocksharp.com/posts/m/23646/). Попытка оптимизации параметров стратегии на истории с генерацией стаканов в ренже хотя бы месяц и, скажем, ±200 комбинаций параметров гарантированно заканчивается OutOfMemory и на послених версиях также.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 30.03.2013
Ответить


ak Перейти
В качестве пожелания - рассмотрите возможность ухода от использования Ecng библиотеки, то, как она работает с памятью - это ужасно (https://stocksharp.com/posts/m/23646/). Попытка оптимизации параметров стратегии на истории с генерацией стаканов в ренже хотя бы месяц и, скажем, ±200 комбинаций параметров гарантированно заканчивается OutOfMemory и на послених версиях также.


Разве эту ошибку не полечили? Вы отписались, что она исправлена.
Автор топика
Спасибо:

ak

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


К сожалению, лишь частично. Как я тут (http://stocksharp.com/posts/m/23724/) написал, ситуация улучшилась, но с увеличением количества дней (но не параллельно работающих EmulationTrader'ов) OutOfMemory неизбежен. Прошу прощения, что не обновил тему по результатам последующих тестов.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 01.04.2013
Ответить


ak Перейти
К сожалению, лишь частично. Как я тут (https://stocksharp.com/posts/m/23724/) написал, ситуация улучшилась, но с увеличением количества дней (но не параллельно работающих EmulationTrader'ов) OutOfMemory неизбежен. Прошу прощения, что не обновил тему по результатам последующих тестов.


Тоесть ошибка осталась? Тогда можете привести минимальный код, воспроизводящий то, о чем вы пишите?
Автор топика
Спасибо:


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

loading
clippy