初学者的问题 MQL5 MT5 MetaTrader 5 - 页 614

 
newnek:

你好, 你告诉我在标准库的信号中是否需要参数Parameter=Ka,int,21

在优化过程中从类型的枚举中选择了

但是 信号在生成EA时从选择中消失,但它却在正常编译,这很难做出结论--什么是错的......,用代码帮助,不是已经有一个实现吗?

p.s. 在最后的EA中,我每次都要把 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

在优化过程中 从类型的枚举选择了

但是,当信号在生成EA时从选择中消失,但它却在正常编译,这很难做出结论--什么是错的......,用代码帮助,不是已经有一个实现吗?

p.s. 在最后的EA中,我每次都要把int改为intType。

你不必改变任何东西--只要根据 "相对活力指数 "指标生成你的专家顾问,然后在策略测试器中,在 "设置 "选项卡中选择一个优化,进入 "参数 "选项卡,设置 "相对活力指数(10)计算周期 "参数的间隔和值。

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:

你不必改变任何东西--只要根据 "相对活力指数 "指标生成你的专家顾问,然后在策略测试器中选择一个优化,进入 "参数 "选项卡,设置 "相对活力指数(10)计算周期 "参数的时间间隔和数值。


但由于你只想使用15-29区间的三个值,你需要在OnInit()中写一个检查条件

运行优化 后,你可以看到测试器只对参数15、21和29起作用。

谢谢,我明白你的想法,非常有趣,但会有很多浪费的步骤(虽然可能也没有浪费时间)。我已经设法在生成的EA中手动改变为枚举类型。而且我希望能更多地将其自动化。
 
newnek:
谢谢,我明白你的想法,非常有趣,但会有很多浪费的步骤(虽然可能也不会浪费时间)。我已经设法在生成的EA中手动改变为枚举类型。而且我希望能更多地将其自动化。
会有一些空的步骤,但它们不需要时间,因为OnInit()会因为不符合条件而被退出,下一步的优化会立即开始。
 

下午好...我自己是一个C++程序员。我最近决定在这个领域尝试自己...我想写一个专家顾问或专家顾问,我的策略还可以,我的平台是MT4...因此,我面临这个问题,我在我的专家顾问MACD中使用....。我很快就会写...

例如,我创建了一个新的模板EA,添加x=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);假设没有其他东西...我编译,测试,一切正常,在测试结束后,显示一个带有指定参数的macd图表,一切正常。

第二种方案--我在OnTick创建一个新的模板EA,添加一个第三方指标RSICur = iCustom(NULL,0, "My_Induk",14,1,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0);编译,测试,一切正常,但是!!!!!!!!(我想说的是,如果我不在这里的话,那么我就不会在这里了。当我完成测试或取消这些指标的数千个窗口中的测试时,我明白在每一个刻度上都会创建一个新的指标......我不明白为什么,因为标准的MAKD出生一次就可以了......

谁能解释一下这个问题...我正试图用另一个非标准的指标来解决同样的问题...

P.S. 这是我的第一个帖子...请不要责怪我没有找到将照片隐藏在扰流器下的方法。

屏幕截图
 

我不知道这是什么原因,但我找到了一个解决方案...

RSICur=iCustom(NULL,0, "My_Induk",14,1,0,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0);- 绘制每个刻度图表

RSICur=iCustom(NULL,0, "My_Induk",0,0); - 好的,一个图表,只有RSICur变量中的数据是按tick更新 的。我不明白是什么逻辑,原则上对我来说已经足够了,但我想了解为什么只有在默认设置下才能正常工作......

 
Игорь Марин:

下午好...我自己是一个C++程序员。我最近决定在这个领域尝试自己...我想写一个专家顾问或专家顾问,我的策略还可以,我的平台是MT4...因此,我面临这个问题,我在我的专家顾问MACD中使用....。我很快就会写...

例如,我创建了一个新的模板EA,添加x=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);假设没有其他东西...我编译,测试,一切正常,在测试结束后,显示一个带有指定参数的macd图表,一切正常。

第二种方案--我在OnTick创建一个新的模板EA,添加一个第三方指标RSICur = iCustom(NULL,0, "My_Induk",14,1,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0);编译,测试,一切正常,但是!!!!!!!!(我想说的是,如果我不在这里的话,那么我就不会在这里了。当我完成测试或取消这些指标的数千个窗口中的测试时,我明白在每一个刻度上都会创建一个新的指标......我不明白为什么,因为标准的MAKD出生一次,就这样......

谁能解释一下这个问题...我正试图用另一个非标准的指标来解决同样的问题...

P.S. 这是我的第一个帖子...请不要因为我没有找到在扰流板下隐藏照片的方法而责骂我。

照片还可以,没有隐藏。

这是你写的,My_Induk,还是你在哪里找到的?我知道指标是歪的。如果你有源代码,把它贴出来--让我们看看问题出在哪里。

 
Игорь Марин:

我不知道这是什么原因,但我找到了一个解决方案...

RSICur=iCustom(NULL,0, "My_Induk",14,1,0,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0);- 绘制每个刻度的图表

RSICur=iCustom(NULL,0, "My_Induk",0,0); - 好的,一个图表,只有RSICur变量中的数据是按tick更新 的。我不明白是什么逻辑,原则上对我来说已经足够了,但我想了解为什么只有在默认设置下才能正常工作......

这发生在你没有正确传递指标的参数时。
 
Alexey Volchanskiy:

照片还可以,这里没有隐藏。

这是你写的,My_Induk,还是你在哪里找到的?我认为指标是歪的。如果你有源代码,把它贴出来--让我们看看问题出在哪里。

弗拉迪斯拉夫-安德鲁申科
这发生在你没有正确传递指标的参数时。

谢谢你,我明白了...我探究了一整天,也没能弄明白......我自己是一个程序员,但它发生了...我犯了一个语法错误,在调用指标时,我必须用引号传递颜色参数...

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

这就是造成这个故障的原因......)谢谢你!!!。当然会有更多的问题!!!。