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

 
newnek:

Здравствуйте! Подскажите, пожалуйста, мне необходимо чтобы в сигнале стандартной библиотеки параметр Parameter=Ka,int,21

Выбирался в процессе оптимизации из перечисления типа

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

p.s. приходится в итоговом советнике менять каждый раз int на intType

Укажите точный файл модуля сигналов и строку кода...
 
Karputov Vladimir:
Укажите точный файл модуля сигналов и строку кода...

например вот часть верхняя кода SignalRVI.mqh.      В данном случае он пропадает из выбора сигналов когда меняю тип int на intType

Если не то с областью видимости, то выносил в отдельный файлс перечислением #include <Libraries\myfunc.mqh>
//+------------------------------------------------------------------+
//|                                                    SignalRVI.mqh |
//|                   Copyright 2009-2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#include <Expert\ExpertSignal.mqh>
// wizard description start
//+------------------------------------------------------------------+
//| Description of the class                                         |
//| Title=----------------Signals of oscillator 'Relative Vigor Index'               |
//| Type=SignalAdvanced                                              |
//| Name=Relative Vigor Index                                        |
//| ShortName=RVI                                                    |
//| Class=CSignalRVI                                                 |
//| Page=signal_rvi                                                  |
//| Parameter=PeriodRVI,intType,15,Period of calculation                 |
//+------------------------------------------------------------------+
// wizard description end
//+------------------------------------------------------------------+
//| Class CSignalRVI.                                                |
//| Purpose: Class of generator of trade signals based on            |
//|          the 'Relative Vigor Index' oscillator.                  |
//| Is derived from the CExpertSignal class.                         |
//+------------------------------------------------------------------+
enum intType
  {
   p0 = 15, 
   p1 = 21, 
   p2 = 29 
}
;
class CSignalRVI : public CExpertSignal
  {
protected:
   CiRVI             m_rvi;            // object-oscillator
   //--- adjusted parameters
   intType               m_periodRVI;      // the "period of calculation" parameter of the oscillator
   //--- "weights" of market models (0-100)
   int               m_pattern_0;      // model 0 "the oscillator has required direction"
   int               m_pattern_1;      // model 1 "crossing of main and signal line"

public:
                     CSignalRVI(void);
                    ~CSignalRVI(void);
   //--- methods of setting adjustable parameters
   void              PeriodRVI(intType value)            { m_periodRVI=value;                 }
   //--- methods of adjusting "weights" of market models
   void              Pattern_0(int value)            { m_pattern_0=value;                 }
   void              Pattern_1(int value)            { m_pattern_1=value;                 }
   //--- method of verification of settings
   virtual bool      ValidationSettings(void);
   //--- method of creating the indicator and timeseries
   virtual bool      InitIndicators(CIndicators *indicators);
   //--- methods of checking if the market models are formed
   virtual int       LongCondition(void);
   virtual int       ShortCondition(void);

protected:
   //--- method of initialization of the oscillator
   bool              InitRVI(CIndicators *indicators);
   //--- methods of getting data
   double            Main(int ind)                   { return(m_rvi.Main(ind));           }
   double            DiffMain(int ind)               { return(Main(ind)-Main(ind+1));     }
   double            Signal(int ind)                 { return(m_rvi.Signal(ind));         }
   double            DiffSignal(int ind)             { return(Signal(ind)-Signal(ind+1)); }
   double            DiffMainSignal(int ind)         { return(Main(ind)-Signal(ind));     }
  };
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CSignalRVI::CSignalRVI(void) : m_periodRVI(15),
                               m_pattern_0(60),
                               m_pattern_1(100)
  {
  }
 
newnek:

Здравствуйте! Подскажите, пожалуйста, мне необходимо чтобы в сигнале стандартной библиотеки параметр Parameter=Ka,int,21

Выбирался в процессе оптимизации из перечисления типа

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

p.s. приходится в итоговом советнике менять каждый раз int на intType

Ничего не нужно менять - просто сгенерируйте советник на основании модуля сигнала индикатора "Relative Vigor Index", затем в тестере стратегий, во вкладке "Настройка" выберите одну из оптимизаций, перейдите во вкладку "Параметры" и задайте интервал и значения для параметра "Relative Vigor Index(10) Period of calculation" значения:

RVI

Но так как Вы желаете использовать только только три значения из интервала 15-29, то нужно прописать условие проверки в OnInit():

//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(Signal_RVI_PeriodRVI!=15 && Signal_RVI_PeriodRVI!=21 && Signal_RVI_PeriodRVI!=29)
      return(INIT_PARAMETERS_INCORRECT);
//--- Initializing expert

После запуска оптимизации видно, что тестер отработал только для параметров 15, 21 и 29:

Оптимизация выборочная 

 
Karputov Vladimir:

Ничего не нужно менять - просто сгенерируйте советник на основании модуля сигнала индикатора "Relative Vigor Index", затем в тестере стратегий, во вкладке "Настройка" выберите одну из оптимизаций, перейдите во вкладку "Параметры" и задайте интервал и значения для параметра "Relative Vigor Index(10) Period of calculation" значения:


Но так как Вы желаете использовать только только три значения из интервала 15-29, то нужно прописать условие проверки в OnInit():

После запуска оптимизации видно, что тестер отработал только для параметров 15, 21 и 29:

 

