Как извлечь только нижние точки разворота, извлеченные индикатором зигзаг? - страница 3

 
jackprobe:
Спасибо, deVries. Попробую...


а если поставить что-то вроде

это внутри вашего кода ....

 
ubzen:

Вот что у меня получилось. Я не проверял результаты deVries выше [делал это, когда он опубликовал].


Здравствуйте, ubzen, я просто вижу ваш код как показано ниже:

Я не знаю, что означают эти две строки: if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];

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

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_width1 1
#property indicator_color2 Yellow
#property indicator_width2 1

double Bottoms[];
double Toppers[];

int init()
{

   IndicatorBuffers(2);

   SetIndexStyle(0,DRAW_SECTION);
   SetIndexBuffer(0,Bottoms);
   SetIndexEmptyValue(0,0.0);

   SetIndexStyle(1,DRAW_SECTION);
   SetIndexBuffer(1,Toppers);
   SetIndexEmptyValue(1,0.0);

  IndicatorShortName("zz show top & bottom");
  return(0);
}

int deinit()
{
  return(0);
}

int start()
{
  int counted_bars=IndicatorCounted();
  int limit=0;
  limit = Bars-counted_bars;
  
  for(int shift=limit-1;shift>=0;shift--)
  {
    int ExtDepth=12; int ExtDeviation=5; int ExtBackstep=3;
    int ZigzagBuffer=0; int HighMapBuffer=1; int LowMapBuffer=2;
    
    Bottoms[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        LowMapBuffer, shift
    );
    
    Toppers[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        HighMapBuffer, shift
    );
    
    if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift];
    if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];
  }
  
  return(0);
}
 
vx0532:


Здравствуйте, ubzen, я просто вижу ваш код как показано ниже:

Я не знаю, что означают эти две строки: if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];

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


Зигзаг с линией на минимумах и линией на максимумах
 


В советнике я написал следующие коды

но когда я тестирую его на исторических данных, "печать" показывает все 0, почему?

for(int shift=99;shift>=0;shift--)
  {
    int ExtDepth=12; int ExtDeviation=5; int ExtBackstep=3;
    int ZigzagBuffer=0; int HighMapBuffer=1; int LowMapBuffer=2;
    
    Bottoms[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        LowMapBuffer, shift
    );
    
    Toppers[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        HighMapBuffer, shift
    );
    if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift];
    if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];
 }
 
 shift=0;
 while(shift<100)
 {
 Print("Bottoms,Toppers:",Bottoms[shift]," , ",Toppers[shift]);
 shift++;
 }
 

прочитайте мой постинг 1 страницу назад

deVries 2013.10.19 12:13 #

https://www.mql5.com/en/forum/144092/page2#854926


//+------------------------------------------------------------------+
//|                                              ZigZag practise.mq4 |
//|                                Copyright © 2012, Tjipke de Vries |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Tjipke de Vries"
#property link      ""

//---- input parameters  ZigZag
extern int ExtDepth=12;
extern int ExtDeviation=5;
 
deVries:

Спасибо deVries, я понял этот вопрос после просмотра вашего сообщения.

Я пришел к выводу, что мы можем использовать двойной массив и переменную для получения возвращаемого значения iCustom() в кодах индикатора, но мы только можем использовать переменную для получения возвращаемого значения iCustom() в кодах советника.

Вы объясняете это так:"это неправильные буферы и вы должны найти значение i на каком баре будет верх или низ ".

Я понимаю, что в EA, когда мы используем массив x[i] для получения iCustom(), присвоение происходит нормально, но бар присвоения не определен.

Так что iCustom() не только просто возвращает значение, но и другие вещи, да?

но я все еще не понимаю значение кода: " if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];"

 
vx0532:

Спасибо deVries, я понял этот вопрос после просмотра вашего сообщения.

Я пришел к выводу, что мы можем использовать двойной массив и переменную для получения возвращаемого значения iCustom() в кодах индикатора, но мы только можем использовать переменную для получения возвращаемого значения iCustom() в кодах советника.

