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


Индикатор - рефакторинг
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  > >>
esper

Avatar
Date: 6/16/2011
Reply


Mikhail Sukhov Go to
Давайте разнесем индюки по разным папкам. Я создал 2 - для тренд и волатильность. Подозреваю, что их недостаточно. При переносе файла так же нужно менять и namespace чтобы было правильнее с точки зрения C#.

Может сделаем трендовые, объема и осциляторы?

Mikhail Sukhov Go to
Есть 2 класса - SingleValueIndicator и LengthIndicator. Предлагаю свои индюки отнаследовать именно от них (какой именно подойдет можно понять по коду).

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

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

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

В другой теме решили делать полное название, это конечно громоздко, но не будет путаницы
Thanks:

Mikhail Sukhov

Avatar
Date: 6/16/2011
Reply


esper Go to

Может сделаем трендовые, объема и осциляторы?

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


Согасен по обоим пунктам.

Mikhail Sukhov Go to
В другой теме решили делать полное название, это конечно громоздко, но не будет путаницы


Я для себя лично узнал в процессе переименования, что такое Smma[laugh]
Thanks:

Maxim

Avatar
Date: 6/16/2011
Reply


Добрый день, коллеги.

Завтра ухожу в отпуск. Не смогу сделать рефакторинг.
Надеюсь то что я написал не очень будет трудно кому нибудь переделывать.

Небольшой отчет.
Сделал 12 индикаторов:
Peak, PeakBar, QStick, TRIX, Trough, TroughBar, UltimateOsc, VHF, Vidya, VMA, Volatility, WilliamsR


Тесты проходят следующие индикаторы:
QStick, UltimateOsc, VHF, VMA, WilliamsR

По следующим индикаторам нет тестов, потому что нет данных на чем их тестить:
PeakBar, TroughBar, Vidya

По индикаторам Peak и Trough я писал раньше. Вопрос все еще открыт.
http://stocksharp.com/posts/m/8891/

Индикатор Volatility:
у нас и у Ами разное понимание, когда начинать рассчитывать индикатор.
Для иллюстрации прикладываю сводную таблицу, в которой показывается, что в Ами
расчет индикатора начинается позже. Подозреваю, что у нас верный подход, а в Ами нет.

Индикатор TRIX.
Аналогично, в Ами начинают расчет не тогда, когда в моем индикаторе.
Либо я ошибаюсь в понимании реализации, либо в Ами.
В этом индикаторе используется тройная скользящая средняя:
Code

public void Add(decimal newValue)
{
    ema1.Add(newValue);

    if (ema1.IsFormed == true)
    {
        ema2.Add(ema1.Value);

        if (ema2.IsFormed == true)
        {
            ema3.Add(ema2.Value);

            if (ema3.IsFormed == true)
            {
                roc.Add(ema3.Value);

                if (roc.IsFormed == true)
                {
                    Value = roc.Value;
                    RaiseChangedEvent();
                }
            }
        }
    }
}


В Ами этот индиктор начинают рассчитывать начиная с 21 значения (при параметре 20).
Тогда как в вышеописанной реализации индикатор начинает рассчитываться с 78 значения.
Опять же, считаю, что у меня верно. Но нужен взгляд со стороны на этот вопрос.

Если будут вопросы, пишите в личку.
По возможности буду заглядывать на форум.
Всем удачи и хорошего настроения.
Volatility.xls 18 KB (285)
Thanks:

Mikhail Sukhov

Avatar
Date: 6/16/2011
Reply


Maxim Go to
Добрый день, коллеги.

Завтра ухожу в отпуск.


Желаю хорошо отдохнуть!
Thanks:

Sergey Masyura

Avatar
Date: 6/17/2011
Reply


Mikhail Sukhov Go to
Maxim Go to
Добрый день, коллеги.

Завтра ухожу в отпуск.


Желаю хорошо отдохнуть!


Хорошего отдыха!
Thanks:

artemox

Avatar
Date: 6/21/2011
Reply


А кто с R# поможет? Какая версия нужна?
Thanks:

Mikhail Sukhov

Avatar
Date: 6/21/2011
Reply


artemox Go to
А кто с R# поможет? Какая версия нужна?


5.1.3
Thanks:

artemox

Avatar
Date: 6/21/2011
Reply


Михаил, что значит <Файл должен быть "зеленым">.
у Вас LengthIndicator зеленый?
Thanks:

Mikhail Sukhov

Avatar
Date: 6/21/2011
Reply


artemox Go to
Михаил, что значит <Файл должен быть "зеленым">.
у Вас LengthIndicator зеленый?


Когда поставите R#, увидите полосу справа от кода. Попереключайтесь между файлами и все поймете.
Thanks:

artemox

Avatar
Date: 6/21/2011
Reply


Так и сделал, но LengthIndicator с желтым кубиком, поэтому и спросил.

ЗЫ:
У меня юбилей на форуме - 100 сообщений [cool]
Thanks:
1 2 3  > >>

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

loading
clippy