Индекс вариации ценового ряда
12 года 5 мес. назад - 10 года 1 мес. назад #572
от admin
admin создал тему: Индекс вариации ценового ряда
Попросили перенести индикатор тренда из метатрейдера4 в Амиброкер.
Индикатор отображает индекс вариации ценового ряда, вычисленного на минимальном предшествующем интервале длины 2^n. Индекс вариации показывает, что преобладает во временном ряду – трендовая или флетовая составляющая, или же ряд ведет себя случайно.
М.М. Дубовиков и др. - Размерность минимального покрытия и локальный анализ фрактальных временных рядов.
Изначально выглядело оно так:
В результате на AFL получилось следующее:
Скажем так: слегка покороче
Индикатор отображает индекс вариации ценового ряда, вычисленного на минимальном предшествующем интервале длины 2^n. Индекс вариации показывает, что преобладает во временном ряду – трендовая или флетовая составляющая, или же ряд ведет себя случайно.
М.М. Дубовиков и др. - Размерность минимального покрытия и локальный анализ фрактальных временных рядов.
Изначально выглядело оно так:
//+------------------------------------------------------------------+
//| iVAR.mq4 |
//| (C)opyright © 2008, Ilnur |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "(C)opyright © 2008, Ilnur"
#property link "http://www.metaquotes.net"
//---- настройки индикатора
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_level1 0.5
//---- входные параметры
extern int n = 5;
extern int nBars = 1000;
//---- буфер индикатора
double ibuffer[];
//+------------------------------------------------------------------+
//| Функция инициализации индикатора |
//+------------------------------------------------------------------+
int init()
{
//---- настройка параметров отрисовки
SetIndexBuffer(0,ibuffer);
SetIndexStyle(0,DRAW_LINE);
SetIndexDrawBegin(0,Bars-nBars);
SetIndexLabel(0,"iVAR");
//---- "короткое имя" отображаемое в окне индикатора
IndicatorShortName("iVAR("+n+")");
return(0);
}
//+------------------------------------------------------------------+
//| Основная функция индикатора |
//+------------------------------------------------------------------+
int start()
{
int i, j, k, nTotal, nCountedBars = IndicatorCounted();
int ihigh, ilow, nInterval;
double Delta, Xс, Yс, Sx, Sy, Sxx, Sxy;
//---- последний посчитанный бар будет пересчитан
if(nCountedBars==0) nTotal = nBars;
if(nCountedBars>0) nTotal = Bars-nCountedBars-1;
//---- основной цикл индикатора
for(j=nTotal; j>=0; j--)
{
Sx = 0; Sy = 0; Sxx = 0; Sxy = 0;
for(i=0; i<=n; i++)
{
nInterval = MathPow(2,n-i);
//---- суммируем разницы максимальной и минимальной цен на интервале
for(Delta=0, k=0; k<MathPow(2,i); k++)
{
ihigh = iHighest(Symbol(),0,MODE_HIGH,nInterval,nInterval*k+j);
ilow = iLowest(Symbol(),0,MODE_LOW,nInterval,nInterval*k+j);
Delta += High[ihigh]-Low[ilow];
}
//---- вычисляем координаты вариации в двойном логарифмическом масштабе
Xс = (n-i)*MathLog(2.0);
Yс = MathLog(Delta);
//---- накапливаем данные для нахождения коэффициентов линии регрессии с помощью МНК
Sx += Xс;
Sy += Yс;
Sxx += Xс*Xс;
Sxy += Xс*Yс;
}
//---- вычисляем индекс вариации (коэффициент наклона линии регрессии)
ibuffer[j] = -(Sx*Sy-(n+1)*Sxy)/(Sx*Sx-(n+1)*Sxx);
}
return(0);
}
В результате на AFL получилось следующее:
_SECTION_BEGIN("iVAR");
n = Param("n",5,3,15);
Sx = Sy = Sxx = Sxy = 0;
for (i=0; i<=n; i++)
{ nInterval = 2^(n-i);
//---- суммируем разницы максимальной и минимальной цен на интервале
Delta = 0;
for(k=0; k<2^i ; k++)
Delta += HHV(Ref(High,nInterval*k),-nInterval)- LLV(Ref(Low,nInterval*k),-nInterval);
//---- вычисляем координаты вариации в двойном логарифмическом масштабе
Xc = (n-i)*log(2);
Yc = log(Delta);
//---- накапливаем данные для нахождения коэффициентов линии регрессии с помощью МНК
Sx += Xc;
Sy += Yc;
Sxx += Xc*Xc;
Sxy += Xc*Yc;
}
ibuffer = -(Sx*Sy-(n+1)*Sxy)/(Sx*Sx-(n+1)*Sxx);
Plot(ibuffer,"iVar("+NumToStr(n,1,False)+")",IIf(ibuffer>0.5,colorRed,colorBlack),styleLine);
Plot(0.5,"",colorBlack);
_SECTION_END();Скажем так: слегка покороче
Последнее редактирование: 10 года 1 мес. назад пользователем admin.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
12 года 5 мес. назад - 12 года 5 мес. назад #574
от AlexLan
AlexLan ответил в теме Индекс вариации ценового ряда
Михаил, спасибо
интересный индикатор.
Красиво написана программа.
Красиво написана программа.
Последнее редактирование: 12 года 5 мес. назад пользователем AlexLan.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
12 года 3 мес. назад #628
от alexby
alexby ответил в теме Индекс вариации ценового ряда
Михаил, добрый день,
но вот по этому фрагменту кода Ref(High,nInterval*k) получается что хорошо заглядываем вперед?
но вот по этому фрагменту кода Ref(High,nInterval*k) получается что хорошо заглядываем вперед?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
12 года 3 мес. назад - 10 года 1 мес. назад #629
от admin
admin ответил в теме Индекс вариации ценового ряда
Точно. Минусики надо подрисовать правильности для. 
Подрисовал.
Подрисовал.
Последнее редактирование: 10 года 1 мес. назад пользователем admin.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
9 года 11 мес. назад #1143
от admin
admin ответил в теме Индекс вариации ценового ряда
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
9 года 3 мес. назад #2115
от Ambrosiy
Ambrosiy ответил в теме Индекс вариации ценового ряда
Добрый день, Михаил
Познавато спрашиваю но все таки, индикатор для амика постоянно показывает 1 с небольшим отклонением,
ниже 0,5 не опускается.
И в чем дело не знаю, подскажите пожалуйста.
Познавато спрашиваю но все таки, индикатор для амика постоянно показывает 1 с небольшим отклонением,
ниже 0,5 не опускается.
И в чем дело не знаю, подскажите пожалуйста.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
9 года 3 мес. назад #2119
от admin
admin ответил в теме Индекс вариации ценового ряда
Здравствуйте!
А что неправильного в описанной вами ситуации?
А что неправильного в описанной вами ситуации?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
9 года 3 мес. назад #2120
от Ambrosiy
Ambrosiy ответил в теме Индекс вариации ценового ряда
Сам индикатор я не ставил на Метатрейдер, но по скринам и в описании он совершает движение ниже отметки
0,5, у меня на 10 летний истории не разу не пересек эту отметку, в основном это прямая линия без движения.
Амик 5.90.1
0,5, у меня на 10 летний истории не разу не пересек эту отметку, в основном это прямая линия без движения.
Амик 5.90.1
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
9 года 3 мес. назад - 9 года 3 мес. назад #2121
от admin
admin ответил в теме Индекс вариации ценового ряда
Вы используете неверную логику. Во дворе у соседа есть курица, которая птица и которая не летает. Это совершенно не означает что все птицы не должны летать.
Точно также если на ваших данных индикатор опускается ниже 0.5 совершенно не означает, что на других данных это обязательно должно происходить.
Если вы сможете произвести расчет, в качестве исходных данных принимая показания графика и сможете показать, что в индикаторе есть неточности -велкам.
Точно также если на ваших данных индикатор опускается ниже 0.5 совершенно не означает, что на других данных это обязательно должно происходить.
Если вы сможете произвести расчет, в качестве исходных данных принимая показания графика и сможете показать, что в индикаторе есть неточности -велкам.
Последнее редактирование: 9 года 3 мес. назад пользователем admin.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Модераторы: admin
