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

 
Seric29:

Есть идея написать функцию, которая будет принимать и сдвигать массив. Вопрос такой как сделать эту функцию, чтобы она сама определяла какого типа массив одномерный или 2 мерный, чтобы не указывать в аргументах каждый раз что массив 2мерный или обычный. Одновременно с этим я хочу применить шаблон чтобы не указывать какого типа массив.

Как сделать так чтобы не нужно было указывать какой массив?

Перегрузку делать:

template<typename T>
void MoveArray(T &array1[][]) // 2ух мерный.
{
// тело
}
template<typename T>
void MoveArray(T &array1[])// одномерный.
{
// тело
}
 
Ilya Prozumentov:

Перегрузку делать:

А разве второе измерение может быть динамическим?
 
Alexey Viktorov:
А разве второе измерение может быть динамическим?

Оно не динамическое, просто записывается так в качестве принимаемого аргумента просто ставятся квадратные скобки.

 

Как реализовать в цикле (или как-то по другому) перебор возможных вариантов условий?


Например есть 2 индикатора MA и MACD, то есть они представляют 3 возможных вариантов условий:

1 вариант - if(iMA ...) {...};

2 вариант - if(iMACD ...) {...};

3 вариант - if(iMA ... iMACD ...) {...};


Комбинирование входных параметров сделать просто, а как сделать комбинирование условий? Ведь это особенно полезно если индикаторов или формул больше чем 2


Дайте ссылки на примеры если есть

 
Alexandr Sokolov:

Как реализовать в цикле (или как-то по другому) перебор возможных вариантов условий?

Если правильно понял, то ответ можно поискать в теме.

 

Здравствуйте ещё раз, опять я не понимаю чего-то очевидного.

Так как всё-таки передать массив в функцию?

double b[5]={1,2,3,4,5};
void OnStart()
  {
//---
Func(b[]);

  }
//+------------------------------------------------------------------+
void Func(double &a[])
      {
         Alert(a[3]);
      }

Ошибки:
']' - expression expected
'b' - parameter conversion not allowed

Допустим, я знаю, как убрать первую ошибку:

Func(b[3]);

Но в таком случае что, будет передан только третий элемент? Это бессмысленно.
Как мне передать массив целиком?
Спасибо.

 
Mikhail Sobolev:

Здравствуйте ещё раз, опять я не понимаю чего-то очевидного.

Так как всё-таки передать массив в функцию?

Ошибки:
']' - expression expected
'b' - parameter conversion not allowed

Допустим, я знаю, как убрать первую ошибку:

Но в таком случае что, будет передан только третий элемент? Это бессмысленно.
Как мне передать массив целиком?
Спасибо.

Func(b);
 
int OnCalculate (const int rates_total,      // размер массива price[] 
                 const int prev_calculated,  // обработано баров на предыдущем вызове 
                 const int begin,            // откуда начинаются значимые данные 
                 const double& price[]       // массив для расчета 
                );

Объясните пожалуйста механику переменной begin


По этой ссыке вроде как есть информация https://www.mql5.com/ru/docs/basis/function/events, но я либо её не понял, либо не нашел. Я не могу понять какое значение стоит по умолчанию в начале и как оно изменяется по мере прохождения циклов в индикаторах


Например я знаю что return() внутри функции OnCalculate() присваивает возвращаемое значение переменной prev_calculated, и оно будет использоваться в расчётах при следующем вызове функции OnCalculate(), то есть при следующем тике


Опишите пожалуйста такими же простыми словами механику переменной begin внутри функции OnCalculate()

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 

Добрый день.

Подскажите, пожалуйста, почему-то в функции OnTick не пишутся данные в файл по такому коду:

   //=== запись данных в файл ===

   h1=FileOpen("test_bar.csv",FILE_CSV|FILE_WRITE|FILE_READ,",");

   FileSeek(h1, 0, SEEK_END);

   FileWrite(h1, TimeToStr(Time[1],TIME_DATE|TIME_MINUTES),i,Open[1],High[1],Low[1],Close[1],   Parabola57Up,   " ");

   FileClose(h1);


И именно при историческом тестировании. При работе советника в онлайне - запись идет.

Спасибо

 
Alexandr Sokolov:

Как реализовать в цикле (или как-то по другому) перебор возможных вариантов условий?


Например есть 2 индикатора MA и MACD, то есть они представляют 3 возможных вариантов условий:

1 вариант - if(iMA ...) {...};

2 вариант - if(iMACD ...) {...};

3 вариант - if(iMA ... iMACD ...) {...};


Комбинирование входных параметров сделать просто, а как сделать комбинирование условий? Ведь это особенно полезно если индикаторов или формул больше чем 2


Дайте ссылки на примеры если есть

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

А как зациклить перебор условий? Например есть 3 индикатора (подбор входных параметров в цикле/ах не берём сейчас во внимание для простоты понимания), и они представляют собой 7 возможных комбинаций условий/совместной работы

Например в первых трёх условиях по одному индикатору
1) if(индикатор №1 ...) {...};
2) if(индикатор №2 ...) {...};
3) if(индикатор №3 ...) {...};

Во второй тройке условий по двум индикаторам
4) if(№1 ... && №2 ...) {...};
5) if(№1 ... && №3 ...) {...};
6) if(№2 ... && №3 ...) {...};

И в последнем седьмом условии все три имеющиеся индикаторы
7) if(№1 ... && №2 ... && №3 ...) {...};

И ещё если это возможно, было бы хорошо зациклить перебор логических условий. Например не прописывать && || > < == и так далее а зациклить

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

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