Обсуждение статьи "ZigZag всему голова (Часть II). Примеры получения, обработки и отображения данных" - страница 3

 
lovaK:

...

Обновлен:2019.03.12 13:28

Попробуйте сейчас новую версию библиотеки: EasyAndFastGUI - библиотека для создания графических интерфейсов

 
Anatoli Kazharski:

Обновлен:2019.03.12 13:28

Попробуйте сейчас новую версию библиотеки: EasyAndFastGUI - библиотека для создания графических интерфейсов

Добавь, пожалуйста, все файлы одним архивом. Штатный архив кодобазы не обновляется при публикации новых версий.

 
Andrey Khatimlianskii:

Добавь, пожалуйста, все файлы одним архивом. Штатный архив кодобазы не обновляется при публикации новых версий.

 

ANatoli, отличная работа!

Один вопрос...

В приложенных файлах MultiPercentageSegmentZZ похоже есть ошибка. Функция GetZigZagData для zz_current0, zz_current1, zz_current2 не имеет h_buff,l_buff.






Должно ли быть так?

//+------------------------------------------------------------------+
//| Заполните индикаторные буферы|
//+------------------------------------------------------------------+
void FillIndicatorBuffers(const int i,const int total,const datetime &time[])
  {
   int index=total-i-1;
   int copy_total=1000;
   int h_buff=2,l_buff=3;
   datetime start_time_in =NULL;
   datetime stop_time_in  =NULL;
//--- Получите исходные данные из более высокого временного периода
   datetime stop_time=time[i]-(PeriodSeconds(HigherTimeframe)*copy_total);
   CopyBuffer(zz_handle_htf,2,time[i],stop_time,h_zz_buffer_temp);
   CopyBuffer(zz_handle_htf,3,time[i],stop_time,l_zz_buffer_temp);
   CopyTime(_Symbol,HigherTimeframe,time[i],stop_time,t_zz_buffer_temp);
//--- Получите окончательные данные с более высокого таймфрейма
   zz_higher_tf.GetZigZagData(h_zz_buffer_temp,l_zz_buffer_temp,t_zz_buffer_temp);
   double htf_value=zz_higher_tf.PercentSumSegmentsDifference();
//--- Данные первого сегмента
   zz_higher_tf.SegmentTimes(zz_handle_current,h_buff,l_buff,_Symbol,HigherTimeframe,_Period,0,start_time_in,stop_time_in);
   zz_current0.GetZigZagData(zz_handle_current,h_buff,l_buff,_Symbol,_Period,start_time_in,stop_time_in);
//--- Данные второго сегмента
   zz_higher_tf.SegmentTimes(zz_handle_current,h_buff,l_buff,_Symbol,HigherTimeframe,_Period,1,start_time_in,stop_time_in);
   zz_current1.GetZigZagData(zz_handle_current,h_buff,l_buff,_Symbol,_Period,start_time_in,stop_time_in);
//--- Данные третьего сегмента
   zz_higher_tf.SegmentTimes(zz_handle_current,h_buff,l_buff,_Symbol,HigherTimeframe,_Period,2,start_time_in,stop_time_in);
   zz_current2.GetZigZagData(zz_handle_current,h_buff,l_buff,_Symbol,_Period,start_time_in,stop_time_in);
//--- На последнем баре
   if(i<total-1)
     {
      buffer_zz_higher_tf[i] =htf_value;
      buffer_segment_0[i]    =zz_current0.PercentSumSegmentsDifference();
      buffer_segment_1[i]    =zz_current1.PercentSumSegmentsDifference();
      buffer_segment_2[i]    =zz_current2.PercentSumSegmentsDifference();
     }
//--- Об истории
   else
     {
      //--- В случае появления нового бара старшего таймфрейма
      if(new_bar_time!=t_zz_buffer_temp[0])
        {
         new_bar_time=t_zz_buffer_temp[0];
         //---
         if(i>2)
           {
            int f=1,s=2;
            buffer_zz_higher_tf[i-f] =buffer_zz_higher_tf[i-s];
            buffer_segment_0[i-f]    =buffer_segment_0[i-s];
            buffer_segment_1[i-f]    =buffer_segment_1[i-s];
            buffer_segment_2[i-f]    =buffer_segment_2[i-s];
           }
        }
      else
        {
         buffer_zz_higher_tf[i] =htf_value;
         buffer_segment_0[i]    =zz_current0.PercentSumSegmentsDifference();
         buffer_segment_1[i]    =zz_current1.PercentSumSegmentsDifference();
         buffer_segment_2[i]    =zz_current2.PercentSumSegmentsDifference();
        }
     }
  }
//+------------------------------------------------------------------+
 
А что, у кого-то скомпилировалось без ошибок?
Файлы:
 
К сожалению архива с полностью работающим приложением 2 части так и не появилось. Тестить нечего.
 
Eugeni Neumoin #:

Более 10лет назад также был "зачарован" зигзагами и насоздавал их большое количество.

В Аттаче примеры - мультизигзаг на 9 таймфреймов и Конструктор зигзагов и т.д. небольшое количество разработок на основе зигзагов.

Но важен практический смысл. Гораздо серьезнее задача выявления тех эктремумов, от которых можно "оттолкнуться" при анализе.

Как пример:

Выбрали с помощью зигзага три экстремума. Привязали вилы Эндрюса к ним. И видим, что рынок точно дошел несколько дней назад до пунктирной линии и точно от нее отбился.

И таких картинок можно выложить огромное количество. Не любые экстремумы, найденные зигзагом можно использовать для этого.

На картинке меню с цифрами 0-10 и 12-14 - 14 алгоритмов зигзагов. А под номером 11 еще 7 алгоритмов зигзагов для поиска паттернов. Всего 21 алгоритм.

В аттаче с помощью Конструктора можно насоздавать также много алгоритмов. Можете использовать в своих разработках.

И еще картинки

Спускаемся пониже


Еще ниже спускаемся и посмотрим, как образовывался экстремум по номером 1 на графике выше

Это достигается не перемолачиванием лучей и экстремумов зигзага. И не подсчетом каких-то не вполне понятных статистических закономерностей зигзага.

Важнее найти такой алгоритм, который бы выявлял знАчимые экстремумы.

Можно все эти MZZ9 для МТ5?