インジケーターに関する雑多な質問 - ページ 4

 

switch 演算子を使うことができます。

      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...
}

もし時間が0より上か==等しく、かつ&&以下<か==22に等しい場合など。

前の例では >0 は 0 と等しいので 0 自体を除外するのに対し、これは等しいときに時間を含むので少し違います。

 

#月線 - 私にとってはクローズドです。

ストラテジーテスターで テストしたところ今の ところ完璧に 動作しています。

皆さんのコメントから多くのことを学び、私のこのインジケータをとても良いものにすることができました。

Marco氏 William 氏に感謝します。

 

以下のコードは私にとってはうまくいく のですが、時々無関係に 長い時間 (1250) かかることがあります。

EventSetMillisecondTimer( 1250 );

// which is good?

EventSetTimer( 1 );

さらに私はそのための'スイッチ'関数を 使用することができますか?

//--- 2回目の編集

私はstart()関数を使いたく ありません。実際には、私は以下のように設定する必要があります。

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

しかし、私は助けを必要とする、お願いします。

//--- 3回目の編集

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. Start using the newEvent Handling Functions - Functions - Language Basics - MQL4 Reference. start as been depreciated Since February 3,2014(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

しかし、私は助けを必要とします、お願いします。

それは私が望むように、動作しません。

もし誰かが私の心配を理解したら、私にアドバイスや助けを与えてください

ありがとうございました。


いいえ、それはあなたが1つのタイマーと1つのタイマーを使用するように動作しません。

しかし、単純なカウンターを使用することで、時間間隔を分割または分割することができます。

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. Start using the newEvent Handling Functions - Functions - Language Basics - MQL4 Reference. start as been depreciated Since February 3,2014(Build 600)
コメントありがとうございます。

イベントハンドリング関数'2回ほど 読んで みた のですが、(もしかしたら、そのページのすべてを明確に理解していなかったかもしれません - また、私は'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を 選択しても 1分以内に更新 され続けています。

また、PERIOD_M 1と 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を 選択しても 1分以内に更新 され続けています。

また、PERIOD_M 1と 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();
}

よろしくお願いします

何をしようとしているのか、説明してください。
理由: