Индикаторы - совместный проект
Atom Ответить
31.05.2011


Приветствую всех участников!

Месяц назад я публиковал призыв о совместной разработке индикаторов на базе C#. Прошел месяц, мною было сделано 3 стандартных индикатора SMA, EMA и WMA. И ни строчки кода ни от одного пользователя S#. Каждый день задают вопросы (причем, большинство явно не относящиеся к S# как таковому), получают ответы, но свою помощь предложить не хотят. Стесняются, наверное.

Я понимаю, что дело в мотивации. Зачем помогать делать что-то, если можно подождать пару месяцев (пол года) или сделать самому, а потом пересесть на стандартное. Поэтому я решил найти мотивацию. И я ее нашел. Это лето объявляется летом "Ты мне - я тебе".

Схема простая. Вы делаете индикатор - я отвечаю на три любых вопроса. Вопросы по глюкам S# остаются как есть и раньше - ответ всегда получите. Но вопросы по C#, WFP, примерам, документации, Квику и всему прочему - только за индикатор.Smile Я думаю честно.

Сделав 5 индикаторов, вы получается бонус - кружку с символикой S#.

Репозитарий с исходниками расположен по адресу http://stocksharpconnectors.codeplex.com Чтобы получить доступ на запись регистрируйтесь на сайте, пишите в эту тему свой логин и какие индюки хотите сделать. Стиль кодирование указывается через R#. Настройки в репозитарии.

Что сделано сейчас:

  1. Acceleration
  2. Alligator
  3. AwesomeOscillator
  4. Fractals
  5. GatorOscillator
  6. MarketFacilitationIndex
  7. BollingerBands
  8. ExponentialMovingAverage
  9. Macd
  10. ParabolicSar
  11. RAVI
  12. SimpleMovingAverage
  13. SmoothedMovingAverage
  14. StandartDeviation
  15. VolumeWeightedMovingAverage
  16. WeightedMovingAverage
  17. WilderMovingAverage
  18. Adx
  19. Atr
  20. ChandeMomentumOscillator
  21. CommodityChannelIndex
  22. DiMinus
  23. DiPlus
  24. Dx
  25. Ichimoku
  26. Momentum
  27. RateOfChange
  28. RelativeStrengthIndex
  29. RVI
  30. TrueRange
  31. DetrendedPriceOscillator
  32. Highest
  33. LinearReg
  34. LinearRegression
  35. LinearRegSlope
  36. Lowest
  37. MeanDeviation
  38. MedianPrice
  39. Peak
  40. PeakBar
  41. QStick
  42. RSquared
  43. StandardError
  44. StochK
  45. Sum
  46. Trix
  47. Trough
  48. TroughBar
  49. UltimateOsc
  50. VerticalHorizontalFilter
  51. Vidya
  52. Volatility
  53. WilliamsR

Теги:


Спасибо:




340 Ответов
<< < 2 3 4 5 6  > >>
maze9a

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


Maxim Перейти
esper Перейти

Да вроде верно все, когда достигли макс. размер буфера первый раз, сработает условие
Код
if (Buffer.Count == Length)

в следующий раз добавится новый элемент и размер списка будет Length+1 и попадем в блок else


Сори. Вы правы.
Все верно.

Но все равно мой вариант краше :)
Так как нет лишнего добавления и удаления из буфера


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

maze9a

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


esper Перейти
Maxim
Нужно или не нужно — это вопрос договоренностей.
Я вот и призываю договорится.

Потому что нигде в индикаторах я не видел перед вызовом метода Change проверки на то,
что новое значение Value отличается от старого.

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


Поддерживаю такой подход.
Спасибо:

InsiderHSE

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


Здравствуйте! Открываю солюшн Indicators, ссылки на сборки Ecng не находятся... Это только у меня так? Если я удалю их и снова добавлю на сборки из папки references, это не повлияет на работу других пользователей?
Спасибо:

Mikhail Sukhov

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


InsiderHSE Перейти
Здравствуйте! Открываю солюшн Indicators, ссылки на сборки Ecng не находятся... Это только у меня так? Если я удалю их и снова добавлю на сборки из папки references, это не повлияет на работу других пользователей?


Get Latest version делайте не из Solution Explorer, а из Source Control Explorer. У вас не все файлы скачались.
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 10.06.2011
Ответить


Сейчас посмотрел исходный код индикатора Vidya, судя по всему, в нем используется индикатор CMO, который у нас уже есть в проекте, может стоит использовать его, а не считать значения самим? Т.е. комбинировать индикаторы, чтобы не было дублирования кода.
Спасибо:

Maxim

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


Mikhail Sukhov Перейти
InsiderHSE Перейти
Здравствуйте! Открываю солюшн Indicators, ссылки на сборки Ecng не находятся... Это только у меня так? Если я удалю их и снова добавлю на сборки из папки references, это не повлияет на работу других пользователей?


