Sergey Masyura
|
Дата: 31.05.2011
|
|
|
|
Mikhail Sukhov  Приветствую всех участников! Месяц назад я публиковал призыв о совместной разработке индикаторов на базе C#. Прошел месяц, мною было сделано 3 стандартных индикатора SMA, EMA и WMA. И ни строчки кода ни от одного пользователя S#. Каждый день задают вопросы (причем, большинство явно не относящиеся к S# как таковому), получают ответы, но свою помощь предложить не хотят. Стесняются, наверное. Я понимаю, что дело в мотивации. Зачем помогать делать что-то, если можно подождать пару месяцев (пол года) или сделать самому, а потом пересесть на стандартное. Поэтому я решил найти мотивацию. И я ее нашел. Это лето объявляется летом " Ты мне - я тебе". Схема простая. Вы делаете индикатор - я отвечаю на три любых вопроса. Вопросы по глюкам S# остаются как есть и раньше - ответ всегда получите. Но вопросы по C#, WFP, примерам, документации, Квику и всему прочему - только за индикатор.  Я думаю честно. Тем более, сделав 5 индикаторов, вы получается доступ к репозитарию навсегда, а так же майку с символикой S#. Архив с кодом сделанных индюков прилагается в архиве. Это можно рассматривать как пример. Предлагаю работать с кодом через репозиторий stocksharp connectors на codeplex. http://stocksharpconnect.../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  А как можно подключиться. Просит логин и пароль?
|
|
|
|
Mikhail Sukhov
|
Дата: 01.06.2011
aspirant  sergey.masyura  А как можно подключиться. Просит логин и пароль? Завел логин на сайте?
|
Автор топика
|
|
|
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  Добавил в список участников проекта. Ага, есть коннект  Кто какими индикаторами будет заниматься? У меня есть Стандартное отклонение, Полосы Боллинджера и RSI, правда интерфейсы у них немного отличаются, придется поправить. В текущем проекте их еще никто не реализовал?
|
|
|
|
Mikhail Sukhov
|
Дата: 01.06.2011
esper  Mikhail Sukhov  Добавил в список участников проекта. Ага, есть коннект  Кто какими индикаторами будет заниматься? У меня есть Стандартное отклонение, Полосы Боллинджера и 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
|
Дата: 02.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...L5Wiki/ATR.ashx?HL=atr. Кстати, на мой взгляд, реализация для EMA содержить ошибки: свойство IsFormed не выставляется и похоже что само значение тоже не верно считается, т.е. формула верная, но не учитывается что количество элементов не сразу равно периоду.
|
|
|
|
Mikhail Sukhov
|
Дата: 03.06.2011
maze9a  Добавил индикатор ATR, попутно написал еще два вспомогательных TrueRange и WilderMA формулы взяты из wiki велса https://www2.wealth-lab.c...L5Wiki/ATR.ashx?HL=atr. Кстати, на мой взгляд, реализация для EMA содержить ошибки: свойство IsFormed не выставляется и похоже что само значение тоже не верно считается, т.е. формула верная, но не учитывается что количество элементов не сразу равно периоду.
- Так же как и к эсперу, табы вместо пробелов.
Codeif(IsFormed) base.RaiseChangedEvent(); Я думаю это не совсем верно. Событие Changed слушают сторонние компоненты. Например, график со свечками. Ему нужно отображать кривую, пока она не сформировалась? Почему бы нет.
- Заливая новые файлы, нужно заливать и измененный csproj. Иначе, новые файлы не видны.
По Ema - IsFormed автоматически рассчитывается. А насчет не учитывания элементов, то я не понял.
|
Автор топика
|
|
|
artemox
|
Дата: 04.06.2011
Михаил, добавьте логин artemox в список участников проекта.
|
|
|
|
Mikhail Sukhov
|
Дата: 04.06.2011
artemox  Михаил, добавьте логин artemox в список участников проекта.
|
Автор топика
|
|
|
artemox
|
Дата: 05.06.2011
Исправился
|
|
|
|
maze9a
|
Дата: 05.06.2011
|
|
|
|
Mikhail Sukhov 
- Так же как и к эсперу, табы вместо пробелов.
Codeif(IsFormed) base.RaiseChangedEvent(); Я думаю это не совсем верно. Событие Changed слушают сторонние компоненты. Например, график со свечками. Ему нужно отображать кривую, пока она не сформировалась? Почему бы нет.
- Заливая новые файлы, нужно заливать и измененный csproj. Иначе, новые файлы не видны.
По Ema - IsFormed автоматически рассчитывается. А насчет не учитывания элементов, то я не понял.
- поменял
- В моей реализации значение индикатора равно нулю до тех пор пока он полностью не сформирован (в велсе индикатор расчитывается таким же образом), поэтому нет смысла рисовать кривую пока она не сформированна. Если вызывать событие Changed до того как индикатор сформировался то скорей всего некоторым подписчикам придется проверять IsFormed, а это мне кажется лишнее.
- понятно
Я посчитал 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 и после этого значения стали совпадать с теми которые получились в велсе. Code 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
Смотрю, что число индикаторов растет, может есть смысл их сгруппировать?
|
|
|