Индикаторы - совместный проект
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 Ответов
1 2 3  > >>
Sergey Masyura

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


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

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

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

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

Архив с кодом сделанных индюков прилагается в архиве. Это можно рассматривать как пример.


Предлагаю работать с кодом через репозиторий stocksharp connectors на codeplex.

http://stocksharpconnect...l/changeset/changes/3952

Залил туда начальную версию.
Спасибо:

esper

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


Посмотрел исходники средних, возник такой вот вопрос. Например, для индикатора стандартного отклонения нужна средняя, сделать можно двумя вариантами: наследованием и композицией. Если использовать композицию, то у нас получится два массива входящих значений. Если же унаследоваться от средней, то только один, просто вызываем сначала Add для базового класса, после считаем отклонение, но там ни к месту будет вызов base.RaiseChangedEvent(), может его куда-то перенести?
Спасибо:

Mikhail Sukhov

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


esper Перейти
Посмотрел исходники средних, возник такой вот вопрос. Например, для индикатора стандартного отклонения нужна средняя, сделать можно двумя вариантами: наследованием и композицией. Если использовать композицию, то у нас получится два массива входящих значений. Если же унаследоваться от средней, то только один, просто вызываем сначала Add для базового класса, после считаем отклонение, но там ни к месту будет вызов base.RaiseChangedEvent(), может его куда-то перенести?


Наверное стоит перенести RaiseChangedEvent в Ma.Value, и наследоваться уже от Ma со своей реализацией Add.
Автор топика
Спасибо:

aspirant

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


sergey.masyura Перейти
Предлагаю работать с кодом через репозиторий stocksharp connectors на codeplex.

https://stocksharpconnect...l/changeset/changes/3952

Залил туда начальную версию.


А как можно подключиться. Просит логин и пароль?
Спасибо:

Mikhail Sukhov

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


aspirant Перейти
sergey.masyura Перейти
Предлагаю работать с кодом через репозиторий stocksharp connectors на codeplex.

https://stocksharpconnect...l/changeset/changes/3952

Залил туда начальную версию.


А как можно подключиться. Просит логин и пароль?


Завел логин на сайте?
Автор топика
Спасибо:

esper

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


Что-то тоже не выходит подключиться, пишет:

Microsoft Visual Studio

TF31003: Either you have not entered the necessary credentials or your user account does not have permission to connect to the Team Foundation Server at https://tfs.codeplex.com/tfs/tfs29. Click the Use different credentials link below, or ask your server administrator to add the appropriate permissions to your account.

ОК


Пробовал ввести esper_cp, esper_cp@SND, SND\esper_cp, в общем как правильно вводить логин?
Спасибо:

Mikhail Sukhov

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


esper Перейти
Что-то тоже не выходит подключиться, пишет:

Microsoft Visual Studio

TF31003: Either you have not entered the necessary credentials or your user account does not have permission to connect to the Team Foundation Server at https://tfs.codeplex.com/tfs/tfs29. Click the Use different credentials link below, or ask your server administrator to add the appropriate permissions to your account.

ОК


Пробовал ввести esper_cp, esper_cp@SND, SND\esper_cp, в общем как правильно вводить логин?


Добавил в список участников проекта.
Автор топика
Спасибо:

esper

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


Mikhail Sukhov Перейти
Добавил в список участников проекта.

Ага, есть коннектSmile

Кто какими индикаторами будет заниматься? У меня есть Стандартное отклонение, Полосы Боллинджера и RSI, правда интерфейсы у них немного отличаются, придется поправить. В текущем проекте их еще никто не реализовал?
Спасибо:

Mikhail Sukhov

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


esper Перейти
Mikhail Sukhov Перейти
Добавил в список участников проекта.

Ага, есть коннектSmile

Кто какими индикаторами будет заниматься? У меня есть Стандартное отклонение, Полосы Боллинджера и RSI, правда интерфейсы у них немного отличаются, придется поправить. В текущем проекте их еще никто не реализовал?


Пока никто не изъявлял желание.
Автор топика
Спасибо:

artemox

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


Добрый день!
Для индикаторов очень важна гарантия правильности расчетов.
Поэтому хорошо бы чтобы помимо кода индикатора разработчик указывал на каких данных проверено.
Например для себя выгружал за один период значения OHLCV+Индикатор в файл из ami и из S#, полученные файлы не должны отличаться.
У меня есть простые HHV, LLV, если получится присоединиться к репозитарию - выгружу :)
Спасибо:

Mikhail Sukhov

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


artemox Перейти
Добрый день!
Для индикаторов очень важна гарантия правильности расчетов.
Поэтому хорошо бы чтобы помимо кода индикатора разработчик указывал на каких данных проверено.
Например для себя выгружал за один период значения OHLCV+Индикатор в файл из ami и из S#, полученные файлы не должны отличаться.
У меня есть простые HHV, LLV, если получится присоединиться к репозитарию - выгружу :)


Для этого есть юнит тесты. В репозитарии уже есть код проверки для скользящих средних.
Автор топика
Спасибо:

artemox

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


Дык юнит тесты обычно пишутся тем же человеком и баги не исключены
Спасибо:

Mikhail Sukhov

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


artemox Перейти
Дык юнит тесты обычно пишутся тем же человеком и баги не исключены


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

maze9a

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


Здравствуйте, есть желание написать следующие индикаторы: HV, ADX, ATR. Если они уже заняты, дайте знать. Хорошо бы иметь табличку с теми, которые уже сделаны или уже кем-то заняты.
Спасибо:

esper

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


Эти вроде пока никто не брался делать. Я делаю Стандартное отклонение, Полосы Боллинлжера, RSI.

2Mikhail Sukhov, я сделал комит с тестом для стандартного отклонения, хотелось бы краткую рецензию на него, т.к. с юнит тестированием у меня все плохо
Спасибо:

Mikhail Sukhov

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


esper Перейти
2Mikhail Sukhov, я сделал комит с тестом для стандартного отклонения, хотелось бы краткую рецензию на него, т.к. с юнит тестированием у меня все плохо


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

maze9a

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


Добавил индикатор ATR, попутно написал еще два вспомогательных TrueRange и WilderMA формулы взяты из wiki велса http://www2.wealth-lab.c...WL5Wiki/ATR.ashx?HL=atr. Кстати, на мой взгляд, реализация для EMA содержить ошибки: свойство IsFormed не выставляется и похоже что само значение тоже не верно считается, т.е. формула верная, но не учитывается что количество элементов не сразу равно периоду.
Спасибо:

Mikhail Sukhov

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


maze9a Перейти
Добавил индикатор ATR, попутно написал еще два вспомогательных TrueRange и WilderMA формулы взяты из wiki велса https://www2.wealth-lab.c...WL5Wiki/ATR.ashx?HL=atr. Кстати, на мой взгляд, реализация для EMA содержить ошибки: свойство IsFormed не выставляется и похоже что само значение тоже не верно считается, т.е. формула верная, но не учитывается что количество элементов не сразу равно периоду.



  1. Так же как и к эсперу, табы вместо пробелов.
  2. Код
    if(IsFormed)
    base.RaiseChangedEvent();

    Я думаю это не совсем верно. Событие Changed слушают сторонние компоненты. Например, график со свечками. Ему нужно отображать кривую, пока она не сформировалась? Почему бы нет.
  3. Заливая новые файлы, нужно заливать и измененный csproj. Иначе, новые файлы не видны.


По Ema - IsFormed автоматически рассчитывается. А насчет не учитывания элементов, то я не понял.
Автор топика
Спасибо:

artemox

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


Михаил, добавьте логин artemox в список участников проекта.
Спасибо:

Mikhail Sukhov

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


artemox Перейти
Михаил, добавьте логин artemox в список участников проекта.


Цитата:
The user artemox cannot be added because the account has not been activated. Please instruct the user to go to https://www.codeplex.com/site/reconfirmEmail to request another activation email.
Автор топика
Спасибо:

artemox

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


Исправился
Спасибо:

maze9a

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


Mikhail Sukhov Перейти


  1. Так же как и к эсперу, табы вместо пробелов.
  2. Код
    if(IsFormed)
    base.RaiseChangedEvent();

    Я думаю это не совсем верно. Событие Changed слушают сторонние компоненты. Например, график со свечками. Ему нужно отображать кривую, пока она не сформировалась? Почему бы нет.
  3. Заливая новые файлы, нужно заливать и измененный csproj. Иначе, новые файлы не видны.


По Ema - IsFormed автоматически рассчитывается. А насчет не учитывания элементов, то я не понял.



  1. поменял
  2. В моей реализации значение индикатора равно нулю до тех пор пока он полностью не сформирован (в велсе индикатор расчитывается таким же образом), поэтому нет смысла рисовать кривую пока она не сформированна. Если вызывать событие Changed до того как индикатор сформировался то скорей всего некоторым подписчикам придется проверять IsFormed, а это мне кажется лишнее.
  3. понятно

Я посчитал Ema в велсе и сравнил с тем что получилось в вашей реализации, значения получились разные. Для расчета Ema на текущем шаге используется значение из предыдущего шага таким образом если первое значение расчитано не верно то и все последующие так же будут не корректные. Из описания Ema в велсе:

EMA = ( K x ( C - EMA1 ) ) + EMA1

where,
C = Current Price
EMA1 = Previous bar's EMA value (A SMA is used for the first period's calculation)
K = Exponential smoothing constant
K = 2 / ( 1 + period )

http://www2.wealth-lab.com/WL5Wiki/EMA.ashx

Я поменял реализацию Ema и после этого значения стали совпадать с теми которые получились в велсе.
Код

        public override void Add(decimal newValue)
        {
            Buffer.Add(newValue);

            if (Buffer.Count < Length)
                return;

            if (Buffer.Count == Length)
            {
                base.Value = Buffer.Sum() / Length;
            }
            else
            {
                base.Value = (newValue - base.Value) * _multiplier + base.Value;
                Buffer.RemoveAt(0);
            }

            base.RaiseChangedEvent();
        }


Я мог бы сдать эти изменения. Вы ничего не имеете против?
Спасибо:

maze9a

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


Добавил реализацию для ADX. Юнит тест не добавлял потому что значения посчитаные в велсе не совпадают с теми которые получаются в моей реализации, разница не большая но все же есть. Если будут какие-нибудь замечания по коду или самой реализации пишите.
Спасибо:

Mikhail Sukhov

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


maze9a Перейти
Я мог бы сдать эти изменения. Вы ничего не имеете против?


Посмотрел код. Думаю, вы правильнее поняли формулу чем я. Согласен насчет события для IsFormed == false и для Ema.
Автор топика
Спасибо:

esper

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


Смотрю, что число индикаторов растет, может есть смысл их сгруппировать?
Спасибо:
1 2 3  > >>

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

loading
clippy