指标杂项问题 - 页 4

 

你可以使用开关运算符。

      switch(TimeHour())
        {
         case 0:
          // Do Something...
            break;

         case 1:
          // Do Something...  
            break;

         case 2:

            break;

         case 3:

            break;

         case 4:

            break;

         case 5:

            break;

         case 6:

            break;
         // etc...
        }

或者使用简单的双if语句。

if(TimeHour()>0 && TimeHour()< 22)
{
  // Do Something...
}

如果时间小时高于>0,但也&&低于<22等等。

或者你可以使用。

if(TimeHour()>=0 && TimeHour()<= 22)
{
  // Do Something...
}

If time hour is above > or == equal to 0 but also && below < or == equal to 22 etc.

它稍有不同,因为它包括小时,当它相等时,之前的例子>0排除了0本身,因为它是相等的,所以不在上面。

 

#月线 - 对我来说是关闭的。

我用'策略测试器' 进行了测试 到目前为止,实时 效果很好

我从你们的评论中学到了很多东西,使我的这个指标如此出色,非常感谢@Marco vd Heijden

特别感谢马可先生 和威廉先生

 

下面的代码对我来说很好用,但有时无关紧要,它需要很长的时间 (1250)

EventSetMillisecondTimer( 1250 );

// which is good?

EventSetTimer( 1 );

另外我可以用'Switch'函数 来做吗?

//----第二次编辑

我不希望使用 start()函数。事实上,我需要像下面这样设置。

EventSetMillisecondTimer( 10   ); // 1st will read in 10
EventSetMillisecondTimer( 250  ); // 2nd will read in 250
EventSetMillisecondTimer( 1250 ); // 3rd will read in 1250

但我需要帮助,请。

//---- 第三次编辑

switch ( EventSetMillisecondTimer( 10 ) )
{
    case    1   :   EventSetMillisecondTimer( 100  );
    case    2   :   EventSetMillisecondTimer( 250  );
    case    3   :   EventSetMillisecondTimer( 1250 );
    default     :   EventSetMillisecondTimer( 10   ); break;
}   //---switch Close

它不工作,像我想的那样

如果有人理解我的担忧,请给我建议或帮助。

谢谢。

 
Max Enrik: 我不想使用 start()函数
  1. 为什么不呢?在你得到一个新的刻度线之前,(市场上的)一切都没有改变。计时器的用途有限。
  2. 开始使用新的事件处理函数 - 函数 - 语言基础 - MQL4参考。 start自2014 年2月3日(Build 600)以来已经贬值了。
 
Max Enrik:

我不希望使用 start()函数。事实上,我需要像下面这样设置。

EventSetMillisecondTimer( 10   ); // 1st will read in 10
EventSetMillisecondTimer( 250  ); // 2nd will read in 250
EventSetMillisecondTimer( 1250 ); // 3rd will read in 1250

但我需要帮助,请。

它并不像我想的那样 工作。

如果有人理解我的担忧,请给我建议或帮助。

谢谢。


不,它不能像这样工作,你只用一个定时器和一个定时器。

但你可以通过使用一个简单的计数器来分割或拼接时间间隔。

int clock;
OnTimer()
{
  clock++;
  
  switch(clock)
   {
    case 500:
    //Do something...
    break;

    case 1000:
    //Do something...
    clock=0; // reset counter if need be.
    break;

    // Etc...
   }
}
 
whroeder1:
  1. 为什么不呢?在你得到一个新的刻度线之前,(市场上的)一切都没有改变。计时器的用途有限。
  2. 开始使用新的事件处理函数--函数--语言基础--MQL4参考。 自2014 年2月3日(Build 600)起,开始已被贬值。
谢谢你的评论。

两次 提到'事件处理函数' 我读了 几遍 (也许我没有清楚地理解那一页的所有内容--我也使用'OnTimer'函数),但我担心那一页,那会把我拉到另一个方向--但我的这个指标快完成了。

但我看到仅仅是'EventSetMillisecondTimer( 1250 );' 有时会花费'无关紧要' 的长时间。


最好是这样。
 
Marco vd Heijden:

但你可以通过使用一个简单的计数器来分割或拼接时间间隔。

我试着像下面的代码一样。

这段代码对吗?

void OnTimer()
{
    //---
    _clock++;
    //---
    switch ( _clock )
    {
        case    500 :
            if ( // will be same thing in here? ) )
            {
                ...
                _CreateLines_M5();
            }   //---if Close
        break;
        
        case    1000:
            if ( // will be same thing in here? ) )
            {
                ...
                _CreateLines_M5();
            }   //---if Close

        _clock = 0;
        break;
    }   //---switch Close
}

但它对我不起作用。

谢谢。

 
Max Enrik: 我试着像下面的代码。
void OnTimer()
{
    //---
    _clock++;
    //---
    switch ( _clock )
    {
        case    500 :
            if ( // will be same thing in here? ) )
            {
                ...
                _CreateLines_M5();
            }   //---if Close
        break;
        
        case    1000:
            if ( // will be same thing in here? ) )
            {
                ...
                _CreateLines_M5();
            }   //---if Close

        _clock = 0;
        break;
    }   //---switch Close
}

但它对我不起作用。

  1. 你没有在测试器中进行尝试吧?在回测中OnTimer()没有执行(M. Ali) - MQL4论坛 MT4回测器的图表事件(Migel) - MQL4论坛
  2. 你的代码简化了
    void OnTimer()
    {
        if(++_clock % 500 == 0)_CreateLines_M5();
    }

 
whroeder1:
  1. 你的代码简化了
    void OnTimer()
    {
        if(++_clock % 500 == 0)_CreateLines_M5();
    }

非常感谢!

我试了一下,它不断地刷新,而在一分钟内,即使 我选择PERIOD_M5

我还想知道我是否需要使用PERIOD_M1 PERIOD_M5我可以像下面这样使用吗?

if(++_clock % 500 == 0)_CreateLines_M1();
if(++_clock % 500 == 0)_CreateLines_M5();

另外, 请问下面的方法是否正确?

if ( ++_clock % 500 == 0 || _dt_Prd_M5 != iTime( Symbol(), _prd_M5, 0 ) )
{
    _dt_Prd_M5 = iTime( Symbol(), _prd_M5, 0 );
    _CreateLines_M5();
}

祝您一切顺利

 
Max Enrik:

非常感谢!

我试了一下,它不断地刷新,而在一分钟内,即使 我选择PERIOD_M5

我还想知道我是否需要使用PERIOD_M1 PERIOD_M5我可以像下面这样使用吗?

if(++_clock % 500 == 0)_CreateLines_M1();
if(++_clock % 500 == 0)_CreateLines_M5();

另外, 请问下面的方法是否正确?

if ( ++_clock % 500 == 0 || _dt_Prd_M5 != iTime( Symbol(), _prd_M5, 0 ) )
{
    _dt_Prd_M5 = iTime( Symbol(), _prd_M5, 0 );
    _CreateLines_M5();
}

祝您一切顺利

请描述你想做什么。