Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 136

 
paladin80:
Возможно, то что я понял из вашего вопроса отличается от того что вы имели ввиду. В моём примере сравниваются цены открытия между 3 и 2 барами, и 2 и 1. Бары 3 и 1 не сравниваются. В случае если сравниваемые значения равны - ничего не происходит, просто переход к следующему сравнению.
Почему х>1 (не >=). При первой итерации сравниваются Open[3]==Open[3-1], т.е. Open[3]==Open[2]. ОК. При второй (х=2), Open[2]==Open[1]. ОК. Третьей итерации нет. При х>=1 будет сравнение Open[1]==Open[0], не есть ОК, т.к. будте сравнение с 0 баром.

Большое спасибо! А если сравнивать цены открытия и закрытия каждого из трех баров, так ли изменится код?
extern int n=4;
//-----------------------------------------------+
for (x=n;x>1;x--)
   {
    if(Close[x]==Open[x]) continue;
      if(Close[x]<Open[x])
     {
      action
     }
     else{
      if(Close[x]>Open[x])
     {
      action
      }
    }
   }
 
ALXIMIKS:

Нет не будет, при каждом новом тике значение Flag будет равно true. https://book.mql4.com/ru/variables/types

Нужно или объявить переменную на глобальном уровне - например в начале программы, вне всех функций.

Или сделать переменную статической - static bool flag=true; .

Только нужно не забывать, что при перезапуске переменная переинициализируется. Поэтому такой подход приемлем для тестера, но не для реальной торговли.
 
Народ, не подскажите индикатор. Вообщем основан на двух скользящих. И при пересечении выдает направление в виде стрелок. Не могу найти, спс.
 
skyjet:

Большое спасибо! А если сравнивать цены открытия и закрытия каждого из трех баров, так ли изменится код?

Для уточнения задачи. Надо сравнить открытие и закрытие одного и того же бара, т.е. является ли бар номер n медвежьим или бычьим. Киньте нижеприведённый скрипт на окно котировок.

extern int n=4;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   for (int x=n; x>1; x--)
    {  
     if(Close[x]==Open[x])
      {
       Print("Бар номер ",n," плоский :)");
       continue;
      }
     if(Close[x]<Open[x])
      {
       Print("Бар номер ",n," медвежий");
       continue;
      }
     else // if(Close[x]>Open[x]) - В данном случае сравнение if можно пропустить
          // т.к. два случая (равно и меньше) уже обработаны
      {
       Print("Бар номер ",n," бычьий");
      }
    }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
paladin80:

Чтобы правильно тут вставить код, нажмите SRC а потом туда код.

Киньте этот советник на окно котировок.


закинул в окно, как и индикатор просто пишет значение сдвига как я понял, а что в код приписать чтоб можно в настройках было добавлять сколь мне надо уровней таких?
 
Danila_mactep:

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

Он не пишет значение сдвига. Если мне память не изменяет, то в коде не задан сдвиг, а просто есть считывание значения МАшки. Вот он и выдаёт это значение.

Чтобы можно было увидеть значение сдвига относительно значения МАшки, нужно задать во внешних параметрах это значение, а потом вывести значение МАшки+значение сдвига*Point для сдвига вверх и значение МАшки-значение сдвига*Point для показа сдвига вниз.

 
Danila_mactep:

закинул в окно, как и индикатор просто пишет значение сдвига как я понял, а что в код приписать чтоб можно в настройках было добавлять сколь мне надо уровней таких?
extern int sdvig=0;
//---
int init() 
{
  return(0);
}
//--------------
int start()
{
  double MA=iMA(NULL, 0, 12, 144, MODE_SMA, PRICE_CLOSE, sdvig);
  Comment("Для бара номер ",sdvig," значение МА = ",DoubleToStr(MA,Digits));
  return(0);
}
//--------------
int deinit()
{
  Comment("");
  return(0);
}
 
paladin80:


Не, не так. Нужен сдвиг от МАшки вверх и вниз на заданное кол-во пунктов. А не сдвиг по барам в историю.
 
artmedia70:

Не, не так. Нужен сдвиг от МАшки вверх и вниз на заданное кол-во пунктов. А не сдвиг по барам в историю.
extern int move=100; 
//---
int init() 
{
  return(0);
}
//--------------
int start()
{
  double MA=iMA(NULL, 0, 12, 144, MODE_SMA, PRICE_CLOSE, 0);
  double Sdvig=MA+(move*Point);
  Comment("Сдвиг на ",sdvig," пунктов от МА = ",DoubleToStr(Sdvig,Digits));
  return(0);
}
//--------------
int deinit()
{
  Comment("");
  return(0);
} 
 
paladin80:

И теперь в минус тоже... И будет ему счастье :) Или оставите всё-же ему "на подумать" как сдвиг вниз сделать самому?