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

 
lynxntech #:

правильней будет в uint за пределами цикла определить

Часто так делаю, но всё же очень хочется верить, что такие стандартные вещи компилятор умеет оптимизировать.

 

У робота есть два фильтра: Stochastic и RSI, у каждого набор параметров. Использоваться должен только один фильтр. Т.е. если включен Stochastic, то RSI должен быть выключен и наоборот.

Сейчас сделал так:

  • Сделал input переменные для Stochastic и RSI, включающую и выключающую их работы.
  • В блоке OnInit проверяю, если Stochastic и RSI одновременно включены, то ошибка INIT_PARAMETERS_INCORRECT.
  • В блоке OnInit проверяю, если Stochastic выключен, то все его параметры должны быть равны нулю, иначе ошибка INIT_PARAMETERS_INCORRECT/ Аналогично с RSI.

Цель:

  • Не тратить время при оптимизации на несовместимые варианты. Например, чтобы в случае, если выбран RSI, чтобы не перебирались параметры Stochastic (размер зон перекупленности/перепроданности, периоды K, D, замедление, метод сглаживание, цены).
  • Оказалось, что мой вариант не работает. При оптимизации эти варианты похоже все равно перебираются, что отражается на конечном результате оптимизации.

Посоветуйте, как сделать, чтобы оптимизатор при включенном RSI не перебирал параметры Stochastic и наоборот.

 
lego9955 #:

Перед этим сделал так, посчитал что справился и удалил свой пост. 

Когда обновил страницу увидел что ответили. Да, с обработкой ошибок правильнее. Спасибо!

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

 
Alexey Petrov #:

Здравствуйте,

Попробуйте поискать готовые решения на рынке - https://www.mql5.com/fr/search#!keyword=money%20management&module=mql5_module_market

Вы также можете заказать индивидуальное решение у Freelance - https://www.mql5.com/fr/job.

Здравствуйте и спасибо за ваш ответ. Я смог создать скрипт, который соответствует моим ожиданиям, но, к сожалению, есть две ошибки, которые я не могу понять или исправить. Не могли бы вы знать, к кому обратиться за небольшой помощью? Это всего лишь две строки кода, которые регистрируются как ошибки после компиляции...
 
С новым годом! Какая windows лучше для MT5 10 или 11? Сижу на лаптопе AMD 5900Х
 

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

Конкретнее:
есть индикатор "Automatic Trendline" в маркете. Я хочу на его основе сделать робота, который в момент пересечения цены данных линий по индикатору (ну и при заданных доп.условиях) открывал бы или закрывал ту или иную позицию.

 
Rad89 #:

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

Конкретнее:
есть индикатор "Automatic Trendline" в маркете. Я хочу на его основе сделать робота, который в момент пересечения цены данных линий по индикатору (ну и при заданных доп.условиях) открывал бы или закрывал ту или иную позицию.

Для себя нет проблем. Для маркета или CodeBase нельзя использовать чужие поделки из маркета…

 
Alexey Viktorov #:

Для себя нет проблем. Для маркета или CodeBase нельзя использовать чужие поделки из маркета…

Для себя. Я не знаю: как это сделать. Не могу найти код в открытом виде. Или как прикрутить в свой код, что бы он ловил положение линий.

 

Здравствуйте, @Rad89

Вам нужны функции iCustom() и CopyBuffer().

Вот пример добавления индикатора, скачанного с Маркета, в советник

// Глобальная переменная для хендла индикатора
int tlHandle;

int OnInit() {
   // Создаем хендл индикатора
   tlHandle = iCustom(Symbol(), PERIOD_CURRENT, "Market\\Automatic Trendlines", false, 5, 15, clrRed, clrBlue, 2, "My Support", "My Resistance");
   
   // Можем добавить индикатор на график, если хотим. 
   // Для использования в расчетах это необязательно
   ChartIndicatorAdd(ChartID(), 0, tlHandle);

   // Вызовем один раз OnTick(), чтобы на выходных у нас что-то в логе отобразилось
   OnTick(); 
   
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason) {}

void OnTick() {
   // Объявляем массивы для буферов индикатора
   double tlBuffer0[], tlBuffer1[]; // ,tlBuffer1, ...
   
   int res;
   
   // Копируем нужное количество значений из индикаторных буферов в массивы
   res = CopyBuffer(tlHandle, 0, 0, 100, tlBuffer0);
   res = CopyBuffer(tlHandle, 1, 0, 100, tlBuffer1);
   
   // У разных индикаторов различное количество индикаторных буферов, 
   // числа из которых используются для построения линий, значков, цветовых меток на графике
   // Сколько их у данного индикатора и как используются их числа исследуйте самостоятельно
   
   // res = CopyBuffer(tlHandle, 2, 0, 100, tlBuffer2);
   
   // Пользуемся полученными значениями
   ArrayPrint(tlBuffer0);
   ArrayPrint(tlBuffer1);
}
Документация по MQL5: Технические индикаторы / iCustom
Документация по MQL5: Технические индикаторы / iCustom
  • www.mql5.com
iCustom - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Здравствуйте. Есть Enum.
enum ENUM_NAME
  {
   ENUM_1,
   ENUM_jsdf
   ....
   ENUM_FEF;   
  };
  Как выделить память под массив E_NAME[], чтобы хватило на  все возможные значения ENUM_NAME(без повторений) ?
ENUM_NAME     E_NAME[];

И проинициализировать E_NAME[]  всеми возможными значениями ?