← Back

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

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

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

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

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

Сделав 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

Comments (340)

Login or Create account, Log in or register to leave a comment

Sergey Masyura
Sergey Masyura

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

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

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

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

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

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

http://stocksharpconnectors.codeplex.com/SourceControl/changeset/changes/3952

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

aspirant
aspirant

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

http://stocksharpconnectors.codeplex.com/SourceControl/changeset/changes/3952

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

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

Mikhail Sukhov
Mikhail Sukhov Author

aspirant:

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

http://stocksharpconnectors.codeplex.com/SourceControl/changeset/changes/3952

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

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

Завел логин на сайте?

esper
esper

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

Mikhail Sukhov
Mikhail Sukhov Author

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

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

esper
esper

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

Microsoft Visual Studio

ОК

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

Mikhail Sukhov
Mikhail Sukhov Author

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

Microsoft Visual Studio

ОК

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

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

esper
esper

Mikhail Sukhov: Добавил в список участников проекта. Ага, есть коннект🙂

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

Mikhail Sukhov
Mikhail Sukhov Author

esper:

Mikhail Sukhov: Добавил в список участников проекта. Ага, есть коннект🙂

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

Пока никто не изъявлял желание.

artemox
artemox

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

Mikhail Sukhov
Mikhail Sukhov Author

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

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

artemox
artemox

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

Mikhail Sukhov
Mikhail Sukhov Author

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

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

maze9a
maze9a

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

esper
esper

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

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

Mikhail Sukhov
Mikhail Sukhov Author

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

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

maze9a
maze9a

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

Mikhail Sukhov
Mikhail Sukhov Author

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

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

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

maze9a
maze9a

Mikhail Sukhov:

  1. Так же как и к эсперу, табы вместо пробелов.
  1. ...

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

  1. Заливая новые файлы, нужно заливать и измененный 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();
		}


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

Mikhail Sukhov
Mikhail Sukhov Author

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

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

artemox
artemox

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

Mikhail Sukhov
Mikhail Sukhov Author

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
artemox

Исправился

maze9a
maze9a

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

esper
esper

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

Mikhail Sukhov
Mikhail Sukhov Author

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

По какому признаку?

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

esper
esper

Mikhail Sukhov: По какому признаку? Трендовые, осциляторы, объема

Mikhail Sukhov: Я думаю, нужно начать уже вести список сделанных и планируемых индюков. Предлагаю в отдельном топике с редактированием сообщения (добавили новый индюк - отредактировали). Хорошая идея🙂

Mikhail Sukhov
Mikhail Sukhov Author

esper: Хорошая идея🙂

Еще предлагаю список индюков для TODO. Где их взять - вопрос. Полез по ссылкам на сайт Велса, увидел это и это. Пойдет?

esper
esper

Mikhail Sukhov:

esper: Хорошая идея🙂

Еще предлагаю список индюков для TODO. Где их взять - вопрос. Полез по ссылкам на сайт Велса, увидел это и это. Пойдет? Было бы хорошо поинтересоваться у народа, какие индикаторы им нужны, тут голосование можно сделать?

Mikhail Sukhov
Mikhail Sukhov Author

esper: тут голосование можно сделать?

Можно. В окне новой темы есть галка, опрос.

esper
esper

Mikhail Sukhov: Можно. В окне новой темы есть галка, опрос. На этом сайте и других опросниках есть ограничение на число вариантов, поэтому опрос по полному списку индикаторов сделать не вышло

Mikhail Sukhov
Mikhail Sukhov Author

esper:

Mikhail Sukhov: Можно. В окне новой темы есть галка, опрос. На этом сайте и других опросниках есть ограничение на число вариантов, поэтому опрос по полному списку индикаторов сделать не вышло

Подумалось. Список индюков из Велса не спроста такой, какой он есть сейчас. Стоит ли устраивать опросник, если ребята из той команды годами набирали то, что у них сейчас в дистрибутиве? Может пройдет проторенной дорожкой и сделаем все, что у них есть? Мы уже 1/5 сделали за эти пару недель. Начали быстро.

esper
esper

Mikhail Sukhov: Подумалось. Список индюков из Велса не спроста такой, какой он есть сейчас. Стоит ли устраивать опросник, если ребята из той команды годами набирали то, что у них сейчас в дистрибутиве? Может пройдет проторенной дорожкой и сделаем все, что у них есть? Мы уже 1/5 сделали за эти пару недель. Начали быстро. Опрос хотел сделать не для того, чтобы выяснить что делать, а что нет, а с целью выяснить наиболее часто используемые индюки, т.е. что делать в первую очередь.

Mikhail Sukhov: Если будут лить из Велса, формат txt такой же будет? И да, интересно узнать, из разных программ данные будут одинаковые или как?🙂 Далеко не факт, что данные будут совпадать, например, у меня не сходится EMA с данными из QUIK.

Maxim
Maxim

Михаил, добавьте пожалуйста логин goricap. Также прошу указать пять индикаторов, которые необходимо реализовать.

Евгений
Евгений

Михаил, добавьте пожалуйста логин neuro

esper
esper

Евгений: Михаил, добавьте пожалуйста логин neuro Как писалось ранее Mikhail Sukhov: Заливая новые файлы, нужно заливать и измененный csproj. Иначе, новые файлы не видны.

esper
esper

maze9a, что-то у меня не сходится тест для Полос Боллинджера с использованием Ema(14) на исторических данных по сберу, в частности отличается именно средняя линия

P.s. так же не сходится Smma на исторических данных, хотя в RSI оно работает нормально🤨 P.P.s. Не заметил, что WilderMa и Smma одно и тоже, позже удалю Smma

maze9a
maze9a

esper: maze9a, что-то у меня не сходится тест для Полос Боллинджера с использованием Ema(14) на исторических данных по сберу, в частности отличается именно средняя линия

P.s. так же не сходится Smma на исторических данных, хотя в RSI оно работает нормально🤨 P.P.s. Не заметил, что WilderMa и Smma одно и тоже, позже удалю Smma

В велсе есть две формы для Ema modern и legacy (wiki). У нас реализована форма modern. Значения Ema, расчитаные с использованием нашей реализации, совпадают с теми которые получаются в велсе, это отражено в юнит тесте. Возможно для Полос Боллинджера нужна форма legacy? И еще, каким образом вы расчитываете значения для вашего теста?

esper
esper

maze9a: В велсе есть две формы для Ema modern и legacy (wiki). У нас реализована форма modern. Значения Ema, расчитаные с использованием нашей реализации, совпадают с теми которые получаются в велсе, это отражено в юнит тесте. Возможно для Полос Боллинджера нужна форма legacy? И еще, каким образом вы расчитываете значения для вашего теста? Тестирую на данных из Quik-а, там строю график и сохраняю его в файл, после, на базе полученных данных, делаю тест.

Велса у меня нет, у вас есть возможность выгрузить данные по Полосам Боллинджера, чтобы можно было проверить?

maze9a
maze9a

esper: Тестирую на данных из Quik-а, там строю график и сохраняю его в файл, после, на базе полученных данных, делаю тест.

Велса у меня нет, у вас есть возможность выгрузить данные по Полосам Боллинджера, чтобы можно было проверить?

Вот, данные из велса. Описание можно посмотреть здесь.

esper
esper

maze9a:

esper: Тестирую на данных из Quik-а, там строю график и сохраняю его в файл, после, на базе полученных данных, делаю тест.

Велса у меня нет, у вас есть возможность выгрузить данные по Полосам Боллинджера, чтобы можно было проверить?

Вот, данные из велса. Описание можно посмотреть здесь. Посмотрел описание, протестировал на данных из велса - легче не стало😢 Значение Ema теперь совпадает, а верхняя и нижняя граница - нет. Дело в стандартном отклонении, алгоритмы тут и тут отличаются (в первом случае сумма квадратов делится на N, во-втором на N-1), сейчас считаю по первому варианту, значения отклонения совпадают с Quik и Metastock.

maze9a
maze9a

esper:

maze9a:

esper: Тестирую на данных из Quik-а, там строю график и сохраняю его в файл, после, на базе полученных данных, делаю тест.

Велса у меня нет, у вас есть возможность выгрузить данные по Полосам Боллинджера, чтобы можно было проверить?

Вот, данные из велса. Описание можно посмотреть здесь. Посмотрел описание, протестировал на данных из велса - легче не стало😢 Значение Ema теперь совпадает, а верхняя и нижняя граница - нет. Дело в стандартном отклонении, алгоритмы тут и тут отличаются (в первом случае сумма квадратов делится на N, во-втором на N-1), сейчас считаю по первому варианту, значения отклонения совпадают с Quik и Metastock.

Понятно, а насколько большее расхождение получается с данными из Велса? У меня например так и не получилось посчитать значения для ADX точно такие же как в Велсе, расхождение порядка 1.5. И еще, многие индикаторы строятся с использованием других индикаторов, поэтому вопрос тестирования того, что мы написали, мне кажется важный и идея использовать тестовые файлы мне нравится.

esper
esper

maze9a: Понятно, а насколько большее расхождение получается с данными из Велса? У меня например так и не получилось посчитать значения для ADX точно такие же как в Велсе, расхождение порядка 1.5. И еще, многие индикаторы строятся с использованием других индикаторов, поэтому вопрос тестирования того, что мы написали, мне кажется важный и идея использовать тестовые файлы мне нравится. Конкретные цифры я сказать не могу, надо тесты писать, если примерно, то для сбера (значение цены в районе 100 рублей) где-то сотые отличаются, иногда десятые, но общая направленность индикатора совпадает

Maxim
Maxim

Mikhail Sukhov: Тем более, сделав 5 индикаторов, вы получается доступ к репозитарию навсегда, а так же майку с символикой S#.

Уточню. Доступ к репозиторию индикаторов? Или доступ к репозиторию S#?

esper
esper

Попробовал в Ema считать коэффициент по original method, но все-равно, значения Ema не совпадают с данными из Quik.

artemox
artemox

Тут уже немало писателей индикаторов. Поэтому большинство популярных и общеизвестных индюков покроем. А дальше можно и по запросу делать.

Mikhail Sukhov
Mikhail Sukhov Author

artemox: А дальше можно и по запросу делать.

А дальше все развивается по текущему сценарию. Есть вопросы и нужна помощь в программировании - пускай "платит" коллегам своей помощью.

artemox
artemox

Mikhail Sukhov: А дальше все развивается по текущему сценарию. Есть вопросы и нужна помощь в программировании - пускай "платит" коллегам своей помощью. А как платить - под заказ по маркету шарашить? :)

StochasticK RoC SUM (сам по себе может и не быть полезен, но для использования в других индикаторах пригодится)

А насчет тестирования какие идеи? Проект IndicatorsTest явно отстает от своего товарища. Мне кажется что проще будет сделать так:

  1. Создаем файлик вида а или б 1.а Price,Value 1.б Open,Hi,Lo,Close,Volume,Value
  2. В юнит тесте прогоняем индикатор по этому файлу, и когда IsFormed - сверяем значение из файла с расчетным

Наименования файлов соответственно сделать по формату IndicatorName#Parameters#TestDesription.txt

А ежели Reflection прикрутить, для автоматического запуска индикаторов по своим файлам, то это будет очень хорошо.

Mikhail Sukhov
Mikhail Sukhov Author

artemox: Наименования файлов соответственно сделать по формату IndicatorName#Parameters#TestDesription.txt

А ежели Reflection прикрутить, для автоматического запуска индикаторов по своим файлам, то это будет очень хорошо.

Хорошая идея. Если у кого-нибудь есть под рукой такая прога - заливайте в репозитарий файлы.

Насчет автоматического Reflection не совсем уверен. Делать я думаю будет дольше, чем понатыкать методы. Тем более потеряем "юнит тестовость", когда можно будет запустить конкретный юнит тест, а не ждать прогона через Reflection всех индюков. Лучше наверное будет сделать какой-то вспомогательный класс, который бы содержал максимум логики, а ему на вход индюка. Тогда бы каждый метод юнит теста занимал бы не более строчки.

