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

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


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

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

artemox

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


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

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

artemox

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


maze9a Перейти

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


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

artemox

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


Maxim Перейти

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


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

artemox

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


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

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


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


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

esper

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


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

artemox

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


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));
Спасибо: esper

esper

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


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

artemox

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


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

esper

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


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

artemox

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


Сори, это моя ошибка. Формат заточен под РИ.
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 );
}
}
Спасибо:

Maxim

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


esper Перейти

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


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

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

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

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

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

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

Maxim

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


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

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


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


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

esper

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


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 );
}
}

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

Mikhail Sukhov

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


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

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

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


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

esper

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


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

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

Maxim

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


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

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

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

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

Спасибо:

artemox

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


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

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

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

artemox

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


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

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

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

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



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


Спасибо:

Maxim

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


artemox Перейти

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


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

artemox

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


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

Maxim

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


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


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











Спасибо:

Sergey Masyura

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


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

esper

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


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

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

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

artemox

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


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 ) ));
Спасибо:
<< < 3 4 5 6 7  > >>

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

loading
clippy