Попробовал использовать ParabolicSar в стратегии.
Сравнил значение индикатора в Quik, со значением LastValue в момент открытия новой свечи. Почему-то значение LastValue отстает от значения в Quik на одну свечку. Те значение в LastValue, было в Quik на предыдущей свече.
Подскажите пожалуйста почему так происходит и как это обойти?
Индикатор заполняется так:
IndicatorManager _indicatorManager = new IndicatorManager();
Parabolic = new ParabolicSar();
_indicatorManager.RegisterIndicator(Parabolic, new CandleSeriesIndicatorSource(_candleSeries));
Так как вы все таки рассчитываете значения индикатора, через IndicatorManager или вызывая Process?
Если через IndicatorManager, то значение индикатора надо брать не из индикатора через LastValue, а через токен.
Цитата из справки: Значения индикатора следует брать только из токена, сам параметр может не обновляться.Ссылка
Так регистрирую индикатор в IndicatorManager
_tokenSar = indicatorManager.RegisterIndicator(
new ParabolicSar(),
new CandleSeriesIndicatorSource(_series, candle => candle.ClosePrice));
Moadip:
Если через IndicatorManager, то значение индикатора надо брать не из индикатора через LastValue, а через токен.
Вопрос, а брать через токен так:
_indicatorToken = _indicatorManager.RegisterIndicator(Parabolic, new CandleSeriesIndicatorSource(_candleSeries));
....
var v = ((ParabolicSar) _indicatorToken.Indicator).LastValue;
_tokenSar = _indicatorManager.RegisterIndicator(
new ParabolicSar(),
new CandleSeriesIndicatorSource(_series, candle => candle.ClosePrice));
...
var last = _indicatorManager.Container.GetValue(_tokenSar, 0).Second.GetValue<decimal>();
Думаю все таки через IndicatorManager, т.к. доступны прошлые значения.
Насчет скорости, не думаю что IM как то отрицательно влияет на скорость. Можно посмотреть исходники, они открыты, там нет каких то ресурсоемких вычислений.
Делается все тоже самое. Подписка на источник и расчет значений(через тот же Process). Только еще значения складываются в контейнер, к которому потом есть доступ.
Moadip:
Думаю все таки через IndicatorManager, т.к. доступны прошлые значения.
Насчет скорости, не думаю что IM как то отрицательно влияет на скорость. Можно посмотреть исходники, они открыты, там нет каких то ресурсоемких вычислений.
Делается все тоже самое. Подписка на источник и расчет значений(через тот же Process). Только еще значения складываются в контейнер, к которому потом есть доступ.
Пользую активно защиту стратегий, но все самописное, интересно как получаемые значения для трейлинга отправлять в библиотечную версию защитной стратегии
Во всех источниках по разному. В частности, у вас в посте у индюка тоже три праметра.😀 В основном эти три параметра - начальное значение ускорения, шаг ускорения и максимальное значение ускорения. Здесь Acceleration похож на начальное значение.
コメント (26)
ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください
Могу взяться за него. Расчеты можно взять из NT7.
Отлично! Какой у вас логин на КодеПлексе?
логин andreifx
Добавил.
Спасибо, на днях займусь.
Залил. Я правильно понял, нужно было в папку dev заливать?
Да, все правильно. Спасибо за индюк.
Исправил код, он не компилировался. Просьба проверять код на компиляцию перед тем как он кладётся в репозиторий.
Да, сори, первый блин получился немного комом)
Ерунда, спасибо за индикатор :)
Код поломал Daenur. Я его поправил, но так как не знаю алгоритма, мог поправить неправильно.
Вроде все ок. Спасибо, Михаил
Попробовал использовать ParabolicSar в стратегии. Сравнил значение индикатора в Quik, со значением LastValue в момент открытия новой свечи. Почему-то значение LastValue отстает от значения в Quik на одну свечку. Те значение в LastValue, было в Quik на предыдущей свече. Подскажите пожалуйста почему так происходит и как это обойти?
Индикатор заполняется так:
Все исходники индикаторов были на codeplex в свободном доступе
Добился точного совпадения дважды вызывая Process() первый раз на закрытии свечи так:
второй раз на открытии так:
Если условие Parabolic.IsFormed убрать - то считается не верно. По исходникам пока не разобрался почему так происходит
Так как вы все таки рассчитываете значения индикатора, через IndicatorManager или вызывая Process?
Если через IndicatorManager, то значение индикатора надо брать не из индикатора через LastValue, а через токен. Цитата из справки: Значения индикатора следует брать только из токена, сам параметр может не обновляться. Ссылка
Так регистрирую индикатор в IndicatorManager
В стратегии правило
Обработчик
Лог
S# - OpenTime = 23:48:00, parabolic = 133415 Quik - 23:48 133415
48 минута, т.к. последняя свечка в 23:49 не закрылась(последний тик в 23:49:49)
??
А как лучше использовать в стратегиях через IndicatorManager или через Process? Влияет ли выбранный способ на скорость работы?
Думаю все таки через IndicatorManager, т.к. доступны прошлые значения.
Насчет скорости, не думаю что IM как то отрицательно влияет на скорость. Можно посмотреть исходники, они открыты, там нет каких то ресурсоемких вычислений. Делается все тоже самое. Подписка на источник и расчет значений(через тот же Process). Только еще значения складываются в контейнер, к которому потом есть доступ.
Не совпадают значение параболика. В WealthLab параметры индикатора:
AccelUp = 0.01 AccelDown = 0.01 AccelMax = 0.05
Индикатор создаю с параметрами:
_tokenSar = indicatorManager.RegisterIndicator( new ParabolicSar , new CandleSeriesIndicatorSource(series, candle => candle.ClosePrice));
И что за параметр Acceleration? Во всех источниках у индикатора 2 параметра: шаг и максимум.
попробуйте Acceleration = 0.02, он везде такой
попробуйте Acceleration = 0.02, он везде такой
Во всех источниках по разному. В частности, у вас в посте у индюка тоже три праметра.😀 В основном эти три параметра - начальное значение ускорения, шаг ускорения и максимальное значение ускорения. Здесь Acceleration похож на начальное значение.