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

Теги:


Спасибо:


<< < 13 14 15 16 17  > >>
Maxim

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


По тестам наблюдение.

Есть данные из Ами.

SaveValues(folder+"VMA.txt", Sum(V*C,20)/Sum(V,20));

Код

179060,179395,178505,179240,76663,178174.53125000
179245,179995,178855,179695,59589,178212.98437500
180910,181810,180910,181535,45414,178285.53125000
181555,181690,181110,181135,66098,178421.76562500
181135,181935,180935,181860,108430,178829.85937500
181850,182115,181355,181695,88335,179129.93750000
181700,181770,179740,179890,141672,179345.32812500
179885,180240,179560,179615,70581,179444.46875000
179625,179725,178955,179170,100643,179531.73437500
179170,180200,179055,180000,57874,179622.51562500
179965,180590,179620,180365,49886,179658.54687500
180340,180840,179700,179865,67803,179673.57812500
179850,180450,179730,180345,46388,179703.79687500
180340,180600,179960,180450,45855,179827.32812500
180445,180690,180275,180420,30355,179892.65625000
180410,180445,179320,180000,117375,179929.85937500
180015,180030,179180,179530,73419,179948.39062500
179525,180870,179360,179490,121644,179997.76562500
179490,180120,179100,179850,113072,180077.23437500
179840,180030,179300,179735,43616,180148.73437500


Согласно этим данным VMA = 180148.734375
Если посчитать эти же данные в экселе, то VMA = 180148.741408213
Если посчитать в S#, то VMA = 180148.74140821348556317520948

Это что получается?
Что ами не надежный источник для тестирования?
Какая-то адская погрешность (0.01) для такого несложного индикатора.

Спасибо:

esper

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


Maxim Перейти

Согласно этим данным VMA = 180148.734375
Если посчитать эти же данные в экселе, то VMA = 180148.741408213
Если посчитать в S#, то VMA = 180148.74140821348556317520948

Это что получается?
Что ами не надежный источник для тестирования?
Какая-то адская погрешность (0.01) для такого несложного индикатора.

В процентном соотношении это совсем немного, где-то 1e-6
Спасибо:

artemox

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


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

Согласно этим данным VMA = 180148.734375
Если посчитать эти же данные в экселе, то VMA = 180148.741408213
Если посчитать в S#, то VMA = 180148.74140821348556317520948

Это что получается?
Что ами не надежный источник для тестирования?
Какая-то адская погрешность (0.01) для такого несложного индикатора.

В процентном соотношении это совсем немного, где-то 1e-6


Вот оно как!
Я кстати тоже заметил на стохастике увеличенную погрешность (если ориентироваться на количество знаков после запятой), т.к. было умножение результата на 100.

Получается что проверку нужно делать таким образом :
Assert.IsTrue(Math.Max(indicator.Value, item.Value1) / Math.Min(indicator.Value, item.Value1) - 1 < 0.000001m);

Или искать более точный источник (хотя правильность расчетов будет подтверждена и данными из ами)
Спасибо:

artemox

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


sergey.masyura Перейти
artemox Перейти
sergey.masyura,
как победить ошибку "Невозможно загрузить файл или сборку "Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" или один из зависимых от них компонентов. Не удается найти указанный файл." возникающую например при вызове sma.Value.AssertEqual((decimal)data.Average()); ?

Не у одного меня такая ерунда :(


Как вариант файлы из аттача распоковать в c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\

По идее все это ставится в VS 2010 Ultimate.



У меня 2010 проф.
Папки PublicAssemblies не было. Создал папку и добавил файлы.
При добавлении ссылки в проект файлы из PublicAssemblies в списке появились.
Добавил в IndicatorsTest ссылку на Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll, ошибка все равно не исчезла.

Заменю ка на Assert.IsTrue? Все равно эта ошибка только в sma осталась.
Никто не против?
Спасибо:

artemox

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


Mikhail Sukhov Перейти
esper Перейти
Mikhail Sukhov Перейти
40 индюков! Это уже больше чем у ТСЛаб. Такими темпами из до лидеров ТА рынка добежим до осени.

Пора начинать думать над разработкой визуализатора[smile]


Это точно. Вот думаю, а не залить ли сырцы Ecng.Trading.Xaml да и сделать на основе CandleChart рисовалку всех этих индюков. Примеры Chart из .NET меня удивили по хорошему, особенно раздел финансы (приложил к сообщению). Я так прикинул, что большинство индюков имею одинаковый вид отрисовки. А значит и работа будет значительно меньше, чем я предполагал в самом начале.


А заливайте, дело то затягивающее :)
Спасибо:

artemox

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


Mikhail Sukhov Перейти
artemox Перейти
Mikhail Sukhov Перейти
40 индюков! Это уже больше чем у ТСЛаб. Такими темпами из до лидеров ТА рынка добежим до осени.

[scared] 8 маек!


У нас уже 8 человек сделали по 5 индюков?

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


Это больше шутка, чем намек :) Подождите релиза, а там и плюшки можно раздавать
Спасибо:

artemox

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


