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


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

Tags:


Thanks:




340 Answers
<< < 3 4 5 6 7  > >>
artemox

Avatar
Date: 6/10/2011
Reply


maze9a Перейти
artemox я посмотрел твой комент в MomentumTest, у меня тоже вылезает такая ошибка, поэтому я не стал использовать Assert из Ecng.UnitTesting. Если разберешся в чем тут проблема напиши пожалуйста.

Я думаю тут нам быстрее помогут создатели Ecng.UnitTesting
Thanks:

artemox

Avatar
Date: 6/10/2011
Reply


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

Тогда тестирование можно будет оформлять в виде строчки:
TextTestExecuter.ByClosePrice(new Momentum(20), _dataUri);
Thanks:

artemox

Avatar
Date: 6/10/2011
Reply


maze9a Перейти

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


Вобщем здравая мысль. Переделаю :)
Thanks:

artemox

Avatar
Date: 6/10/2011
Reply


Maxim Перейти

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


Maxim, давайте все-таки переиспользовать другие индикаторы. ООП как никак.
К примеру сравните WilliamsR и StochasticK, теоретически расчеты очень похожы, а разница в реализации колосальная.
Thanks:

artemox

Avatar
Date: 6/10/2011
Reply


artemox Перейти
maze9a Перейти

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


Вобщем здравая мысль. Переделаю :)


TextTestReader теперь игнорирует строки-комментарии, начинающиеся с символа "#".
Соответственно все свои тест-файлы назвал по имени индикатора и внутри снабдил строчкой с описанием.
Thanks:

esper

Avatar
Programmer
Date: 6/10/2011
Reply


artemox, данные для тестов выгружаются из AmiBroker? Можете вкратце объяснить как это сделать?
Thanks:

artemox

Avatar
Date: 6/10/2011
Reply


function SaveValues(filename, values)
{
fh = fopen( filename, "w");
if( fh )
{
StartBar = Max(0, BarCount-200);
for (i = StartBar; i < BarCount; i++)
{
ds = StrFormat(
"%.0f"+
",%.0f"+
",%.0f"+
",%.0f"+
",%.0f"+
",%.8f"+
"\n",
O[i], H[i], L[i], C[i], V[i], values[i]);
fputs( ds, fh );
}
fclose( fh );
}

}

SaveValues("D:\\StochK.txt",StochK(25, 1));
Thanks: esper

esper

Avatar
Programmer
Date: 6/10/2011
Reply


А каким образом указывается бумага для которой экспортируем данные?
Thanks:

artemox

Avatar
Date: 6/10/2011
Reply


Текущая бумага (выбранная в выпадающем списке) и будет экспортироваться.
Если инд считается по одному значению, а не по всей свече, то указывается так: ROC( Close, 30)
Thanks:

esper

Avatar
Programmer
Date: 6/10/2011
Reply


Что-то не выходит выгрузить данные. В амиброкере импортирую данные из метастока, открывается график, добавляю новую формулу, после применения создается файл, но там данные левые, т.е. цена в свечках с дробной частью, а в файле все числа целые
Thanks:

artemox

Avatar
Date: 6/10/2011
Reply


Сори, это моя ошибка. Формат заточен под РИ.
ds = StrFormat(
"%.0f"+
",%.0f"+
",%.0f"+
",%.0f"+
Вот здесь вместо нуля укажите количество знаков после запятой в вашем инструменте.

Думаю так будет универсально:

function SaveValues(filename, values)
{
fh = fopen( filename, "w");
if( fh )
{
StartBar = Max(0, BarCount-200);
for (i = StartBar; i < BarCount; i++)
{
ds = StrFormat(
"%.4f"+
",%.4f"+
",%.4f"+
",%.4f"+
",%.0f"+
",%.6f"+
"\n",
O[i], H[i], L[i], C[i], V[i], values[i]);
fputs( ds, fh );
}
fclose( fh );
}
}
Thanks:

Maxim

Avatar
Date: 6/11/2011
Reply


esper Перейти

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


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

Считаю, что лучше не генерировать данные внутри теста, а использовать внешние данные.
И, повторюсь, лучше унифицировать этот способ.

MomentumTest мне нравится. Только надо ввсети погрешность — плюс-минус дельта величину,
когда мы будем считать, что значение верно.

2) Возможно, тесты стоит сделать одному человеку.
В этом случае будет все более унифицировано.
Методом копипаст не очень трудно сделать тесты для каждого индикатора из MomentumTest.

3) Я не могу делать юнит тесты, так как у меня нет возможности создавать файлы.
Не пользуюсь я сторонними программами.

Оффтоп:
а) В список правил стоит добавить пункт-напоминание, что бы все делали проверку на деление на ноль где это возможно.
б) Что насчет потокобезопасности? Стоит ли ее реализовывать в индикаторах или нет?
Thanks:

Maxim

Avatar
Date: 6/11/2011
Reply


artemox Перейти
Maxim Перейти

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


Maxim, давайте все-таки переиспользовать другие индикаторы. ООП как никак.
К примеру сравните WilliamsR и StochasticK, теоретически расчеты очень похожы, а разница в реализации колосальная.


Ок. Не обратил внимание на существование LLV и HHV.
Thanks:

esper

Avatar
Programmer
Date: 6/11/2011
Reply


artemox Перейти
Думаю так будет универсально:

function SaveValues(filename, values)
{
fh = fopen( filename, "w");
if( fh )
{
StartBar = Max(0, BarCount-200);
for (i = StartBar; i < BarCount; i++)
{
ds = StrFormat(
"%.4f"+
",%.4f"+
",%.4f"+
",%.4f"+
",%.0f"+
",%.6f"+
"\n",
O[i], H[i], L[i], C[i], V[i], values[i]);
fputs( ds, fh );
}
fclose( fh );
}
}

Спасибо, теперь все нормально.
Thanks:

Mikhail Sukhov

Avatar
Articles author Programmer Trader
Date: 6/11/2011
Reply


artemox Перейти
sergey.masyura Перейти

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

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


40 индюков! Это уже больше чем у ТСЛаб. Такими темпами из до лидеров ТА рынка добежим до осени.
Topic starter
Thanks:

esper

Avatar
Programmer
Date: 6/11/2011
Reply


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

Пора начинать думать над разработкой визуализатораSmile
Thanks:

Maxim

Avatar
Date: 6/11/2011
Reply


Предложение.
Что бы не было путаницы, называть индикаторы согласно тому, как их называют здесь:
http://www2.wealth-lab.c...at=Standard%20Indicators

Насколько я понял:
StochK = StochasticK
Highest = HHV
Lowest = LLV

Првильно? Может переименовать?

Нужно ли делать отдельныне BBandLower и BBandUpper, если уже сделан BollingerBands общий?

Thanks:

artemox

Avatar
Date: 6/11/2011
Reply


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

Scared 8 маек!
На самом деле, сейчас индюки пишутся на раз два. Например DPO с тестом нарисовал за 20 минут, + отладка 40 минут :)

Вот только нужен ли этот DPO кому-нибудь? :)
Thanks:

artemox

Avatar
Date: 6/11/2011
Reply


Maxim Перейти
Предложение.
Что бы не было путаницы, называть индикаторы согласно тому, как их называют здесь:
https://www2.wealth-lab.c...at=Standard%20Indicators

Насколько я понял:
StochK = StochasticK
Highest = HHV
Lowest = LLV

Првильно? Может переименовать?

Нужно ли делать отдельныне BBandLower и BBandUpper, если уже сделан BollingerBands общий?



Да правильно, но HHV и LLV это имена из амиброкера, т.к. Highest и Lowest там имеют другое предназначение
Может в таблицу алтернативные имена добавить?
StochK переименовал


Thanks:

Maxim

Avatar
Date: 6/11/2011
Reply


artemox Перейти

Да правильно, но HHV и LLV это имена из амиброкера, т.к. Highest и Lowest там имеют другое предназначение
Может в таблицу алтернативные имена добавить?


В этом случае можно составить экселик, где будут три столбика "Как у нас называется", "Как в амиброкере", "Как в лабе".
Thanks:

artemox

Avatar
Date: 6/11/2011
Reply


я за.
кстати могу выгрузить тесты для индикаторов, только скажите - какие?
Thanks:

Maxim

Avatar
Date: 6/11/2011
Reply


artemox Перейти
я за.
кстати могу выгрузить тесты для индикаторов, только скажите - какие?


Peak, PeakBar, QStick, TRIX, Trough, TroughBar, UltimateOsc, VHF, Vidya, VMA, Volatility, WilliamsR











Thanks:

Sergey Masyura

Avatar
Articles author
Date: 6/11/2011
Reply


BB фейлится, потому что первое значение EMA считается как SMA, а когда экспортировали данные оно, видимо, строилось на основе предыдущих значений.
Thanks:

esper

Avatar
Programmer
Date: 6/11/2011
Reply


sergey.masyura Перейти
BB фейлится, потому что первое значение EMA считается как SMA, а когда экспортировали данные оно, видимо, строилось на основе предыдущих значений.

Для BB еще не переписывал тест с использованием файлов, пусть пока фейлится, на днях разберусь.

Кстати, у меня и MACD не сходится, видимо тоже из-за Ema
Thanks:

artemox

Avatar
Date: 6/11/2011
Reply


Maxim Перейти

Peak, PeakBar, QStick, TRIX, Trough, TroughBar, UltimateOsc, VHF, Vidya, VMA, Volatility, WilliamsR


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

SaveValues(folder+"Peak.txt", Peak(C,20));
//SaveValues(folder+"PeakBar.txt", PeakBar(C,20));
SaveValues(folder+"QStick.txt", MA(C-O,20));
SaveValues(folder+"Trix.txt", Trix(20));
SaveValues(folder+"Trough.txt", Trough(C,20));
//SaveValues(folder+"TroughBar.txt", TroughBar(C,20));
SaveValues(folder+"UltimateOSC.txt", Ultimate(7,14,28));
SaveValues(folder+"VHF.txt", (HHV(C,20)-LLV(C,20))/Sum(abs(C-Ref(C,-1)),20));
//SaveValues(folder+"Vidya.txt", Vidya(C,20));
//SaveValues(folder+"VMA.txt", VMA(C,20));
SaveValues(folder+"Volatility.txt", ROC( EMA( High - Low, 20 ), 20 ));
SaveValues(folder+"WilliamsR.txt", -100 * ( HHV( H, 20 ) - C )/( HHV( H, 20 ) - LLV( L, 20 ) ));
Thanks:
<< < 3 4 5 6 7  > >>

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy