Coolaid:
How could I wrtie zigzag patterns based from fractal data?
you can't
qjol:
you can't
Do you know how to calculate zigzag?
/* Soft Fractals ZigZag Indicator - индикатор строит зигзаг по фракталам с произвольными размерами правого и левого крыльев. */ #property copyright "Copyright 2012, Тарабанов А.В." #property link "alextar@bk.ru" #property indicator_chart_window // Индикатор в главном окне // Индикаторные буферы #property indicator_buffers 4 #property indicator_width1 1 // Толщина зигзага #property indicator_color3 Green // Нижние вершины #property indicator_width3 1 #property indicator_color4 Red // Верхние вершины #property indicator_width4 1 double Min[] , Max[], // Изломы зигзага Bottom[], Top[]; // Вершины // Константы #define Version "iSFZZ" // Версия #define Zero 0.00000001 // Точность определения нуля // Глобальные переменные double LastBottom , LastTop; // Предыдущие значения int iLastBottom, iLastTop; // и их бары datetime tLastBottom, tLastTop; // Время предыдущих значений bool LastIsTop , LastIsBottom; // Предыдущий пик/впадина extern bool ОтображатьВершины =true; // Внешние переменные extern int БаровЛевееВершины =2, БаровПравееВершины =2, СимволНижнейВершины =161, СимволВерхнейВершины=161; //+------------------------------------------------------------------+ int init(){ int DrawFractals=DRAW_NONE; if( ОтображатьВершины ) DrawFractals=DRAW_ARROW; // Атрибуты буферов SetIndexLabel(0,"Max"); SetIndexBuffer(0,Max); SetIndexStyle(0,DRAW_ZIGZAG); SetIndexEmptyValue(0,0); SetIndexLabel(1,"Min"); SetIndexBuffer(1,Min); SetIndexStyle(1,DRAW_ZIGZAG); SetIndexEmptyValue(1,0); SetIndexLabel(2,"Bottom"); SetIndexBuffer(2,Bottom); SetIndexStyle(2,DrawFractals); SetIndexArrow(2,СимволНижнейВершины); SetIndexEmptyValue(2,0); SetIndexLabel(3,"Top"); SetIndexBuffer(3,Top); SetIndexStyle(3,DrawFractals); SetIndexArrow(3,СимволВерхнейВершины); SetIndexEmptyValue(3,0); if( БаровЛевееВершины <1 ) БаровЛевееВершины=1; // Контроль значений if( БаровПравееВершины <1 ) БаровПравееВершины=1; LastBottom =0; // Инициализация LastTop =0; iLastBottom =0; iLastTop =0; tLastBottom =0; tLastTop =0; LastIsTop =false; LastIsBottom=false; return(0); } //+------------------------------------------------------------------+ int start(){ int i, History=Bars-1, BarsLost=History-IndicatorCounted(); if( BarsLost<History ){ if( BarsLost<1 ) return(0); // Не повторять на том-же баре i=BarsLost+БаровПравееВершины; // Число баров пересчета } else i=History-БаровЛевееВершины; // Просмотр на всей истории double C[]; int dim=ArrayResize(C,БаровЛевееВершины+1+БаровПравееВершины), j; if( tLastTop>0 ) iLastTop=iBarShift(NULL,0,tLastTop); if( tLastBottom>0 ) iLastBottom=iBarShift(NULL,0,tLastBottom); while( i>БаровПравееВершины ){ // Перебор слева направо j=0; // Поиск нижнего фрактала Bottom[i]=0; while( j < dim ){ C[j]=Low[j+i-БаровПравееВершины]; j++; } if( C[БаровПравееВершины+1]-C[БаровПравееВершины]>-Zero && C[БаровПравееВершины-1]-C[БаровПравееВершины]>-Zero ){ Bottom[i]=C[БаровПравееВершины]; // Локальный минимум j=1; while ( j < dim ){ if( ( j<БаровПравееВершины && Bottom[i]-C[j-1]>Zero ) || ( j>БаровПравееВершины && Bottom[i]-C[j] >Zero ) ) { Bottom[i]=0; // Нет фрактала break; } j++; } } j=0; // Поиск верхнего фрактала Top[i]=0; while( j<dim ){ C[j]=High[j+i-БаровПравееВершины]; j++; } if( C[БаровПравееВершины]-C[БаровПравееВершины+1]>-Zero && C[БаровПравееВершины]-C[БаровПравееВершины-1]>-Zero ){ Top[i]=C[БаровПравееВершины]; // Локальный максимум j=1; while ( j < dim ){ if( ( j<БаровПравееВершины && C[j-1]-Top[i]>Zero ) || ( j>БаровПравееВершины && C[j] -Top[i]>Zero ) ) { Top[i]=0; // Нет фрактала break; } j++; } } if( Top[i]>Zero ){ // Выбор вершины зигзага if( Bottom[i]>Zero ){ // Top и Bottom if( LastIsTop || LastIsBottom ){ // Не начало зигзага Min[i] =Bottom[i]; // Вертикальное колено Max[i] =Top[i]; LastBottom =Bottom[i]; // Запомнить Top и Bottom iLastBottom=i; LastTop =Top[i]; iLastTop =i; } } else{ // Top if( !LastIsTop ){ // LastIsBottom, или Max[i] =Top[i]; // начало зигзага LastIsTop =true; LastIsBottom=false; LastTop =Top[i]; // Запомнить Top iLastTop =i; } else{ // LastIsTop if( Top[i]-LastTop>-Zero ){ // Перерисовка Max[iLastTop]=0; Max[i] =Top[i]; LastTop =Top[i]; // Запомнить Top iLastTop =i; } } } } else{ if( Bottom[i]>Zero ){ // Bottom if( !LastIsBottom ){ // LastIsTop, или Min[i] =Bottom[i]; // начало зигзага LastIsTop =false; LastIsBottom=true; LastBottom =Bottom[i]; // Запомнить Bottom iLastBottom =i; } else{ // LastIsBottom if( LastBottom-Bottom[i]>-Zero ){ // Перерисовка Min[iLastBottom]=0; Min[i] =Bottom[i]; LastBottom =Bottom[i]; // Запомнить Bottom iLastBottom =i; } } } } i--; } if( iLastTop>0 ) tLastTop=Time[iLastTop]; // Время крайних изломов if( iLastBottom>0 ) tLastBottom=Time[iLastBottom]; return(0); }
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
If I have all the high and low fractals how could I calculate which fractals connect in accordance to the parameters of ExtDepth, ExtDeviation, and ExtBackStep of zigzag? From current bar to last bar because I only need first couple zigzag lines, not whole chart.
I'm having really hard time trying to wrap my head around zigzag despite reading many 'layman definitions' and reading source code.