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

 
Alexey Viktorov #:

Тупанул со второй попытки. Видимо время к вечеру подошло.

c   А B C D  все верно, а вот так разделить инструмент на валюты согласен, не догнал.

И есть вероятность серидинного равенства, навскидку вроде не увидел, но лучше полный поиск сделать равенства наименования валюты в инструменте со 2й позиции по 3ю. Или отсечь в инструменте 1 и последнюю позицию и в оставшихся 4 знаках поискать)

 
Valeriy Yastremskiy #:

c   А B C D  все верно, а вот так разделить инструмент на валюты согласен, не догнал.

И есть вероятность серидинного равенства, навскидку вроде не увидел, но лучше полный поиск сделать равенства наименования валюты в инструменте со 2й позиции по 3ю. Или отсечь в инструменте 1 и последнюю позицию и в оставшихся 4 знаках поискать)

Нет, тупанул со второй попытки только в том, что 4 условия. Ведь для задачи не важно в какой позиции будет найдено искомое, в нулевой или третьей, главное найдено или нет. В итоге два условия, по базовой валюте и по второй.

 
Alexey Viktorov #:

Нет, тупанул со второй попытки только в том, что 4 условия. Ведь для задачи не важно в какой позиции будет найдено искомое, в нулевой или третьей, главное найдено или нет. В итоге два условия, по базовой валюте и по второй.

Ну так я исключал тем самым серидинное равенство, со второй или 3 позиции инструмента. Если не исключать, то все верно, 2 условия.

 
Valeriy Yastremskiy #:

Ну так я исключал тем самым серидинное равенство, со второй или 3 позиции инструмента. Если не исключать, то все верно, 2 условия.

Я так и не пойму что такое «серидинное равенство».

Сигнал по EURUSD

Ордер по EURJPY — ищем EUR и находим, выброс true. Второе условие проверять не надо…

Ордер по GBPJPY — ищем EUR не находим. ищем USD не находим, выброс false. Итого два условия.

 
Alexey Viktorov #:

Я так и не пойму что такое «серидинное равенство».

Сигнал по EURUSD

Ордер по EURJPY — ищем EUR и находим, выброс true. Второе условие проверять не надо…

Ордер по GBPJPY — ищем EUR не находим. ищем USD не находим, выброс false. Итого два условия.

 EURJPY равенство среди URJP

GBPJPY среди BPJP

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

 
Valeriy Yastremskiy #:

 EURJPY равенство среди URJP

GBPJPY среди BPJP

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

Нее, я лучше останусь на своей волне. Мне сложно понять зачем это…

 

Как работает конструктор в структурах?

struct as{
  int a,
      b,
      c;
    void as(){
    b=0;c=0;
    a=b+c;
    }  
 };
as sir;
 

Здравствуйте! Ломаю мозги.

Кому несложно, помогите, пожалуйста, с комментариями.


1. Каково назначение переменной "bb" и, соотвественно, оператора if (bb == 0) bb = i; ?


2. if ((Time[i]>=BeginDateCalc && Time[i]<=EndDateCalc && NumberOfBars<=0)

   || (NumberOfBars>0 && NumberOfBars>=i))

Как NumberOfBars может быть <= 0 и для чего?


3. s += (High [i] - Low [i]) / Point;

Для чего нужно деление на Point? 


4. По условию цикла for (i = Bars; i > 0; i--) счёт идёт от самого "старого" к самому "молодому" бару.

Почему тогда переменная b++ инкрементируется, а не декрементируется?

//+----------------------------------------------------------------------------+
//|                                                          AverageRange.mq4  |
//|                                                    Ким Игорь В. aka KimIV  |
//|                                                       http://www.kimiv.ru  |
//|                                                                            |
//|  14.09.2005  Скрипт для расчёта:                                           |
//|              средней волатильности инструмента High-Low                    |
//|              Возможность использования заданного количества баров          |
//+----------------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link      "http://www.kimiv.ru"
#property show_inputs

extern datetime BeginDateCalc = D'2013.01.01';
extern datetime EndDateCalc   = D'2013.12.31';
extern int      NumberOfBars  = 100;         


//+----------------------------------------------------------------------------+
//|  script program start function                                             |
//+----------------------------------------------------------------------------+
void start() {
   int    i;           //счётчик
   int    b  = 0;      //использовано баров
   int    bb = 0;      //?????????????????????
   int    s =  0;      //сумма всех значений High - Low
   string st = "";     //строка вывода на экран    

  for (i = Bars; i > 0; i--) {
    
    if ((Time [i] >= BeginDateCalc && Time [i] <= EndDateCalc && NumberOfBars <= 0)
    || (NumberOfBars > 0 && NumberOfBars >= i)) {
      
      if (bb == 0) bb = i;
      s += (High [i] - Low [i]) / Point;
      
      b++;
    }
  }

  st =      "Начало: " + TimeToStr (Time [bb], TIME_DATE | TIME_MINUTES) + "\n";        // "/n" - это перенос строки
  st = st + "Конец: " + TimeToStr (Time [bb - b + 1], TIME_DATE | TIME_MINUTES) + "\n";
  st = st + "Использовано баров: " + b + "\n";
  st = st + "Средняя волатильность: " + s / b + " п.\n";
  
  Comment (st);
}
//+----------------------------------------------------------------------------+
 

В bb находится индекс бара, при первом срабатывании условия. По этому индексу потом рассчитывается время начала расчёта.

NumberOfBars - эта переменная задаётся пользователем, а этот товарищ не надёжный, может поставить и минусовое значение. И наверное, здесь логика такая, если NumberOfBars неположительный, то расчёт ведётся между датой начала и окончания, а если положительный то, тогда по количеству свечей, заданному как раз этой переменной.

На Point делят, чтобы перевести значения из дробной части в пункты (1.01051-1.01000)/Point=51

Переменная bb после нуля изменяется всего один раз за всю работу скрипта. if (bb == 0)

 
Aleksei Stepanenko #:

В bb находится индекс бара, при первом срабатывании условия. По этому индексу потом рассчитывается время начала расчёта.

NumberOfBars - эта переменная задаётся пользователем, а этот товарищ не надёжный, может поставить и минусовое значение. И наверное, здесь логика такая, если NumberOfBars неположительный, о расчёт ведётся между датой начала и окончания, а если положительный то, тогда по количеству свечей, заданному как раз этой переменной.

Но поинт делят, чтобы перевести значения из дробной части в пункты 0.00051/Point=51

Переменная bb после нуля изменяется всего один раз за всю работу скрипта.

Если честно то логику Кима не догнал, почему через И условия выхода времени бара за пределы заданного и отрицательное значение количества расчетных баров с ИЛИ количество расчетных баров больше количества баров Барз))) И при этом он просто правит пользовательские параметры)

И даже алерт не выводит, что пользователь накосячил)