Спасибо, понял я вашу идею, очень интересная, но впустую будет куча шагов (хотя наверно и время тратиться не будет). У меня получилось в сформированном советнике вручную менять на тип перечисления. А хотелось бы еще сильней автоматизировать.
 
newnek:
Спасибо, понял я вашу идею, очень интересная, но впустую будет куча шагов (хотя наверно и время тратиться не будет). У меня получилось в сформированном советнике вручную менять на тип перечисления. А хотелось бы еще сильней автоматизировать.
Пустые шаги будут - но они не занимают время,  так как из OnInit() будет выход, по несоответствию условия, и сразу запускаться следующий шаг оптимизации.
 

День добрый... Сам программист С++. Вот решил попробовать недавно себя в данной сфере... Хочу написать советника или эксперта неважно, стратегию придумал, платформа МТ4... ну так вот, Столкнулся с такой вот проблемой использую в своем советнике MACD.... напишу покороче...

Например создаю новый шаблон советника в OnTick добавляю x=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); и допустим больше ничего нет... компилю, тестирую, все ОК, в конце тестирования отображается график macd с заданными параметрами, все ОК.

Второй вариант -  создаю новый шаблон советника в OnTick добавляю сторонний индикатор RSICur=iCustom(NULL,0,"My_Induk",14,1,0,21,1,65,35,"DodgerBlue","Magenta",50,50,"Red","Green",0,0); компилю, тестирую, все ОК, НО!!! после окончания теста или после отмены теста в окне тысячи этих индикаторов, я так понимаю, что на каждом тике создается новый индюк... почему непойму, ведь тот же стандартный макд рождается один раз и все...

Ктонибудь может разьяснить проблему... с другим нестандартным индикатором та же проблема...

 П.С. это мой первый пост... прошу не ругать за то, что не нашел как фото под споллер прятать. 

скрин
 

Незнаю с чемм связано Но нашел выход...

 RSICur=iCustom(NULL,0,"My_Induk",14,1,0,21,1,65,35,"DodgerBlue","Magenta",50,50,"Red","Green",0,0); - Рисует график каждый тик т.е. тысячи графиков

  RSICur=iCustom(NULL,0,"My_Induk",0,0);  - Все Ок, один график, каждый тик обновляются только данные в переменной RSICur... В чем логика не пойму, в принципе мне этого хватает, Но хотелось бы понять почему нормально работает только  с дефолтными настройками...

 
Игорь Марин:

День добрый... Сам программист С++. Вот решил попробовать недавно себя в данной сфере... Хочу написать советника или эксперта неважно, стратегию придумал, платформа МТ4... ну так вот, Столкнулся с такой вот проблемой использую в своем советнике MACD.... напишу покороче...

Например создаю новый шаблон советника в OnTick добавляю x=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); и допустим больше ничего нет... компилю, тестирую, все ОК, в конце тестирования отображается график macd с заданными параметрами, все ОК.

Второй вариант -  создаю новый шаблон советника в OnTick добавляю сторонний индикатор RSICur=iCustom(NULL,0,"My_Induk",14,1,0,21,1,65,35,"DodgerBlue","Magenta",50,50,"Red","Green",0,0); компилю, тестирую, все ОК, НО!!! после окончания теста или после отмены теста в окне тысячи этих индикаторов, я так понимаю, что на каждом тике создается новый индюк... почему непойму, ведь тот же стандартный макд рождается один раз и все...

Ктонибудь может разьяснить проблему... с другим нестандартным индикатором та же проблема...

 П.С. это мой первый пост... прошу не ругать за то, что не нашел как фото под споллер прятать. 

С фото все ОК, тут не прячут. 

А этот My_Induk вы писали или где-то нашли? Я так понимаю, индикатор кривой. Если есть исходники, выложите - посмотрим, в чем проблема.

 
Игорь Марин:

Незнаю с чемм связано Но нашел выход...

 RSICur=iCustom(NULL,0,"My_Induk",14,1,0,21,1,65,35,"DodgerBlue","Magenta",50,50,"Red","Green",0,0); - Рисует график каждый тик т.е. тысячи графиков

  RSICur=iCustom(NULL,0,"My_Induk",0,0);  - Все Ок, один график, каждый тик обновляются только данные в переменной RSICur... В чем логика не пойму, в принципе мне этого хватает, Но хотелось бы понять почему нормально работает только  с дефолтными настройками...

Такое бывает когда ВЫ параметры индикатора не правильно передали. внимательно посмотрите и сравните параметры индикатора и то что ВЫ написали в эксперте. 
 
Alexey Volchanskiy:

С фото все ОК, тут не прячут. 

А этот My_Induk вы писали или где-то нашли? Я так понимаю, индикатор кривой. Если есть исходники, выложите - посмотрим, в чем проблема.

Vladislav Andruschenko:
Такое бывает когда ВЫ параметры индикатора не правильно передали. внимательно посмотрите и сравните параметры индикатора и то что ВЫ написали в эксперте. 

Спасибо Вам Разобрался... Протыкался весь день понять не мог... Сам программист, но бывает... Ошибка была синтаксическая, я из советника вызывая индикатор параметры цвета почему-то в кавычках передавал...

iCustom(NULL,0,"My_Induk",14,1,0,21,1,65,35,"DodgerBlue","Magenta",50,50,"Red","Green",0,0); 

вот из за этого данный косяк и происходил... ) Спасибо Вам!!! Наверняка ещё будут вопросы!!!