ParabolicSar
Atom
3/23/2012
Mikhail Sukhov


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

Tags:


Thanks:


< 1 2 3  >
Mikhail Sukhov

Avatar
Date: 5/16/2012
Reply


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


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

OvcharenkoVI

Avatar
Date: 5/24/2012
Reply


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


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


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

Thanks:

paveld

Avatar
Date: 6/15/2012
Reply


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

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

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

Thanks:

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

Avatar
Date: 6/15/2012
Reply


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

paveld

Avatar
Date: 6/16/2012
Reply


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

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

paveld

Avatar
Date: 6/16/2012
Reply


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

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


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

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


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

Moadip

Avatar
Date: 6/16/2012
Reply


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

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

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

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


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

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


Обработчик
Code

        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));
            }
        }


Лог
Code

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)
Thanks: PavelAd

PavelAd

Avatar
Date: 7/11/2012
Reply


Moadip

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

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


??
Thanks:

Moadip

Avatar
Date: 7/11/2012
Reply


Code

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

...

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

PavelAd

Avatar
Date: 7/11/2012
Reply


Moadip
Code

_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?
Влияет ли выбранный способ на скорость работы?
Thanks:
< 1 2 3  >

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

loading
clippy