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

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

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