artemox
artemox

Mikhail Sukhov: Хорошая идея. Если у кого-нибудь есть под рукой такая прога - заливайте в репозитарий файлы. У меня такая прога amibroker :) Завтра попробую что нибудь выгрузить и тестик написать.

Mikhail Sukhov: Насчет автоматического Reflection не совсем уверен. Делать я думаю будет дольше, чем понатыкать методы. Тем более потеряем "юнит тестовость", когда можно будет запустить конкретный юнит тест, а не ждать прогона через Reflection всех индюков. Лучше наверное будет сделать какой-то вспомогательный класс, который бы содержал максимум логики, а ему на вход индюка. Тогда бы каждый метод юнит теста занимал бы не более строчки. По всякому начнем с конкретных юнитов.

Mikhail Sukhov
Mikhail Sukhov Author

artemox:

Mikhail Sukhov: Хорошая идея. Если у кого-нибудь есть под рукой такая прога - заливайте в репозитарий файлы. У меня такая прога amibroker :) Завтра попробую что нибудь выгрузить и тестик написать.

Если будут лить из Велса, формат txt такой же будет? И да, интересно узнать, из разных программ данные будут одинаковые или как?🙂

maze9a
maze9a

Mikhail Sukhov:

artemox:

Mikhail Sukhov: Хорошая идея. Если у кого-нибудь есть под рукой такая прога - заливайте в репозитарий файлы. У меня такая прога amibroker :) Завтра попробую что нибудь выгрузить и тестик написать.

Если будут лить из Велса, формат txt такой же будет? И да, интересно узнать, из разных программ данные будут одинаковые или как?🙂

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

artemox
artemox

maze9a: Формат можно сделать любой, а вот данные думаю будут разные, но сильно они отличаться не должны иначе это будет просто смешно. На самом деле я бы очень не хотел разные расчеты на истории и в реале. Поэтому для неоднозначных индикаторов можно сделать режимы расчета, напр: AmiBrokerMode, WealthLabMode ...

Оффтоп, а я так понимаю, что большинство на ВЛ тестит историю?

artemox
artemox

А вот список с описанием формул http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators

artemox
artemox

В ами формат задается программно (fopen и вперед...) А так файлы можно разные погонять, например: SMA#50#AMI_RIM1_1MIN_CLOSE и SMA#30#WL_SBER03_1MIN_OHLCV

Sergey Masyura
Sergey Masyura

Уважаемые коллеги, указывайте, пожалуйста, commit message.

artemox
artemox

Набросал тестирование индикаторов из файла, хранящего рассчитанный результат. Пример в MomentumTest. Конечно в TextTestReader нужно будет красоту навести.

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

Maxim
Maxim

Взял себе:

VHF VMA WilliamsR Volatility UltimateOsc Vidya

Если кто то уже их делает, прошу сообщить.

esper
esper

Maxim: Взял себе:

VHF VMA WilliamsR Volatility UltimateOsc Vidya

Если кто то уже их делает, прошу сообщить.

Maxim, для чего делать Check Out полностью для всего проекта? 🤨 Если в кратце, то перед началом работ получаем последнюю версию (Get Latest Version), после чего добавляем новые файлы или правим уже существующие, после правки делаем либо Check In - если необходимо залить изменения в репозиторий, либо Undo Pending Changes - если необходимо отменить изменения. Если были добавлены новые файлы в проект, то Check In надо делать на весь проект, а не только на добавленные файлы.

Maxim
Maxim

Maxim: Maxim, для чего делать Check Out полностью для всего проекта? 🤨

Я еще не очень разбираюсь в системах колективной работы. Использовал сабвершен в своих нуждах локально.

ChechOut может повредить репозиторий? Насколько я понимаю, ChechOut это и есть способ первый раз залить себе исходники?

Так же интересно, чем пользоваться: Subversion клиентом или Visual Studio Team Explorer? Или дело вкуса?

