Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 969

 
Vladimir Baskakov:

Спасибо, работает, только выполняется одно условие:

А мне нужно

А с ним позиции не открывает почему-то

int barfrup_1 = GetLastFractals(1,MODE_UPPER);
int barfrup_2 = GetLastFractals(barfrup_1+1,MODE_UPPER);
int barfrdn_1 = GetLastFractals(1,MODE_LOWER);
int barfrdn_2 = GetLastFractals(barfrdn_1+1,MODE_LOWER);

if(High[barfrup_1] < High[barfrup_2] && Low[barfrdn_1] < Low[barfrdn_2] )
if(High[barfrup_1] < High[barfrup_2] && Low[barfrdn_1] > Low[barfrdn_2] )
 
Igor Makanu:

Работает, но открывает позиции, не по условию, где захочет, ладненько

 
Vladimir Baskakov:

Работает, но открывает позиции, не по условию, где захочет, ладненько

не может быть,  мой код простой, фрактал как и ЗигЗаг имеет значения только на барах где стрелки, в цикле перебираем значения индикатора до появления стрелки и выходим из цикла, возвращаем номер бара на котором фрактал

я только не давно по фракталам делал советника - код проверенный, и что выяснилось в ходе теста, что фрактал на баре №1 может перерисовывать - включите режим визуализации тестера и добавьте индикатор фрактал

 
Igor Makanu:

не может быть,  мой код простой, фрактал как и ЗигЗаг имеет значения только на барах где стрелки, в цикле перебираем значения индикатора до появления стрелки и выходим из цикла, возвращаем номер бара на котором фрактал

я только не давно по фракталам делал советника - код проверенный, и что выяснилось в ходе теста, что фрактал на баре №1 может перерисовывать - включите режим визуализации тестера и добавьте индикатор фрактал

Может результат надо на 0 или empty value проверять
 
Aleksei Beliakov:
Может результат надо на 0 или empty value проверять

там 0 в пустых значениях, ну вроде как с нулем не лучший способ сравнивать сравниваю с _Point

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

ЗЫ: в очередной раз почему то обсуждаю свой код.... тем более код работает, не вижу кода других участников, не понятно кому это надо в итоге? ))))


PS:проверил, ибо знаю, что покоя вопрос не даст, все работает, код по быстрому:

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer);
   SetIndexBuffer(1,Label2Buffer);
   SetIndexArrow(0,SYMBOL_ARROWUP);
   SetIndexArrow(1,SYMBOL_ARROWDOWN);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--
   static int limit=0;   
   if(limit>=10) return(rates_total);
   int b_up = 0, b_dn = 0;
   while(limit<=10)
     {
      b_up = GetLastFractals(b_up,MODE_UPPER);
      Label1Buffer[b_up] = high[b_up];
      b_up++;
      b_dn = GetLastFractals(b_dn,MODE_LOWER);
      Label2Buffer[b_dn] = low[b_dn];
      b_dn++;
      limit++;
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//_______________________________________________________________________
int GetLastFractals(int bar,int mode) // bar - с какого бара начинать поиск, mode = MODE_UPPER или MODE_LOWER , результат № бара где найден фрактал
  {
   int i=bar; 
   while(i<Bars && iFractals(NULL,0,mode,i)<_Point) i++;
   return(i);
  }
//_______________________________________________________________________

результат


 
Artyom Trishkin:

ArraySetAsSeries(true) для буферов индикатора.

Делал. Я по справочнику делал
 
Igor Makanu:

не может быть,  мой код простой, фрактал как и ЗигЗаг имеет значения только на барах где стрелки, в цикле перебираем значения индикатора до появления стрелки и выходим из цикла, возвращаем номер бара на котором фрактал

я только не давно по фракталам делал советника - код проверенный, и что выяснилось в ходе теста, что фрактал на баре №1 может перерисовывать - включите режим визуализации тестера и добавьте индикатор фрактацен, ,

Нет, у меня позиции открывает. Как положено, на третьем баре фрактал. Но дальше хуже. По моему условию (fr1_up<fr_2 && fr1_down>fr2_down) не находит. Суть в сжатии цен, которые находим по двум фракталам
 

вроде у меня получилось !

999

Файлы:
IgorM.mq5  17 kb
 
Aleksandr Klapatyuk:

вроде у меня получилось !

Что именно?
 
Vladimir Baskakov:
Что именно?

имя Объекта передвигать по  iFractals