esper Перейти
artemox Перейти
Появилась идея сделать класс TestTestExecuter.
Но тогда необходимо создать базовый класс с методами Add(Candle), Add(decimal), Value, IsFormed.
Понятно, что не все индикаторы укладываются в один Value, но большинство индюков будут приобщены к одному интерфейсу.

Здравая идея, думаю в визуализаторе это тоже пригодится


Коллеги, на ваш суд SimpleIndicator.
Может быть устраним базовый Ma? и все пронаследуем от SimpleIndicator?
Спасибо:

Sergey Masyura

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


artemox Перейти
esper Перейти
artemox Перейти
Появилась идея сделать класс TestTestExecuter.
Но тогда необходимо создать базовый класс с методами Add(Candle), Add(decimal), Value, IsFormed.
Понятно, что не все индикаторы укладываются в один Value, но большинство индюков будут приобщены к одному интерфейсу.

Здравая идея, думаю в визуализаторе это тоже пригодится


Коллеги, на ваш суд SimpleIndicator.
Может быть устраним базовый Ma? и все пронаследуем от SimpleIndicator?


Само название SimpleIndicator уже не очень подходит для базового класса.
Спасибо:

Sergey Masyura

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


artemox Перейти
sergey.masyura Перейти
artemox Перейти
sergey.masyura,
как победить ошибку "Невозможно загрузить файл или сборку "Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" или один из зависимых от них компонентов. Не удается найти указанный файл." возникающую например при вызове sma.Value.AssertEqual((decimal)data.Average()); ?

Не у одного меня такая ерунда :(


Как вариант файлы из аттача распоковать в c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\

По идее все это ставится в VS 2010 Ultimate.



У меня 2010 проф.
Папки PublicAssemblies не было. Создал папку и добавил файлы.
При добавлении ссылки в проект файлы из PublicAssemblies в списке появились.
Добавил в IndicatorsTest ссылку на Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll, ошибка все равно не исчезла.

Заменю ка на Assert.IsTrue? Все равно эта ошибка только в sma осталась.
Никто не против?


Если поможет - наздоровье. Раз такая большая проблема у всех с тестами, может вобще стоит про NUnit подумать?
Спасибо:

Maxim

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


Индикаторы Peak и Trough.

Столкнулся с тем, что мое понимание этих индикаторов отличается от того, которое в Ами.
Прошу помочь разобраться, какая интерпретация верная.


1) Описание в Лабе: http://www2.wealth-lab.com/WL5Wiki/Trough.ashx


2) Первое различие.
В описании ясно сказано, что
«During these bars the Trough function will not return $20, but will instead return the value of the previous trough.»

В ами же значение индикатора становится равным $20 раньше. Как будто они уже знают будущее.
Пример данных из ами.
Код

191090,191250,191060,191150,7066,187400.00000000
191150,191205,190445,190585,16283,187400.00000000
190575,190960,190450,190935,12038,187400.00000000
190935,191050,190775,190955,9648,187400.00000000
190970,190970,190320,190400,12287,187400.00000000
190400,190470,190150,190220,18255,190220.00000000
190220,190740,190155,190665,12442,190220.00000000
190680,190860,190505,190640,11811,190220.00000000
190640,190850,190425,190800,10218,190220.00000000
190800,191100,190675,191100,10841,190220.00000000


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

Если остановимся на моем варианте, то данные из ами для тестов не подходят.

Вопрос: какой вариант реализуем в S#?

3) Второе различие.
Второе различие более неопределенное. Так как в описании оно не рассматривается.

Мое понимаение: график индикатора представляет из себя лестницу вверх(peak), или вниз (trough).
Тоесть график показывает глобальный максимум или минимум на всем пройденном интервале.

Если посмотреть на данные Trough из Ами:
Код

188395,188435,188080,188125,13367,182985.00000000
188130,188140,187650,187750,20700,182985.00000000
187775,187775,187460,187615,20565,182985.00000000
187615,187630,187280,187400,15589,187400.00000000
187415,187740,187275,187610,14105,187400.00000000
187625,187765,187530,187760,7779,187400.00000000
187745,187850,187545,187560,10627,187400.00000000
187550,187715,187380,187605,9178,187400.00000000
187620,187970,187565,187860,8184,187400.00000000

................................................

191090,191250,191060,191150,7066,187400.00000000
191150,191205,190445,190585,16283,187400.00000000
190575,190960,190450,190935,12038,187400.00000000
190935,191050,190775,190955,9648,187400.00000000
190970,190970,190320,190400,12287,187400.00000000
190400,190470,190150,190220,18255,190220.00000000
190220,190740,190155,190665,12442,190220.00000000
190680,190860,190505,190640,11811,190220.00000000
190640,190850,190425,190800,10218,190220.00000000


то график индикатора Trough будет представлять собой ступеньки то вверх, то вниз.
Могу предположить, что они считают локальный минимум, а не глобальный.
Тоесть, если после локального минимума был локальный максимум, а после этого опять локальный минимум, то они
берут для индикатора значения этих минимумов. Правильно ли я понял? Или они делают по другому?

Вопрос: какой вариант верный и что реалиуем в S#?
Спасибо:
<< < 13 14 15 16 17  > >>

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

loading
clippy