[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 720

 
artmedia70:
Я смотрю - вы и сами уже подходите к решению
Подходить-то к решению я подхожу... Вот тока как собака: понимать - понимаю, а сказать, - то есть в коде изобразить, - не могу))
Может, это от жары у меня мозг плавиться начинает)
 
Shuba:
Подходить-то к решению я подхожу... Вот тока как собака: понимать - понимаю, а сказать, - то есть в коде изобразить, - не могу))
Может, это от жары у меня мозг плавиться начинает)
Как фракталы ищете?
 
artmedia70:
Как фракталы ищете?

фракталы ищу по индикатору ZIGZAG-FRACTALS вот такой функцией:

void GetSignal()
  {
  int UpCount = 0, DnCount = 0;                                        // счетчик пиков ЗЗ
  int i = 0;                                                              // счетчик баров
  double ZZFirst = 0;                            // Значение первого найденного экстремума
  ArrayInitialize(ZZVUp, 0);                       // Значения верхних экстремумов зигзага
  ArrayInitialize(ZZVDn, 0);                         //Значения нижних экстремумов зигзага
  
  while(i < Bars && (UpCount < 2 || DnCount < 2))
    {
    double ZZCur = iCustom(NULL,0,"BW ZIGZAG-FRACTALS_2",0,i);
    if(ZZCur != 0)                                                   // найден экстремум
      {
      if(ZZFirst != 0)                             // Это не первый найденный экстремум
        {
        if(ZZCur == High[i] && UpCount < 2)
          {
          ZZVUp[UpCount] = ZZCur;
          ZZNUp[UpCount] = i;
          UpCount++;
          }         
          if(ZZCur == Low[i] && DnCount < 2)
            {
            ZZVDn[DnCount] = ZZCur;
            ZZNDn[DnCount] = i;
            DnCount++;
            }         
        }
      else
        ZZFirst = ZZCur; 
      }
    i++;
    } 
  if(i == Bars) return;                           // Последний посчитанный бар запоминаем
  
  }
 

Сейчас добавил в строчки: if(ZZCur == High[i] && UpCount < 2) и if(ZZCur == Low[i] && DnCount < 2) проверку на выше или ниже следующий фрактал, чем первый найденный.

Получились вот такие строчки:

if(ZZCur == High[i] && ZZCur > ZZFirst && UpCount < 2) и

if(ZZCur == Low[i] && ZZCur < ZZFirst && DnCount < 2)

но в итоге ищет как-то неадекватно :(

В картинке тостой белой линией показано, как должно быть, а тонкой зеленой - как получается...


 
Shuba:

фракталы ищу по индикатору ZIGZAG-FRACTALS вот такой функцией:

Попробуйте искать такой вот функцией:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.08.2008                                                     |
//|  Описание : Возвращает номер бара фрактала по его номеру.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
int GetFractalBar(string sy="0", int tf=0, int nf=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    i, k=iBars(sy, tf), kf;

  for (i=2; i<k; i++) {
    f=iFractals(sy, tf, MODE_LOWER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
    f=iFractals(sy, tf, MODE_UPPER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
  }
  Print("GetFractalBar(): Фрактал не найден");
  return(-1);
}

Функция возвращает номер бара фрактала. Сначала вызываете с параметром nf = 0 - будет найден последний фрактал, а далее в цикле вызываете данную функцию, где nf = счётчику цикла от 1 до ... сколько нужно. В теле цикла сделайте проверку на соответствие найденного следующего фрактала нужным вам критериям и если соответствует, то выходите из цикла. После отработки будете иметь номера баров двух нужных вам фракталов и делайте с ними дальше что желаете.

 
artmedia70:

Попробуйте искать такой вот функцией:

Функция возвращает номер бара фрактала. Сначала вызываете с параметром nf = 0 - будет найден последний фрактал, а далее в цикле вызываете данную функцию, где nf = счётчику цикла от 1 до ... сколько нужно. В теле цикла сделайте проверку на соответствие найденного следующего фрактала нужным вам критериям и если соответствует, то выходите из цикла. После отработки будете иметь номера баров двух нужных вам фракталов и делайте с ними дальше что желаете.


Спасибо) Сейчас буду пробовать
 
Vinin:


В тестере или на демо?

В тестере point по другим инструментам будет равен 0


Было в тестере,... хотя и условия задавались вообще явно, для проверки только одной пары, чтоб тестер не путать. Вообщем в итоге намучавшись изрядно с моим кодом трала, взял функцию мониторгинга трала по парам у KimIV. Теперь все работает на демо ))  

За помощь всем спасибо, ваши разъяснения очень помогают.  

 

Похоже, проблемку разрешил, но вопрос остался...

Как деинициализировать переменную для повторного применения?

 

Никак, при инициализации для переменной просто выделяется участок оперативной памяти, зачем его переназначать заново? Просто обнуляй переменную, и используй сколь угодно количество раз. Собственно говоря, в чем проблема? Зачем деинициализировать переменную? Просто в этом действии нет смысла.

 
ToLik_SRGV:

Зачем деинициализировать переменную? 



Условие если 

for(int a=0;a<8;a++)

здесь что то делаем

иначе если другое условие

for(int a=0;a<8;a++)

делаем что нибудь другое

Смысл - не плодить переменные, много условий и счетчиков. 

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