Get Latest version делайте не из Solution Explorer, а из Source Control Explorer. У вас не все файлы скачались.


У меня был аналогичный случай.
Я сделал CheckOut только одного Indicators.sln.
И у меня не хватало двух библиотек Ecng в референсах.
Они были, но были помечены предупреждением.

Если посмотреть код файла Indicators.csproj, то там есть такие строки
Код

<ItemGroup>
<Reference Include="Ecng.Common">
<HintPath>..\References\Ecng.Common.dll</HintPath>
</Reference>
<Reference Include="Ecng.Trading.Algo">
<HintPath>..\..\References\Ecng.Trading.Algo.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
</ItemGroup>


Что говорит, что два файла лежат где-то выше.

Я просто добавил вручную эти два файла в референс.
Но после этого откатил изменение в файле Indicators.csproj назад, что бы не влиять на основной код.
Спасибо:

Maxim

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


esper Перейти
Сейчас посмотрел исходный код индикатора Vidya, судя по всему, в нем используется индикатор CMO, который у нас уже есть в проекте, может стоит использовать его, а не считать значения самим? Т.е. комбинировать индикаторы, чтобы не было дублирования кода.


Сделал реализацию внутри сугубо для ускорения работы.
Так же CMO умножается на 100 в реализации, тогда как в Vidya этого не нужно.
Если кто желает переделать, то я не против.


UPD
Неверно написал последнее предложение.
Так как я делаю этот индикатор, то я за него в ответе.
Если Михаил скажет, что надо переделать с использованием CMO класса, то я переделаю.
Если не скажет, то пределывать ничего не буду.
Спасибо:

esper

Фотография
Программист
Дата: 10.06.2011
Ответить


Maxim Перейти
Сделал реализацию внутри сугубо для ускорения работы.
Так же CMO умножается на 100 в реализации, тогда как в Vidya этого не нужно.
Если кто желает переделать, то я не против.

Предлагаю всем вместе решить как будем поступать в таких случаях, каждый раз изобретать велосипед или использовать готовоеSmile

Maxim, goricap это ваш логин? Сейчас вытянул последнюю версию проекта, там добавлен индикатор Volatility, у метода Add стоит override, хотя в базовом классе такого метода вообще нет, и проект не компилируется, вы перед Check In проект компилируете?

P.s. CCI вроде никто еще не брал?
Спасибо:

Maxim

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


esper Перейти
Maxim Перейти
Сделал реализацию внутри сугубо для ускорения работы.
Так же CMO умножается на 100 в реализации, тогда как в Vidya этого не нужно.
Если кто желает переделать, то я не против.

Предлагаю всем вместе решить как будем поступать в таких случаях, каждый раз изобретать велосипед или использовать готовоеSmile


Мое личное мнение:
Изобретать велосипед по возможности не стоит.
У проекта должен быть куратор, который должен решать политику партии.
Всем вместе решать не стоит. Демократия говно :).
Надо всем вместе обсуждать, а решение должен принимать один человек.

esper Перейти

Maxim, goricap это ваш логин? Сейчас вытянул последнюю версию проекта, там добавлен индикатор Volatility, у метода Add стоит override, хотя в базовом классе такого метода вообще нет, и проект не компилируется, вы перед Check In проект компилируете?

Мой логин. Обычно компилирую. В последний раз забыл проверить на компиляцию.
Спасибо:

esper

Фотография
Программист
Дата: 10.06.2011
Ответить


Думаю, что окончательное решение будет принимать Михаил, как основатель проекта, либо выберем другого ответственного.

Пока выскажу некоторые предложения по проекту:
1. Как уже писал выше, предлагаю использовать уже готовые индикаторы повторно, а не писать каждый раз все под себя, во-первых, не будет лишнего дублирования кода, во-вторых, код индикаторов становится более компактным и понятным, в-третьих, это позволит лишний раз протестировать уже написанные индикаторы.

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

3. По поведению индикаторов:
- если индикатор еще не сформировался, то его значение равно 0
- пока индикатор не сформировался, событие Changed не вызывается
- после того как индикатор сформировался, событие Changed вызывается при каждом добавлении нового значения
- функция Add принимает или decimal или Candle

4. При коммите указывать какие изменения были внесены, коммиты делать только для работающих версий (по минимуму проект должен собираться)

5. Xml комментарии писать на одном языке

Пока все, если что-то вспомню, добавлюSmile
Спасибо:

InsiderHSE

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


Mikhail Sukhov Перейти
InsiderHSE Перейти
Здравствуйте! Открываю солюшн Indicators, ссылки на сборки Ecng не находятся... Это только у меня так? Если я удалю их и снова добавлю на сборки из папки references, это не повлияет на работу других пользователей?


Get Latest version делайте не из Solution Explorer, а из Source Control Explorer. У вас не все файлы скачались.

