Индикатор - рефакторинг


Индикатор - рефакторинг
Atom
6/16/2011


Первый существенный рефакторинг. Произвести нужно, различий уже много в каждом из индюков. Что бросилось в глаза:


  1. Класса нужно объявлять public. Иначе их не будет видно с наружи (в роботе).
  2. Предлагаю все воспользоваться R# и применить выложенные настройки (применять через аддон к R# - rsm.codeplex.com). Файл должен быть "зеленым", в идеале вообще без меток.
  3. Давайте разнесем индюки по разным папкам. Я создал 2 - для тренд и волатильность. Подозреваю, что их недостаточно. При переносе файла так же нужно менять и namespace чтобы было правильнее с точки зрения C#.
  4. Есть 2 класса - SingleValueIndicator и LengthIndicator. Предлагаю свои индюки отнаследовать именно от них (какой именно подойдет можно понять по коду).
  5. Имена. Будем делать длинными? Посмотрите как получилось со скользящими. Нормально? Если да, то давайте и свои так же переделаем.


Tags:


Thanks:


< 1 2 3 4  >
artemox

Avatar
Date: 6/22/2011
Reply


Кстати теперь можно использовать TestRunner вот так:

[TestMethod]
public void Momentum()
{
TestRunner.ByClosePrice(new Momentum(20));
}

При этом само определяется имя тестового файла (файл должен совпадать с наименованием класса индикатора)
Погрешность по умолчанию 0.000001m.
Все можно задавать индивидуально в параметрах вызова.
Thanks:

InsiderHSE

Avatar
Date: 6/23/2011
Reply


artemox Go to
Кстати теперь можно использовать TestRunner вот так:

[TestMethod]
public void Momentum()
{
TestRunner.ByClosePrice(new Momentum(20));
}

При этом само определяется имя тестового файла (файл должен совпадать с наименованием класса индикатора)
Погрешность по умолчанию 0.000001m.
Все можно задавать индивидуально в параметрах вызова.


Проверка Assert.IsTrue(Math.Max(indicator.Value, item.Value) / Math.Min(indicator.Value, item.Value) - 1 < epsilon)
работает только в области положительных значений. Если, например, реальное значение индикатора равно -1, а получилось -2, то такая ситуация пройдет тест. Исправил на Assert.IsTrue(Math.Abs(indicator.Value / item.Value - 1) < epsilon).

Также в случае ошибки деления на ноль, необходимо также удостовериться, что рассчитанное значение индикатора не отличается от нуля больше чем на эпсилон. Assert.IsTrue(Math.Abs(indicator.Value) < epsilon)

Также добавил возможность выбора, какой именно item.Value из файла нужно брать, и вывел разделитель как параметр.
Thanks:

Mikhail Sukhov

Avatar
Date: 6/27/2011
Reply


Сделал IndicatorManager - автоматически из источника данных (я думаю, популярное это менеджер свечек) формирует данными новые значения для индюков.

Просьба к авторам индюков. Расскидайте по папкам свои классы. Чтобы все были сгруппированы по типам индикаторов.
Thanks:

InsiderHSE

Avatar
Date: 6/30/2011
Reply


Mikhail Sukhov Go to
Сделал IndicatorManager - автоматически из источника данных (я думаю, популярное это менеджер свечек) формирует данными новые значения для индюков.

Просьба к авторам индюков. Расскидайте по папкам свои классы. Чтобы все были сгруппированы по типам индикаторов.


На мой взгляд, разбивать индикаторы по типам не нужно. От этого минусов больше, чем плюсов. Например, LinearRegressionSlope относится к трендовым, так как показывает наклон, а StandardError вроде как к волатильности, но специфической, тесно связан с LinearRegressionSlope и разработчик/пользователь по всей вероятности будет ожидать увидеть их в одной папке. Кроме того, индикатор RSquared, хотя формально можно отнести к волатильности, но используется в основном для оценки качества регресии, поэтому такая его классификация неочевидна.
Более того, когда разработчик хочет использовать какой-либо индикатор, он обычно знает его название, и найти его в общей папке труда не составит. Но если папок несколько, то ему придется еще думать, к какому типу индикатор относится. Учитывая, что однозначной классификации быть не может, это уже нетривиальная задача =).
Thanks:

artemox

Avatar
Date: 6/30/2011
Reply


Поддержу InsiderHSE, тоже возникали подобные мысли.

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

ПС.
Жара не идет проекту на пользу :)
Thanks:

Sergey Masyura

Avatar
Date: 7/1/2011
Reply


artemox Go to
Поддержу InsiderHSE, тоже возникали подобные мысли.

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

ПС.
Жара не идет проекту на пользу :)


Согласен. Думаю стоит свалить все в кучу - смотрится гармоничнее. Только не очень хорошо все это смотрится вперемешку с базовыми классами.
Thanks:

Евгений

Avatar
Date: 7/1/2011
Reply


sergey.masyura Go to
artemox Go to
Поддержу InsiderHSE, тоже возникали подобные мысли.

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

ПС.
Жара не идет проекту на пользу :)


Согласен. Думаю стоит свалить все в кучу - смотрится гармоничнее. Только не очень хорошо все это смотрится вперемешку с базовыми классами.


Базовые может выделить в папку? А остальные пусть в куче, по алфавитке искать конечно проще...
Thanks:

Mikhail Sukhov

Avatar
Date: 7/1/2011
Reply


Евгений Go to
Базовые может выделить в папку? А остальные пусть в куче, по алфавитке искать конечно проще...


Я хочу переменную IIndicator создать в классе. Как мне догадаться, что нужен другой namespace?
Thanks:

artemox

Avatar
Date: 7/5/2011
Reply


Михаил, считаете нужно продолжать разносить индикаторы по категориям-нэймспейсам?

Добил последний свой индикатор DPO, но сейчас он в Misc.
Что дальше с ним делать?

ПС.
Папки в любом случае лучше оставить, чтобы было проще ориентироваться в проекте.
Thanks:

Евгений

Avatar
Date: 7/10/2011
Reply


Mikhail Sukhov Go to
Евгений Go to
Базовые может выделить в папку? А остальные пусть в куче, по алфавитке искать конечно проще...


Я хочу переменную IIndicator создать в классе. Как мне догадаться, что нужен другой namespace?


Да, наверное, никак, кроме по документации только что. Но в любом случае ориентация идет на специалистов по рынку, поэтому по категориям все-таки надо разнести.

У меня возникли следующие вопросы:

1. Можно добавить папку BillWilliams, куда поместить соответствующие индикаторы
2. Как предложение всем разработчикам: сделать конструкторы с параметрами по умолчанию для тех индикаторов, где это необходимо (период, может быть цвет линии на будущее и др.)
3. Не могу разобраться как реализовать запаздывание для линии Chinkou Span (http://www.dealingcity.ru/content/enc/enc.php?ID=24806).
Эта линия строиться по цене закрытия, смещенной на M периодов назад. Как предложение, может для индикатора нужно не только Value, но и время свечи.
Thanks:
< 1 2 3 4  >

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

loading
clippy