Обсуждение реализации советников. - страница 6

 
Ivan_Invanov:
Здравствуйте. Подскажите пожалуйста, какой сигнал на вход в рынок у этого советника, и где он находится в коде?

Модуль сигналов пользовательского индикатора Вы подключаете в строке

//--- available signals
#include <Expert\Signal\SignalMA.mqh>


а здесь Вы можете проверить торговые сигналы данного индикатора 


На данный момент информации достаточно и Вам нужно её переварить. Также рекомендую к прочтению статьи

Документация по MQL5: Стандартная библиотека / Модули стратегий / Модули торговых сигналов / Сигналы индикатора Moving Average
Документация по MQL5: Стандартная библиотека / Модули стратегий / Модули торговых сигналов / Сигналы индикатора Moving Average
  • www.mql5.com
Цена пересекла индикатор сверху вниз(цена Open анализируемого бара выше линии индикатора, а цена Close - ниже), но индикатор растет (слабый сигнал на отбой от линии индикатора). Цена пересекла индикатор нижней тенью (цены Open и Close анализируемого бара выше линии индикатора, а цена Low ниже) и индикатор растет (сигнал на отбой от линии...
 

Ребята, есть такой вопрос

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

input  int                Profit_Lev1        = 5;           // |     1-я фиксация прибыли 
sinput string _p1="";//---
input  int                Profit_Lev2        = 7;           // |     2-я фиксация прибыли 
sinput string _p2="";//---
input  int                Profit_Lev3        = 10;          // |     3-я фиксация прибыли


Имеем 3 уровня фиксации прибыли, 1 -й не должен быть больше 2-го и 3-го    и 2-й не больше 3-го

//+------------------------------------------------------------------+
//| Проверяет внешние параметры                                      |
//+------------------------------------------------------------------+
bool CheckInputParameters()
  {
     if(Profit_Lev1 >= Profit_Lev2  || Profit_Lev1 >= Profit_Lev3 || Profit_Lev2 >= Profit_Lev3)
       {
         Print(_Symbol,
               ": 1-й уровень профита ("+IntegerToString(Profit_Lev1)+") "
               "должен быть больше 2-го и 3-го уровня профита ("+IntegerToString(Profit_Lev2)+"   "+IntegerToString(Profit_Lev3)+")!");
         return(false);
        }                     
//--- Параметры корректны
   return(true);
  }

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  { 


//--- Проверим внешние параметры
   if(!CheckInputParameters())
      return(INIT_PARAMETERS_INCORRECT);


//--- Инициализаия прошла успешно
   return(INIT_SUCCEEDED);
  }


Запускаю оптимизацию

В журнале начинает сыпаться куча ошибок, наверное то что сбрасывает прогон


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

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

 
Konstantin Seredkin:

Ребята, есть такой вопрос

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


Имеем 3 уровня фиксации прибыли, 1 -й не должен быть больше 2-го и 3-го    и 2-й не больше 3-го

   

Ввести не три "уровня прибыли", а "базовый уровень", "превышение второго уровня над базовым" и "превышение третьего уровня над вторым".

Все. Делаем полный перебор.

Если надо, чтобы все три уровня помещались в какой-то фиксированный диапазон, тогда вводим переменные "ширина диапазона" и две "границы между уровнями", причем, первая граница - это доля от диапазона,  а вторая граница - доля от оставшейся (после первой границы) части диапазона.

Я бы так делал...

 
Georgiy Merts:

Ввести не три "уровня прибыли", а "базовый уровень", "превышение второго уровня над базовым" и "превышение третьего уровня над вторым".

Все. Делаем полный перебор.

Если надо, чтобы все три уровня помещались в какой-то фиксированный диапазон, тогда вводим переменные "ширина диапазона" и две "границы между уровнями", причем, первая граница - это доля от диапазона,  а вторая граница - доля от оставшейся (после первой границы) части диапазона.

Я бы так делал...

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

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

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

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

 
Georgiy Merts:

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

Всеравно не понимаю.

Это же не просто какие то статичные переменные, это внешние переменные в которые я задаю 3 тейк профита


Робот торгует 3-мя лотами

через 100п я хочу закрыть 1 лот  = это первый уровень профита

через 200 еще один лот = второй уровень профита

через 300 еще один лот = третий уровень профита


Но при первом уровне робот ставит стоп лос в безубыток

А при втором уровне робот этот стоп переносит на 1-й уровень профита.

Небыло бы безубытка, пофиг как там оптимизатор бы подобрал эти уровни, пусть хоть 1- й будет 300  второй 50п  третий 150

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

300    50    150

50    300   150

и т.д.

а нормально все шло

50  100  200

150  160   170

и т.д.

Делая проверку на корректность введенных параметров

//+------------------------------------------------------------------+
//| Проверяет внешние параметры                                      |
//+------------------------------------------------------------------+
bool CheckInputParameters()
  {
     if(Profit_Lev1 >= Profit_Lev2  || Profit_Lev1 >= Profit_Lev3 || Profit_Lev2 >= Profit_Lev3)
       {
         Print(_Symbol,
               ": 1-й уровень профита ("+IntegerToString(Profit_Lev1)+") "
               "должен быть больше 2-го и 3-го уровня профита ("+IntegerToString(Profit_Lev2)+"   "+IntegerToString(Profit_Lev3)+")!");
         return(false);
        }                     
//--- Параметры корректны
   return(true);
  }

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  { 


//--- Проверим внешние параметры
   if(!CheckInputParameters())
      return(INIT_PARAMETERS_INCORRECT);


//--- Инициализаия прошла успешно
   return(INIT_SUCCEEDED);
  }

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

Видно нужно эту проверку как то по другому обыграть

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

 
Konstantin Seredkin:

Всеравно не понимаю.

Это же не просто какие то статичные переменные, это внешние переменные в которые я задаю 3 тейк профита


Робот торгует 3-мя лотами

через 100п я хочу закрыть 1 лот  = это первый уровень профита

через 200 еще один лот = второй уровень профита

через 300 еще один лот = третий уровень профита


Но при первом уровне робот ставит стоп лос в безубыток

А при втором уровне робот этот стоп переносит на 1-й уровень профита.

Небыло бы безубытка, пофиг как там оптимизатор бы подобрал эти уровни, пусть хоть 1- й будет 300  второй 50п  третий 150

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

300    50    150

50    300   150

и т.д.

а нормально все шло

50  100  200

150  160   170

и т.д.

Делая проверку на корректность введенных параметров

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

Видно нужно эту проверку как то по другому обыграть

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

в input задавайте не сами уровни, а дистанции между ними.

input uint firstLevel=20 ; // пунктов от цены до первого ТП

input uint secondDistance=30; // пунктов от первого ТП до второго

input uint thirdDistance=50; // пунктов от второго ТП до конечного

тогда оптимизатор физически не сможет поменять уровни местами

 

Добрый день, есть значит ребята которые по удалёнке ставят на вм машину на яндекс облаке советника на мт4, который автоматом торгует. Можно ли каким-то образом его от туда "Взять", что типа как скопировать игру на свой жёсткий и чтоб всё работало. Спс

P.s сори за моё косноязычие, не разбираюсь в терминологии и сути этих вещей.

 

Добрый день!

Решил написать советника. В связи с этим появилась необходимость в изменении сигналов, по которым эксперт будет открывать ордера. Например, индикатор DeMarker - нужно, чтобы советник открывал ордера только тогда, когда данный индикатор пересекает значение 0.3 снизу вверх (buy) и значение 0.7 сверху вниз (sell). Я правильно понимаю, что править нужно файл SignalDeMarker.mqh (участки кода с комментариями  "Voting" that price will grow. и "Voting" that price will fall.)?

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