Я даже когда с сайта скачиваю последнюю сборку, ссылки в референсе проекта присутствуют, но с восклицательныйм знаком, сами сборки не находятся. Я на 100% не уверен, сейчас нет возможности посмотреть, но вроде из Source Control Explorer и закачиваю последнюю версию.
Maxim

У меня был аналогичный случай.
Я сделал CheckOut только одного Indicators.sln.
И у меня не хватало двух библиотек Ecng в референсах.
Они были, но были помечены предупреждением.

Если посмотреть код файла Indicators.csproj, то там есть такие строки

Код:

<ItemGroup>
<Reference Include="Ecng.Common">
<HintPath>..\References\Ecng.Common.dll</HintPath>
</Reference>
<Reference Include="Ecng.Trading.Algo">
<HintPath>..\..\References\Ecng.Trading.Algo.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
</ItemGroup>



Что говорит, что два файла лежат где-то выше.

Я просто добавил вручную эти два файла в референс.
Но после этого откатил изменение в файле Indicators.csproj назад, что бы не влиять на основной код.


То есть вы поправили код Indicators.csproj вручную или через add new reference? Вам каждый раз приходится это делать?
Спасибо:

esper

Фотография
Программист
Дата: 10.06.2011
Ответить


InsiderHSE Перейти
Я даже когда с сайта скачиваю последнюю сборку, ссылки в референсе проекта присутствуют, но с восклицательныйм знаком, сами сборки не находятся. Я на 100% не уверен, сейчас нет возможности посмотреть, но вроде из Source Control Explorer и закачиваю последнюю версию.

Идем в Team Explorer - Source Control, там есть Indicators, а еще есть References, вот их тоже скачиваем и все должно работать, можно скачать не полностью References, а только нужные зависимости.

Вообще суть в том, чтобы нужные зависимости лежали по адресу Indicators\..\References, т.е. рядом с директорией проекта Indicators, должна быть директория References с нужными зависимостями
Спасибо:

Maxim

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


InsiderHSE Перейти

То есть вы поправили код Indicators.csproj вручную или через add new reference? Вам каждый раз приходится это делать?

Вручную не правил.
Добавил библиотеки в референс.
И после этого откатил изменения в файле Indicators.csproj назад.
Сделал это один раз. Каждый раз не нужно делать.

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

Возможно стоит сделать по совету esper и скачать References.

Спасибо:

Sergey Masyura

Фотография
Автор статей
Дата: 10.06.2011
Ответить


Maxim Перейти
esper Перейти
Maxim Перейти
Сделал реализацию внутри сугубо для ускорения работы.
Так же CMO умножается на 100 в реализации, тогда как в Vidya этого не нужно.
Если кто желает переделать, то я не против.

Предлагаю всем вместе решить как будем поступать в таких случаях, каждый раз изобретать велосипед или использовать готовоеSmile


Мое личное мнение:
Изобретать велосипед по возможности не стоит.
У проекта должен быть куратор, который должен решать политику партии.
Всем вместе решать не стоит. Демократия говно :).
Надо всем вместе обсуждать, а решение должен принимать один человек.

esper Перейти

Maxim, goricap это ваш логин? Сейчас вытянул последнюю версию проекта, там добавлен индикатор Volatility, у метода Add стоит override, хотя в базовом классе такого метода вообще нет, и проект не компилируется, вы перед Check In проект компилируете?

Мой логин. Обычно компилирую. В последний раз забыл проверить на компиляцию.


Если кто-то что-то поломал немного или сильно, то это в принципе херня. Особенности командной работы. Поэтому давайте относится с пониманием друг к другу, опыт у всех разный.

Всем спасибо за огромный вклад в проект!
Спасибо:

Mikhail Sukhov

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


Maxim Перейти

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

Возможно стоит сделать по совету esper и скачать References.


Схема такая. Это репозитарий коннекторов. Они все и используют S# сборки. Так же как и проект с индикаторами. Соответственно структура проекта (файловая) должна быть как она есть в TFS. Даже если у кого-то S# был до этого скачал и распакован в какую-то директорию другую, ссылки у проекта с индикаторами не должны вести туда. Используется только локальная копия сборок.

Я думаю надо отпустить файлы. А то сейчас вы все файлы пометили как редактируемые. Еще заметил, что checkin идет с пометкой не просто edit, но и branch. Схема работы следующая:

1. Запустили студию. Открытие Source Control Explorer. Сделали на проект Connectors Get Latest Version.
2. Редактируем файл в студии. Все изменения автоматически подхватываются TFS (в отличие от SVN).
3. Хотим залить изменения. Делаем еще раз Get Latest Version. Если кто-то уже залил свои изменения, и у нас произошел конфликт, то эти конфликты правим из окна Pending Changes.
4. Идем опять в Source Control Explorer, делаем Check In. Появляется окно, где пишет обязательно комментарий и проверяем свои изменения. Иногда бывает так, что студия (или мы сами) поменяли лишнее количество файлов. Лишнее откатываем (в случае сомнений делаем diff чтобы проверить отличия). По идее, в check in должны попасть только cs и csproj файлы. Все лишнее - это уже повод для сомнений.
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 10.06.2011
Ответить


sergey.masyura, какой смысл несет замена
Код
decimal[] data = new decimal[]

на
Код
var data = new[]

Конструкция тут не трехэтажная, сильно проще она не сталаConfused
Спасибо:

Sergey Masyura

Фотография
Автор статей
Дата: 10.06.2011
Ответить


esper Перейти
sergey.masyura, какой смысл несет замена
Код
decimal[] data = new decimal[]

на
Код
var data = new[]

Конструкция тут не трехэтажная, сильно проще она не сталаConfused


Конструкция стала проще. Это не С++, поэтому разумно использовать возможности языка С# полностью.
Спасибо:

esper

Фотография
Программист
Дата: 10.06.2011
Ответить


sergey.masyura Перейти
Конструкция стала проще. Это не С++, поэтому разумно использовать возможности языка С# полностью.

var действительно очень классная штука, особенно там где приходится использовать анонимные типы, конструкции вида IEnumerable<IGrouping<string, int>>, я даже согласен с тем, чтобы первый decimal заменить на varSmile , но второй decimal говорит о типе, а тут получается конструкция, о типе данных в которой можно только догадываться, поэтому я не вижу здесь никакого упрощения.
Спасибо:

ddsfx

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


можно занять индикаторы на будущее?

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

стохастик, пайвот пойнтс, сглаженный впр - после НЧ фильтра.

Насколько сложно реализовать профиль рынка?



код на mq4 есть.
mp.zip 34 KB (0)
Спасибо:

artemox

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


esper Перейти
выскажу некоторые предложения по проекту:
1. Как уже писал выше, предлагаю использовать уже готовые индикаторы повторно, а не писать каждый раз все под себя, во-первых, не будет лишнего дублирования кода, во-вторых, код индикаторов становится более компактным и понятным, в-третьих, это позволит лишний раз протестировать уже написанные индикаторы.

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

3. По поведению индикаторов:
- если индикатор еще не сформировался, то его значение равно 0
- пока индикатор не сформировался, событие Changed не вызывается
- после того как индикатор сформировался, событие Changed вызывается при каждом добавлении нового значения
- функция Add принимает или decimal или Candle

4. При коммите указывать какие изменения были внесены, коммиты делать только для работающих версий (по минимуму проект должен собираться)

5. Xml комментарии писать на одном языке


Коллеги, все согласны с esper? Предагаю это в первый пост перенести (Михаил, это только Вы сможете сделать?)
Также как и файл "Таблица индикаторов.xls" от Maxim-а (55 пост).

Насчет тестирования предлагаю всем использовать TextTestReader (пример в MomentumTest). Тест делается быстро и надежно.
Спасибо:

artemox

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


ddsfx, обращайся сюда, думаю будет наиболее эффективно.
Профиль необычный индикатор, сейчас интерфейс на него не заточен. Имхо он сам по себе.
Спасибо:

artemox

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


sergey.masyura Перейти

Всем спасибо за огромный вклад в проект!

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

InsiderHSE

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


Сделал индикаторы из WealthLab - LinearReg, LinearRegSlope, RSquared, StdError плюс Unit тесты к ним.
Также добавил для производительности индикатор LinearRegression, который содержит все 4 предыдущих в соответствующих свойствах (только для LinearReg св-во называется Forecast), чтобы по несколько раз не гонять регрессию если нужны несколько индикаторов.
Спасибо:

maze9a

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


artemox Перейти

Коллеги, все согласны с esper? Предагаю это в первый пост перенести (Михаил, это только Вы сможете сделать?)
Также как и файл "Таблица индикаторов.xls" от Maxim-а (55 пост).

Насчет тестирования предлагаю всем использовать TextTestReader (пример в MomentumTest). Тест делается быстро и надежно.


Я с предложениями от esper согласен. Еще есть предложения: не называть файлы для юнит тестов громозкими именами, а называть их просто по имени индикатора, а в самом файле первой строчкой сделать коментарий где описать формат данных и всю необходимую инфу по тесту и индикатору. Уверен, что пропуск коментария не сложно сделать в TextTestReader.
Спасибо:

maze9a

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


artemox я посмотрел твой комент в MomentumTest, у меня тоже вылезает такая ошибка, поэтому я не стал использовать Assert из Ecng.UnitTesting. Если разберешся в чем тут проблема напиши пожалуйста.
Спасибо:
<< < 2 3 4 5 6  > >>

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

loading
clippy