Вы объясняете это так:"это неправильные буферы и вы должны найти значение i на каком баре будет верх или низ ".

Я понимаю, что в EA, когда мы используем массив x[i] для получения iCustom(), присвоение происходит нормально, но бар присвоения не определен.

Так что iCustom() не только просто возвращает значение, но и другие вещи, да?

но я все еще не понимаю значение кода: " if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];".


вы все еще пытаетесь получить данные из индикатора ZigZag

Почему вы хотите, чтобы я объяснил то, чего нет в моем коде?

Почему бы вам не изучить код

//+------------------------------------------------------------------+
//|                                              ZigZag practise.mq4 |
//|                                Copyright © 2012, Tjipke de Vries |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Tjipke de Vries"
#property link      ""

//---- input parameters  ZigZag
extern int ExtDepth=12;
extern int ExtDeviation=5;

весь код вы можете найти на одной странице назад.... https://www.mql5.com/en/forum/144092/page2#854926

Если вы понимаете работу этого кода, то это просто использование того же метода в советниках.

 
  1. deVries: весь код вы можете найти на одной странице назад....
    Не говорите "на одну страницу назад", опубликуйте ссылку на конкретный пост. Это знак # справа от вашего имени (правый клик, копировать ссылку) на одну страницу назад.
  2. vx0532: но я так и не понял значение кода: " if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];"
    Как вы думаете, что значит "if(x> 0.1) x=x;"? Ничего! Исправленный код позже говорит:
        if(ZigZag[shift]>0.1 && Low[shift]==ZigZag[shift]) Bottoms[shift]=ZigZag[shift];
        if(ZigZag[shift]>0.1 && High[shift]==ZigZag[shift]) Toppers[shift]=ZigZag[shift];
    
 
WHRoeder:
  1. deVries: весь код вы можете найти на одной странице назад....
    Не говорите "одну страницу назад", опубликуйте ссылку на конкретный пост. Это знак # справа от вашего имени (щелкните правой кнопкой мыши, скопируйте ссылку) на одну страницу назад.
  2. vx0532: но я так и не понял значение кода: " if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];"
    Как вы думаете, что значит "if(x> 0.1) x=x;"? Ничего! Исправленный код позже говорит:

сделано https://www.mql5.com/en/forum/144092/page2#854926
 

Уважаемые все,

спасибо за эту замечательную дискуссию о ЗигЗаге и кодах. Я бы добавил новый поворот в дискуссию
Для меня было бы очень ценно, если бы я мог извлекать значения high/low, рассчитанные индикатором ZigZag
(с заданным, определенным набором параметров) вместе с временем их появления в текстовый или csv файл,
примерно так:

- Day, Time, High-Value, High(Boolean)
- Day, Time, Low-Value, Low(Boolean).

Я хотел бы извлечь эти значения для дальнейшего анализа в MS Excel, чтобы определить вероятности
появления временных периодов и амплитуд на графике. В итоге из
этих данных будут созданы гистограммы, указывающие на "подпись" значения на графике путем выявления присущих ему временных периодов и
и присущих ему амплитуд колебаний.

Возможно, я пытаюсь изобрести колесо, и где-то есть код, который делает то, что я хочу
сделать. Если нет, то стоило бы разработать такой код. Я провожу такой анализ вручную
с тоннами графиков каждый день, и я могу четко сказать, что знание внутренней сигнатуры стоимости
значительно повышает шанс предсказать изменение направления. На мой взгляд, этот процесс можно
легко автоматизировать... но мне понадобится помощь людей с опытом программирования. Результатом
будет либо удобный индикатор, либо даже автоматический советник MT4 (Expert Adviser)
, который будет торговать на значительных поворотных точках.

Было бы неплохо найти здесь кого-то, кто заинтересован в совместной работе. Но и несколько подсказок
о том, как извлечь данные из индикатора ZigZag, тоже не помешали бы. Большое спасибо!

- spjuliman

Причина обращения: