ParabolicSar
Atom Ответить
23.03.2012


Лежит файл в репозитарии, кода нет. Кто знает как его написать, может поможете?

Теги:


Спасибо:




26 Ответов
1 2  >
Rinas Andrey

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


Могу взяться за него. Расчеты можно взять из NT7.
Спасибо:

Mikhail Sukhov

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


Rinas Andrey Перейти
Могу взяться за него. Расчеты можно взять из NT7.


Отлично! Какой у вас логин на КодеПлексе?
Автор топика
Спасибо:

Rinas Andrey

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


логин andreifx
Спасибо:

Mikhail Sukhov

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


Rinas Andrey Перейти
логин andreifx


Добавил.
Автор топика
Спасибо:

Rinas Andrey

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


Спасибо, на днях займусь.
Спасибо:

Rinas Andrey

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


Залил.
Я правильно понял, нужно было в папку dev заливать?
Спасибо:

Mikhail Sukhov

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


Rinas Andrey Перейти
Залил.
Я правильно понял, нужно было в папку dev заливать?


Да, все правильно. Спасибо за индюк.
Автор топика
Спасибо:

Alexander

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


Исправил код, он не компилировался.
Просьба проверять код на компиляцию перед тем как он кладётся в репозиторий.
Спасибо:

Rinas Andrey

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


Alexander Mukhanchikov Перейти
Исправил код, он не компилировался.
Просьба проверять код на компиляцию перед тем как он кладётся в репозиторий.


Да, сори, первый блин получился немного комом)
Спасибо:

Alexander

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


Rinas Andrey Перейти
Alexander Mukhanchikov Перейти
Исправил код, он не компилировался.
Просьба проверять код на компиляцию перед тем как он кладётся в репозиторий.


Да, сори, первый блин получился немного комом)


Ерунда, спасибо за индикатор :)
Спасибо:

Mikhail Sukhov

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


Alexander Mukhanchikov Перейти
Ерунда, спасибо за индикатор :)


Код поломал Daenur. Я его поправил, но так как не знаю алгоритма, мог поправить неправильно.
Автор топика
Спасибо: OvcharenkoVI

OvcharenkoVI

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


Mikhail Sukhov Перейти
Alexander Mukhanchikov Перейти
Ерунда, спасибо за индикатор :)


Код поломал Daenur. Я его поправил, но так как не знаю алгоритма, мог поправить неправильно.


Вроде все ок. Спасибо, Михаил

Спасибо:

paveld

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


Попробовал использовать ParabolicSar в стратегии.
Сравнил значение индикатора в Quik, со значением LastValue в момент открытия новой свечи. Почему-то значение LastValue отстает от значения в Quik на одну свечку. Те значение в LastValue, было в Quik на предыдущей свече.
Подскажите пожалуйста почему так происходит и как это обойти?

Индикатор заполняется так:
Код

  IndicatorManager _indicatorManager = new IndicatorManager();
  Parabolic = new ParabolicSar();
  _indicatorManager.RegisterIndicator(Parabolic, new CandleSeriesIndicatorSource(_candleSeries));

Спасибо:

Кот Матроскин

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


Все исходники индикаторов были на codeplex в свободном доступе
Спасибо:

paveld

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


Кот Матроскин Перейти
Все исходники индикаторов были на codeplex в свободном доступе

по исходникам не могу определить причину. моет кто уже сталкивался
Спасибо:

paveld

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


Добился точного совпадения дважды вызывая Process()
первый раз на закрытии свечи так:
Код

    protected void OnCandleFinished(Candle candle) {
      Parabolic.Process((CandleIndicatorValue) candle);
    }


второй раз на открытии так:
Код

  protected void OnCandleStarted(Candle candle) {
    if (Parabolic.IsFormed)
      Parabolic.Process((CandleIndicatorValue) candle);
  }


Если условие Parabolic.IsFormed убрать - то считается не верно.
По исходникам пока не разобрался почему так происходит
Спасибо:

Moadip

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


Так как вы все таки рассчитываете значения индикатора, через IndicatorManager или вызывая Process?

Если через IndicatorManager, то значение индикатора надо брать не из индикатора через LastValue, а через токен.
Цитата из справки: Значения индикатора следует брать только из токена, сам параметр может не обновляться. Ссылка

Так регистрирую индикатор в IndicatorManager
Код

            _tokenSar = indicatorManager.RegisterIndicator(
                new ParabolicSar(),
                new CandleSeriesIndicatorSource(_series, candle => candle.ClosePrice));


В стратегии правило
Код

            _series
                .WhenCandlesFinished()
                .Do(OnFinishCandle)
                .Apply(this);


Обработчик
Код

        private void OnFinishCandle(Candle candle)
        {
            if(_tokenSar.Indicator.IsFormed)
            {
                var value = indicatorManager.Container.GetValue(_tokenSar, 0).Second.GetValue<decimal>();
                this.AddInfoLog(string.Format("Свечка закончена. OpenTime = {0}, State = {1} , parabolic = {2}", candle.OpenTime, candle.State, value));
            }
        }


Лог
Код

16:48:29.853 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:33:00, State = Finished , parabolic = 133651,213120
16:48:29.858 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:34:00, State = Finished , parabolic = 133636,14033280
16:48:29.865 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:35:00, State = Finished , parabolic = 133621,9719128320
16:48:29.871 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:36:00, State = Finished , parabolic = 133608,653598062080
16:48:29.881 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:37:00, State = Finished , parabolic = 133596,13438217835520
16:48:29.885 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:38:00, State = Finished , parabolic = 133584,3663192476538880
16:48:29.891 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:39:00, State = Finished , parabolic = 133573,304340092794654720
16:48:29.899 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:40:00, State = Finished , parabolic = 133562,90607968722697543680
16:48:29.910 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:41:00, State = Finished , parabolic = 133546,6735933122488174018560
16:48:29.916 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:42:00, State = Finished , parabolic = 133360
16:48:29.928 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:43:00, State = Finished , parabolic = 133364,40
16:48:29.935 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:44:00, State = Finished , parabolic = 133373,4240
16:48:29.948 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:45:00, State = Finished , parabolic = 133382,087040
16:48:29.965 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:46:00, State = Finished , parabolic = 133390,40355840
16:48:29.985 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:47:00, State = Finished , parabolic = 133405,3793448960
16:48:29.997 |            | MS_RIU2@RTS_SPBFUT00881 | Свечка закончена. OpenTime = 15.06.2012 23:48:00, State = Finished , parabolic = 133415




S# - OpenTime = 23:48:00, parabolic = 133415
Quik - 23:48 133415

48 минута, т.к. последняя свечка в 23:49 не закрылась(последний тик в 23:49:49)
Спасибо: PavelAd

PavelAd

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


Moadip Перейти

Если через IndicatorManager, то значение индикатора надо брать не из индикатора через LastValue, а через токен.

Вопрос, а брать через токен так:
Код
      
_indicatorToken = _indicatorManager.RegisterIndicator(Parabolic, new CandleSeriesIndicatorSource(_candleSeries));
....
var v = ((ParabolicSar) _indicatorToken.Indicator).LastValue;


??
Спасибо:

Moadip

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


Код

_tokenSar = _indicatorManager.RegisterIndicator(
    new ParabolicSar(),
    new CandleSeriesIndicatorSource(_series, candle => candle.ClosePrice));

...

var last = _indicatorManager.Container.GetValue(_tokenSar, 0).Second.GetValue<decimal>();
Спасибо: PavelAd

PavelAd

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


Moadip Перейти
Код

_tokenSar = _indicatorManager.RegisterIndicator(
    new ParabolicSar(),
    new CandleSeriesIndicatorSource(_series, candle => candle.ClosePrice));

...
var last = _indicatorManager.Container.GetValue(_tokenSar, 0).Second.GetValue<decimal>();

Cложновато :) по сравнению с LastValue;

А как лучше использовать в стратегиях через IndicatorManager или через Process?
Влияет ли выбранный способ на скорость работы?
Спасибо:

Moadip

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


Думаю все таки через IndicatorManager, т.к. доступны прошлые значения.

Насчет скорости, не думаю что IM как то отрицательно влияет на скорость. Можно посмотреть исходники, они открыты, там нет каких то ресурсоемких вычислений.
Делается все тоже самое. Подписка на источник и расчет значений(через тот же Process). Только еще значения складываются в контейнер, к которому потом есть доступ.
Спасибо:

JackSparrow

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


Moadip Перейти
Думаю все таки через IndicatorManager, т.к. доступны прошлые значения.

Насчет скорости, не думаю что IM как то отрицательно влияет на скорость. Можно посмотреть исходники, они открыты, там нет каких то ресурсоемких вычислений.
Делается все тоже самое. Подписка на источник и расчет значений(через тот же Process). Только еще значения складываются в контейнер, к которому потом есть доступ.

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

profts

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


Не совпадают значение параболика.
В WealthLab параметры индикатора:
AccelUp = 0.01
AccelDown = 0.01
AccelMax = 0.05

Индикатор создаю с параметрами:

_tokenSar = indicatorManager.RegisterIndicator(
new ParabolicSar { Acceleraton = 0.01, AccelerationStep = 0.01, AccelerationMax = 0.05 },
new CandleSeriesIndicatorSource(series, candle => candle.ClosePrice));

И что за параметр Acceleration? Во всех источниках у индикатора 2 параметра: шаг и максимум.
Спасибо:

OvcharenkoVI

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


попробуйте Acceleration = 0.02, он везде такой
Спасибо:

OvcharenkoVI

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


попробуйте Acceleration = 0.02, он везде такой
Спасибо:
1 2  >

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

loading
clippy