Автор |
Сообщение |
Ivan
Зарегистрирован: 23.03.2011
Сообщения: 20
|
Господа, помогите, пожалуйста, разобраться с Параболиком.
Нашел серьезный недостаток, с которым провозился весь день и никак не могу не то, что исправить, а понять и с которым применение индикатора невозможно.
Для примера взял 5-минутный фьючерс на РТС (RIM1) по данным на 18.04.11.
Значение параметров Параболика для пущей простоты: 0.02, 0.02
18.04.11 в 17:00 происходит пересечение сверху вниз параболика.
Теперь, новое значение SAR предыдущий локальный максимум, т.е. 196770 (см. рис. 1). Здесь все нормально, локальные максимумы и минимумы Ами считает верно.
На следующем баре значение Параболика по формуле Wildera должно быть 196710.3
Найдена так: ((Минимум на текущем - SAR на пред.) * acelleration factor) + SAR на предыдущем баре)
ИЛИ ((193785 - 196770) * 0.02) + 196770) = 196710.3.
Откуда Ами берет значение 196739.59 остается для меня большой загадкой, которую без вашей помощи разрешить никак не могу. (см. рисунок 2).
Отсюда идет неправильный расчет параболика на последующих барах и невозможность применения торговых стратегий с этим индикатором.
P.S. Проводил проверку Параболика с этими же значениями в Wealth-Lab 4, рассчитывается все как надо.
В основе параболика родная формула Ами
Код: |
_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
_SECTION_END();
/////////////////////////////////
// Parabolic SAR re-implemented in
// native AFL.
//
// Example of for/if/else control statements
//
// Requires:
// AmiBroker 4.31.1
//
// Written by: Tomasz Janeczko
IAF = 0.02; // acceleration factor
MaxAF = 0.02; // max acceleration
psar = Close; // initialize
long = 1; // assume long for initial conditions
af = IAF; // init acelleration factor
ep = Low[ 0 ]; // init extreme point
hp = High [ 0 ];
lp = Low [ 0 ];
for( i = 2; i < BarCount; i++ )
{
if ( long )
{
psar [ i ] = psar [ i-1 ] + af * ( hp - psar [ i-1 ] );
}
else
{
psar [ i ] = psar [ i-1 ] + af * ( lp - psar [ i-1 ] );
}
reverse = 0;
//check for reversal
if ( long )
{
if ( Low [ i ] < psar [ i ] )
{
long = 0; reverse = 1; // reverse position to Short
psar [ i ] = hp; // SAR is High point in prev trade
lp = Low [ i ];
af = IAF;
}
}
else
{
if ( High [ i ] > psar [ i ] )
{
long = 1; reverse = 1; //reverse position to long
psar [ i ] = lp;
hp = High [ i ];
af = IAF;
}
}
if ( reverse == 0 )
{
if ( long )
{
if ( High [ i ] > hp )
{
hp = High [ i ];
af = af + IAF;
if( af > MaxAF ) af = MaxAF;
}
if( Low[ i - 1 ] < psar[ i ] ) psar[ i ] = Low[ i - 1 ];
if( Low[ i - 2 ] < psar[ i ] ) psar[ i ] = Low[ i - 2 ];
}
else
{
if ( Low [ i ] < lp )
{
lp = Low [ i ];
af = af + IAF;
if( af > MaxAF ) af = MaxAF;
}
if( High[ i - 1 ] > psar[ i ] ) psar[ i ] = High[ i - 1 ];
if( High[ i - 2 ] > psar[ i ] ) psar[ i ] = High[ i - 2 ];
}
}
}
Plot( Close, "Price", colorBlack, styleCandle );
Plot( psar, "SAR", colorRed, styleDots | styleNoLine | styleThick ); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Ivan
Зарегистрирован: 23.03.2011
Сообщения: 20
|
Вдогонку важный факт.
В качестве примера я выбрал картину, где каждый последующий бар обновляет низы.
Если взять ситуацию, где после того, как произошел переворот из лонга в шорт и следующий бар не ставит новый минимум, то Ами считает значение параболика правильно.
Ну, а если же цена обновляет низы, то тогда расчет параболика неправильный.
В общем какой-то парадокс.
Надеюсь на помощь. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Прежде чем утверждать правильно/неправильно считает надо смотреть точный алгоритм расчетов SAR. Довольно давно я писал сам AFL для параболика чтобы не использовать встроенный. Оказалось, что в сети полно разных алгоритмов. Отличаются не принципиально, но отличия есть. Вопрос в том, какой из них действительно правильный. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Сейчас специально сравнил параболик из первого сообщения и встроенный. Считают абсолютно одинаково. т.е. Томаш использовал одинаковый алгоритм. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Ivan
Зарегистрирован: 23.03.2011
Сообщения: 20
|
Олег, по сути основная формула - это формула Уайлдера. Я понимаю, что существует куча модификаций, но хотелось бы иметь базовую формулу автора.
В Wealth-Lab есть базовая формула и формула с модификациями (современная версия).
То, что считает Ами полностью не сходится с WL на одних и тех же данных.
Вот и пытаюсь понять почему.
На сколько я понял, что код в Ами начинает "глючить", когда цена после переворота делает новый локальный максимум/минимум, что-то происходит с accel. factor.
На всякий случай вложил формулу из книги Уайлдера, оригинал.
Спасибо. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Когда то писал свою версию параболика чтобы его направление всегда совпадало с направлением моей системы.. Формула Уайлдера везде одинаковая, но есть различия в стартовом значении индюка при перевороте - в разных прогах оно считается по разному, оттого и несовпадения:
При лонг-направлении стратовое значение индюка после переворота из шорта - это лой за период 4.
При шорт-направлении - хай за этот же период.
И это значение периода для подсчета хая/лоя могет различаться в разных версиях.
Как то так, писал по памяти |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Ivan
Зарегистрирован: 23.03.2011
Сообщения: 20
|
spitfire писал(а): |
Когда то писал свою версию параболика чтобы его направление всегда совпадало с направлением моей системы.. Формула Уайлдера везде одинаковая, но есть различия в стартовом значении индюка при перевороте - в разных прогах оно считается по разному, оттого и несовпадения:
При лонг-направлении стратовое значение индюка после переворота из шорта - это лой за период 4.
При шорт-направлении - хай за этот же период.
И это значение периода для подсчета хая/лоя могет различаться в разных версиях.
Как то так, писал по памяти |
ясно, спасибо за разъяснения. Получается, что придется прогить строго свой, другого не дано |
|
|
Посмотреть профиль Отправить личное сообщение |
|
KnyazSeverov
Зарегистрирован: 06.09.2010
Сообщения: 55
Откуда: Rostov-on-Don
|
Ivan писал(а): |
ясно, спасибо за разъяснения. Получается, что придется прогить строго свой, другого не дано |
Ну со временем многие трейдеры начинают переписывать большую часть индикаторов под себя, так сказать под конкретные задачи, попутно устраняя всевозможные недостатки и "узкие места". Так что привыкайте |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number |
|
KnyazSeverov
Зарегистрирован: 06.09.2010
Сообщения: 55
Откуда: Rostov-on-Don
|
Порылся в архивах, нашел такой вот вариант. Может пригодится
Писал несколько лет назад. Помню боролся с запаздыванием, заглядыванием в будущее и добавлял адаптивность. Код писал с нуля. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number |
|
|