Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1502

 
psihodelit #:

Всем привет, подскажите, возможно ли как-то сделать импорт функции из одного советника в другой?

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

нужно чтобы по достижению просадки второго советника, первый советник не открывал ордера...

Как к примеру это сделать?

Для начала (ИМХО конечно) нужно понять несколько тонкостей

  1. Доступен ли Вам для редактирования код обоих советников.
  2. Оставляют ли советники следы своей деятельности в ГлобальныхПеременных
  3. Владеете ли Вы хотя-бы начальными навыками кодирования 
Если ответ на все три тонкости положительный, задуманное легко осуществить, если есть пробелы будет сложнее, но тоже возможно - гуртом чегонить придумаем.
 
Sergey Voytsekhovsky #:

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

то этот вопрос тут не возник бы.

 
Yuriy Bykov #:

Большое спасибо за идею, которую подсказали выше. Вот что из этого получилось, если конечно интересно.

//---
   NOD = 1;
   ArraySort(Arr_ZigLag);
   size_zigLag = ArraySize(Arr_ZigLag);
   for(int i = size_zigLag - 1; i > 0; i--)
     {
      if(NOD != 1)
         if(Arr_ZigLag[i] != Arr_ZigLag[i-1])
            NOD = CalculateNOD(Arr_ZigLag[i-1], NOD);
      if(NOD == 1)
         if(Arr_ZigLag[i] != Arr_ZigLag[i-1])
            NOD = CalculateNOD(Arr_ZigLag[i], Arr_ZigLag[i-1]);
           }
   return(NOD);
  }
//+------------------------------------------------------------------+
//| Функция НОД(НаибольшийОбщийДелитель)                             |
//+------------------------------------------------------------------+
int CalculateNOD(int a=1, int b=1)
  {
   int Nod = (int)MathMod(a, b);
   while(Nod > 0)
     {
      a = b;
      b = Nod;
      Nod = (int)MathMod(a, b);
     }
   if(Nod == 0)
      Nod = b;
   return(Nod);
  }
 
Sergey Voytsekhovsky #:

Или можно так:

//+------------------------------------------------------------------+
//| Наибольший общий делитель чисел a и b                            |
//+------------------------------------------------------------------+
int gcd(int a, int b) {
   int c;

   while(b > 0) {
      c = a % b;
      a = b;
      b = c;
   }

   return a;
}

//+------------------------------------------------------------------+
//| Наибольший общий делитель массива чисел a                        |
//+------------------------------------------------------------------+
int ArrayGcd(int &a[]) {
   int n = ArraySize(a);
   if(n == 1) {
      return 0;
   }
   int c = gcd(a[0], a[1]);

   for(int i = 2; i < n; i++) {
      c = gcd(a[i], c);
      if(c == 1) {
         break;
      }
   }
   return c;
}


int OnCalculate(...) {
   ...
   ArraySort(Arr_ZigLag);
   NOD = ArrayGcd(Arr_ZigLag);
   return(NOD);
  }
 
Yuriy Bykov #:

Или можно так:

Соглашусь, красиво! С Вашего позволения положу в библиотеку?

 
Yuriy Bykov #:

Или можно так:

А подскажите плиз, если смогу донести вопрос?

Вы использовали математическую ф. "Остаток от деления", а у меня встроенная функция "MathMod", там речь идет о "вещественный остаток от деления двух чисел". Слово ВЕЩЕСТВЕННЫЙ что означает???

 
Sergey Voytsekhovsky #:

 Слово ВЕЩЕСТВЕННЫЙ что означает???

В данном случае подразумеваются дробные числа.

 
Aleksandr Slavskii #:

Вариантов несколько.

Можно воспользоваться советом выше. Вполне рабочий вариант.

Можно использовать  Глобальные переменные терминала.

Можно наладить обмен между советниками с помощью записи/чтения файла.

Как говорится на вкус и цвет все фломастеры разные)))

Как только понять в каком направлении двигаться, с чего начать и как. Знаний почти нет...

  1. Доступен ли Вам для редактирования код обоих советников.
    Да.
  2. Оставляют ли советники следы своей деятельности в ГлобальныхПеременных
    Точно не скажу.
  3. Владеете ли Вы хотя-бы начальными навыками кодирования 
    Чуть-чуть совсем.
 
psihodelit #:

Как только понять в каком направлении двигаться, с чего начать и как. Знаний почти нет...

  1. Доступен ли Вам для редактирования код обоих советников.
    Да.
  2. Оставляют ли советники следы своей деятельности в ГлобальныхПеременных
    Точно не скажу.
  3. Владеете ли Вы хотя-бы начальными навыками кодирования 
    Чуть-чуть совсем.

Для начала ответьте, прежде всего мамому себе, на эти три вопроса. Если ответить не сможете, надо заполнять, изучть. Это что-бы понять в каком направлении двигаться.

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

 
Sergey Voytsekhovsky #:
Оставляют ли советники следы своей деятельности в ГлобальныхПеременных
Точно не скажу.

Вот с этого и начните - В терминале, в ленте, в папке Сервис - есть пунктик ГлобальныеПеременные. Давайте найдем.

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