Автор |
Сообщение |
Vladimir
Зарегистрирован: 30.10.2008
Сообщения: 62
|
Цитата: |
Переменная скользящая средняя - это экспоненциальная скользящая средняя, которая автоматически корректирует константу сглаживания, исходя из волатильности ряда данных. Чем более изменчивы данные, тем больше константа сглаживания, используемая в расчете скользящей средней. Чем больше константа сглаживания, тем больший вес придается текущим данным. Противоположное справедливо для менее изменчивых данных.
Трейдеры часто ассоциируют высокую волатильность с сильными трендовыми рынками. Однако это ошибка. Сильные трендовые рынки часто менее волатильны из-за постоянства ежедневных изменений цен. Когда дневные движения цен беспорядочны (то есть много вниз, немного вверх, немного вверх, много вверх, немного вверх, немного вниз и т.д.), волатильность увеличивается. Такое явление может происходить и на восходящих, и на нисходящих, и на боковых рынках.
Обычные скользящие средние страдают от неспособности компенсировать скачки волатильности. Во время изменчивых рынков вам нужно, чтобы скользящая средняя увеличивала свою чувствительность, позволяя вам быстро переходить на правильную сторону при любых диких циркуляциях. Автоматически корректируя константу сглаживания, переменная скользящая средняя может регулировать свою чувствительность, работая в результате лучше и на высоковолатильных, и на низковолатильных рынках.
VMA = (0.78*(volatility index) * close) + (1-0.078 * volatility index)*yesterday's VMA
Абсолютное значение 9-периодичного осциллятора моментума Чанде используется в качестве индекса волатильности. Чем выше этот индекс, тем более волатилен рынок, увеличивая в результате чувствительность скользящей средней.
Этот метод расчета переменной скользящей средней представлен Тушаром Чанде в мартовском 1992 года выпуске журнала Technical Analysis of Stocks & Commodities. |
Как это написать в Ами?
У меня вот что получилось:
Код: |
function VMA2( f )
{
VMA = 0;
for( i = 1; i < BarCount; i++ )
{
VMA[ i ] = f[i] * VMA[ i - 1 ];
}
return VMA;
}
x = (0.078 * (ATR(9) * Close) + (1 - 0.078 * ATR(9)));
Plot(Vma2(x),"VMA",colorRed); |
но ничего не рисуется. Может есть идеи? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вот так
Код: |
VMA = AMA(C, 0.078*volatility index);
Plot(VMA,"VMA",colorRed);
|
Только надо иметь ввиду, что volatility index должен быть меньше единицы. Поэтому просто брать ATR нельзя. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Точнее 0.078*volatility index должно быть меньше единицы |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Vladimir
Зарегистрирован: 30.10.2008
Сообщения: 62
|
Что брать за volatility index? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Vladimir писал(а): |
Что брать за volatility index? |
А я откуда знаю? Я Чанда плохо помню.
Можно взять отношение сигнал/шум Тогда мувинг Кауфмана получится.
Код: |
fast = 2/(2+1);
slow = 2/(30+1);
dir=abs(close-ref(close,-10));
vol=sum(abs(close-ref(close,-1)),10);
ER=dir/vol;
sc =( ER*(fast-slow)+slow)^2;
Plot(ama( close, sc ), "AMA", ColorRed);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Vladimir
Зарегистрирован: 30.10.2008
Сообщения: 62
|
Код: |
alt1:=(Sum(MACD(),3)+MACD())/2;
voltrend:=(C-Ref(C,-3))+(Ref(Mov((Cum(Ref(V,-3)/Cum(V))),5,TIMESERIES),-3));
vt2:=((Sum(voltrend,4)/4)-Ref(Mov(voltrend,15,VARIABLE),-5));
KP0102:=(C-Ref(MP(),-8))+MP();
vr1:=((VOLUME +Ref(VOLUME,-3)+Ref(VOLUME,-5)/MP())/10)+C;
KPVPM:=Ref(Mov((((KP0102/vr1)+(C-Ref(MP(),-3)))+C),3,SIMPLE),-6);
KPBLEND7A:=(Mov(SAR(.01,.10),15,WEIGHTED)+Dema(C,20))/2;
kp117:=Ref((Mov(((((KP0102+KPVPM+KPBLEND7A)/3)+(Ref(KPVPM,-8)))/2),3,SIMPLE)),-4);
KPPATTERN:=((vt2+(MACD()-Mov(MACD(),9,E))+(C-kp117)))+alt1;
KPSECONDLINE:=(( KPPATTERN+MP())-Ref(Mov(KPPATTERN,15,WEIGHTED),-5));
SLOVAR:=Ref(Mov((Mov(KPSECONDLINE,3,VARIABLE)),5,VARIABLE),-2);
KP101:=(((C-Ref(MP(),-8))+MP()) + SLOVAR)/2;
KPlowline:=Ref(Mov((((Ref(L,-2)-L))+L),6,WEIGHTED),-3);
zapper:=((KPlowline+SAR(.02,.20)+L)/3)*1.0015;
tr6:=(KP101+zapper)/2;
KP104:=((((Ref(Mov(((((C-Ref(C,-4))+MP())+Ref(((C-Ref(C,-4))+MP()),-1)+Ref(((C-Ref(C,-4))+MP()),-2))/3),6,SIMPLE),-2))+ (Mov(SAR(.02,.20),5,VARIABLE)))/2)+(Mov(SAR(.02,.20),5,VARIABLE)))/2;
TR4:=(tr6+KP104)/2;
DELTAs:=(KP0102+KPVPM+KPBLEND7A)/3;
//UP
Cross( C, SAR(.02 ,.2 ) )
AND
C> TR4
//down
Cross( SAR(.02 ,.2 ),C )
AND
C< TR4 |
Вот такая сисемка есть в Метстоке, но как в ами преревсти не знаю, здесь используется этот код, но еще много чего, что не могу разрешить. В МС все красиво выглядит на 5-мин. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
Какой конкретно кусок кода не можешь перевести? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Vladimir
Зарегистрирован: 30.10.2008
Сообщения: 62
|
практически все, самая сложность с мувингами и MP() - что это? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
MP - median price.
Это иногда (H+L)/2, иногда (H+L+C)/3
А метастоке (H+L)/2 |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Vladimir
Зарегистрирован: 30.10.2008
Сообщения: 62
|
а это как заменить
Код: |
Mov(voltrend,15,VARIABLE) |
может так?
Код: |
fast = 2/(2+1);
slow = 2/(30+1);
dir=abs(voltrend-ref(voltrend,-10));
vol=sum(abs(voltrend-ref(voltrend,-1)),10);
ER=dir/vol;
sc =( ER*(fast-slow)+slow)^2;
Plot(ama( voltrend, sc ), "AMA", ColorRed); |
просто все Close = voltrend |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Vladimir
Зарегистрирован: 30.10.2008
Сообщения: 62
|
Код: |
MP = (H+L)/2;
alt1=(Sum(MACD(),3)+MACD())/2;
voltrend=(C-Ref(C,-3))+(Ref(TSF((Cum(Ref(V,-3)/Cum(V))),5),-3));
VMA1 = AMA(voltrend, 0.078*ATR(15)/12);
vt2=((Sum(voltrend,4)/4)-Ref(VMA1,-5));
KP0102=(C-Ref(MP,-8))+MP;
vr1=((Volume +Ref(Volume,-3)+Ref(Volume,-5)/MP)/10)+C;
KPVPM=Ref(MA((((KP0102/vr1)+(C-Ref(MP,-3)))+C),3),-6);
KPBLEND7A=(WMA(SAR(.01,.10),15)+DEMA(C,20))/2;
kp117=Ref((MA(((((KP0102+KPVPM+KPBLEND7A)/3)+(Ref(KPVPM,-8)))/2),3)),-4);
KPPATTERN=((vt2+(MACD()-EMA(MACD(),9))+(C-kp117)))+alt1;
KPSECONDLINE=(( KPPATTERN+MP)-Ref(WMA(KPPATTERN,15),-5));
VMA2 = AMA(KPSECONDLINE, 0.078*ATR(3)/12);
SLOVAR=Ref(AMA(VMA2, 0.078*ATR(5)/12),-2);
KP101=(((C-Ref(MP,-8))+MP) + SLOVAR)/2;
KPlowline=Ref(WMA((((Ref(L,-2)-L))+L),6),-3);
zapper=((KPlowline+SAR(.02,.20)+L)/3)*1.0015;
tr6=(KP101+zapper)/2;
KP104=((((Ref(MA(((((C-Ref(C,-4))+MP)+Ref(((C-Ref(C,-4))+MP),-1)+Ref(((C-Ref(C,-4))+MP),-2))/3),6),-2))+ (AMA(SAR(.02,.20), 0.078*ATR(5)/12)))/2)+(AMA(SAR(.02,.20), 0.078*ATR(5)/12)))/2;
TR4=(tr6+KP104)/2;
DELTAs=(KP0102+KPVPM+KPBLEND7A)/3;
//up
Buy = Cross( C, SAR(.02 ,.2 ) ) AND C> TR4;
//down
Sell = Cross( SAR(.02 ,.2 ),C ) AND C< TR4;
Short= Sell;
Cover= Buy;
Buy=ExRem(Buy,Sell);
Sell=ExRem(Sell,Buy);
Short=ExRem(Short,Cover);
Cover=ExRem(Cover,Short);
///////////// Рисуем всякое ///////////////
_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
if( ParamToggle("Tooltip shows", "All Values|Only Prices" ) )
{
ToolTip=StrFormat("Open: %g\nHigh: %g\nLow: %g\nClose: %g (%.1f%%)\nVolume: "+NumToStr( V, 1 ), O, H, L, C, SelectedValue( ROC( C, 1 )));
}
_SECTION_END();
PlotShapes(IIf(Buy,shapeUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Sell,shapeDownArrow,0),4,0,Graph0,-15);
PlotShapes(IIf(Cover,shapeHollowUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Short,shapeHollowDownArrow,0),4,0,Graph0,-15); |
вот что получилось, но где ошибка, нет никаких стрелок? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Если из условий Buy и Sell убрать условия сравнения TR4 и Сб то стрелки рисует
Вывел на график эту TR4. Результат на картинке. Конечно никакого C > TR4 небывает. Собственно поэтому и стрелок нет. Вероятно ошибка в коде вычисляющем TR4.
А чтобы график раскрасить надо при выводе свечек
Код: |
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
|
менять цвет. Вот пример из хелпера как это делать
Код: |
dynamic_color = IIf( MACD() > 0, colorGreen, colorRed );
Plot( MACD(), "My MACD", dynamic_color, styleHistogram | styleThick );
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Vladimir
Зарегистрирован: 30.10.2008
Сообщения: 62
|
Все дело в этом мувинге:
Код: |
Mov(ARRAY,Range,VARIABLE) |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Плюсадин
Зарегистрирован: 19.11.2008
Сообщения: 13
|
Vladimir писал(а): |
Код: |
MP = (H+L)/2;
alt1=(Sum(MACD(),3)+MACD())/2;
voltrend=(C-Ref(C,-3))+(Ref(TSF((Cum(Ref(V,-3)/Cum(V))),5),-3));
VMA1 = AMA(voltrend, 0.078*ATR(15)/12);
vt2=((Sum(voltrend,4)/4)-Ref(VMA1,-5));
KP0102=(C-Ref(MP,-8))+MP;
vr1=((Volume +Ref(Volume,-3)+Ref(Volume,-5)/MP)/10)+C;
KPVPM=Ref(MA((((KP0102/vr1)+(C-Ref(MP,-3)))+C),3),-6);
KPBLEND7A=(WMA(SAR(.01,.10),15)+DEMA(C,20))/2;
kp117=Ref((MA(((((KP0102+KPVPM+KPBLEND7A)/3)+(Ref(KPVPM,-8)))/2),3)),-4);
KPPATTERN=((vt2+(MACD()-EMA(MACD(),9))+(C-kp117)))+alt1;
KPSECONDLINE=(( KPPATTERN+MP)-Ref(WMA(KPPATTERN,15),-5));
VMA2 = AMA(KPSECONDLINE, 0.078*ATR(3)/12);
SLOVAR=Ref(AMA(VMA2, 0.078*ATR(5)/12),-2);
KP101=(((C-Ref(MP,-8))+MP) + SLOVAR)/2;
KPlowline=Ref(WMA((((Ref(L,-2)-L))+L),6),-3);
zapper=((KPlowline+SAR(.02,.20)+L)/3)*1.0015;
tr6=(KP101+zapper)/2;
KP104=((((Ref(MA(((((C-Ref(C,-4))+MP)+Ref(((C-Ref(C,-4))+MP),-1)+Ref(((C-Ref(C,-4))+MP),-2))/3),6),-2))+ (AMA(SAR(.02,.20), 0.078*ATR(5)/12)))/2)+(AMA(SAR(.02,.20), 0.078*ATR(5)/12)))/2;
TR4=(tr6+KP104)/2;
DELTAs=(KP0102+KPVPM+KPBLEND7A)/3;
//up
Buy = Cross( C, SAR(.02 ,.2 ) ) AND C> TR4;
//down
Sell = Cross( SAR(.02 ,.2 ),C ) AND C<TR4> TR4
AND C<TR4> 0, colorBlue, colorRed );
Plot( C, "Close", dynamic_color, styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
|
|
Убрать (как и писал Олег):
Код: |
AND C> TR4
AND C< TR4 |
Чтобы цвета были, добавить:
вместо
Код: |
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() ); |
написать:
Код: |
dynamic_color = IIf( MACD() > 0, colorBlue, colorRed );
Plot( C, "Close", dynamic_color, styleNoTitle | ParamStyle("Style") | GetPriceStyle() ); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Vladimir
Зарегистрирован: 30.10.2008
Сообщения: 62
|
Цитата: |
Убрать (как и писал Олег):
Код:
Код: |
AND C> TR4
AND C< TR4 |
|
В этом вся фишка, этот код отсеивает ложные сигналы, так что без него система бессмысленна.
Цвета не нужны. Главное, чтобы TR4 рисовался, а остальное - ерунда. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|