esper
esper

Maxim: ChechOut может повредить репозиторий? Именно Check Out наврятли, возможно будут трудности, когда будет Check In, хотя это во многом зависит от системы контроля версий. Вообще, Check Out означает что я редактирую этот файл, и другим пока лучше воздержаться от его редактирования, чтобы не было проблем с мержджем изменений. Maxim: Насколько я понимаю, ChechOut это и есть способ первый раз залить себе исходники? Исходники скачиваем так же с помощью Get Latest Version Maxim: Так же интересно, чем пользоваться: Subversion клиентом или Visual Studio Team Explorer? Или дело вкуса? В этом проекте не принципиально, но у tfs есть много допольнительного функционала

Mikhail Sukhov
Mikhail Sukhov Author

Maxim: ChechOut может повредить репозиторий?

Главное, не чекинить все подряд. А только то, что действительно изменилось.

maze9a
maze9a

Maxim: Взял себе:

VHF VMA WilliamsR Volatility UltimateOsc Vidya

Если кто то уже их делает, прошу сообщить.

Maxim что вы понимаете под Volatility? Я уже делаю HV (Historical Volatility of the selected Price Series) если это оно то уже занято.

Maxim
Maxim

maze9a: Maxim что вы понимаете под Volatility? Я уже делаю HV (Historical Volatility of the selected Price Series) если это оно то уже занято.

Нет. Не HV.

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

InsiderHSE
InsiderHSE

Прошу включить меня в проект, ник InsiderHSE. И если не сложно, вкратце объяснить чем и как пользоваться для совместного редактирования проекта, у меня в этом никакого опыта нет. Сделал индикаторы, касающиеся линейной регрессии - LinearReg, LinearRegSlope, RSquared и StdError. Не знаю как залить...

Mikhail Sukhov
Mikhail Sukhov Author

InsiderHSE: Прошу включить меня в проект, ник InsiderHSE. И если не сложно, вкратце объяснить чем и как пользоваться для совместного редактирования проекта, у меня в этом никакого опыта нет. Сделал индикаторы, касающиеся линейной регрессии - LinearReg, LinearRegSlope, RSquared и StdError. Не знаю как залить...

Пользуемся Visual Studio Team Explorer http://stocksharpconnectors.codeplex.com/SourceControl/list/changesets и http://help.teamprise.com/3.1/index.jsp?topic=/com.teamprise.explorer.help/explorerdoc/index_ba.html

Maxim
Maxim

Из форума не совсем понял, кто делал 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();
}

При последовательном вызове Add с определенного момента значение Value будет равно (Buffer.Sum() / Length), потом ((newValue - base.Value) * _multiplier + base.Value), потом опять (Buffer.Sum() / Length), и так далее поочередно.

Вот такой вариант будет более верным:


if (Buffer.Count > Length - 1)
{
	Value = (newValue - Value) * multiplier + Value;			
}
else if (Buffer.Count < Length - 1)
{
	Buffer.Add(newValue);
	return;
}
else 
{
	Buffer.Add(newValue);
	Value = Buffer.Sum() / Length;
}


esper
esper

Maxim: Из форума не совсем понял, кто делал 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();

}

> 
> При последовательном вызове Add с определенного момента значение Value будет равно (Buffer.Sum() / Length),
> потом ((newValue - base.Value) * _multiplier + base.Value),
> потом опять (Buffer.Sum() / Length),
> и так далее поочередно.
Да вроде верно все, когда достигли макс. размер буфера первый раз, сработает условие

if (Buffer.Count == Length)

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

esper: Да вроде верно все, когда достигли макс. размер буфера первый раз, сработает условие

if (Buffer.Count == Length)

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

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

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

Maxim:

esper: Да вроде верно все, когда достигли макс. размер буфера первый раз, сработает условие

if (Buffer.Count == Length)

> > в следующий раз добавится новый элемент и размер списка будет Length+1 и попадем в блок *else*
> 
> Сори. Вы правы.
> Все верно.
> 
> Но все равно мой вариант краше :)
> Так как нет лишнего добавления и удаления из буфера

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

1)Хотелось бы определится, в каком случае вызывается Changed?

а) Когда отработал метод Add? Если да, то некоторые индикаторы не соответсвуют этому критерию.

б) Или когда значение Value изменилось? Если да, то аналогично многие индикаторы не соответсвуют критерию. Так как нет проверки, что новое значение Value не равно старому значению.

в) Вызывается ли это событие, если IsFormed false?

  1. Какое значение Value, пока IsFormed равно false?
esper
esper

Maxim: 1)Хотелось бы определится, в каком случае вызывается Changed?

а) Когда отработал метод Add? Если да, то некоторые индикаторы не соответсвуют этому критерию.

б) Или когда значение Value изменилось? Если да, то аналогично многие индикаторы не соответсвуют критерию. Так как нет проверки, что новое значение Value не равно старому значению.

в) Вызывается ли это событие, если IsFormed false?

  1. Какое значение Value, пока IsFormed равно false?

Тут ранее поступало предложение

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

Maxim
Maxim

esper;8772: Тут ранее поступало предложение

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

Я это читал. Поддерживаю Ваш вариант.

Но.

1)Нужен кто то, кто примит окончательное решение. Подозреваю, это должен быть Михаил. 2)Ваше предложение не отвечает на вопрос "б". Вызывать ли Change, если значение добавили, но Value не изменилось?

esper
esper

Maxim: 2)Ваше предложение не отвечает на вопрос "б". Вызывать ли Change, если значение добавили, но Value не изменилось? Зачем? Значение индикатора не изменилось.

Maxim
Maxim

esper:

Maxim: 2)Ваше предложение не отвечает на вопрос "б". Вызывать ли Change, если значение добавили, но Value не изменилось? Зачем? Значение индикатора не изменилось.

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

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

esper
esper

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

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

maze9a
maze9a

esper;8779:

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

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

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

InsiderHSE
InsiderHSE

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

Mikhail Sukhov
Mikhail Sukhov Author

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

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

Maxim
Maxim

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 назад, что бы не влиять на основной код.

InsiderHSE
InsiderHSE

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
esper

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

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

Maxim
Maxim

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

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

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

Mikhail Sukhov
Mikhail Sukhov Author

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
esper

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

Maxim
Maxim

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

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

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

esper
esper

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

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

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

Maxim
Maxim

esper:

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

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

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

Sergey Masyura
Sergey Masyura

Maxim:

esper:

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

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

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

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

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

artemox
artemox

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

esper
esper

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

Пока выскажу некоторые предложения по проекту:

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

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

  3. По поведению индикаторов:

    • если индикатор еще не сформировался, то его значение равно 0
    • пока индикатор не сформировался, событие Changed не вызывается
    • после того как индикатор сформировался, событие Changed вызывается при каждом добавлении нового значения
    • функция Add принимает или decimal или Candle
  4. При коммите указывать какие изменения были внесены, коммиты делать только для работающих версий (по минимуму проект должен собираться)

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

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

artemox
artemox

esper: выскажу некоторые предложения по проекту:

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

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

  3. По поведению индикаторов:

  • если индикатор еще не сформировался, то его значение равно 0
  • пока индикатор не сформировался, событие Changed не вызывается
  • после того как индикатор сформировался, событие Changed вызывается при каждом добавлении нового значения
  • функция Add принимает или decimal или Candle
  1. При коммите указывать какие изменения были внесены, коммиты делать только для работающих версий (по минимуму проект должен собираться)

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

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

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

maze9a
maze9a

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

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

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

esper
esper

sergey.masyura, какой смысл несет замена

decimal[] data = new decimal[]

на

var data = new[]

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

Sergey Masyura
Sergey Masyura

esper: sergey.masyura, какой смысл несет замена

decimal[] data = new decimal[]

> на
> ```
var data = new[]

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

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

esper
esper

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

ddsfx
ddsfx

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

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

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

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

код на mq4 есть.

artemox
artemox

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

InsiderHSE
InsiderHSE

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

maze9a
maze9a

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

Load more comments