【MQL4】55分に鳴ったらアラームを鳴らしたい!

呪術廻戦の五条悟とヒロアカのホークスの声優が同じことを知って感動しているセレブパンダだお。

指定した時間にアラームを鳴らしたい話です。

こんな人が対象です。

  • 30分や15時など指定した時間に好きなアラームを鳴らしたい人。

サンプル

まずコンパイルした際に、ex4にアラームが組み込まれる指定をします。
組み込まなくても実行することは可能ですが、ex4だけ配布したい場合に不便などで、今回はex4に含めちゃいます。

#resource "chime.wav"

#resourceコマンドを使います。これは、指定したパスのリソースをex4に含めるように、コンパイラに指示するコマンドです。

この場合、mq4と同じフォルダにchime.wavを用意してください。

アラームを鳴らすには、PlaySoundを使います。

PlaySound("::chime.wav");

決まった時間にアラームを出すので、タイマーイベントを使います。

int OnInit()
{

   EventSetMillisecondTimer(500);

   return(0);

}

OnInitイベントで、EventSetMillisecondTimerを使い、タイマーを有効にします。

今回は55分にアラームを鳴らすことをしたいので、OnTimerイベントで55分だったらという判定をします。

int OnTimer()
{

    int min = TimeMinute(iTime(NULL, 1, 0));
    if ( min == 55 ){
        PlaySound("::chime.wav");
    }
}

ただ、このままだと、55分の時にchime.wavが常になり続けてしまいます。

55分になったら1回だけchime.wavがなるように変更してみます。

int OnTimer()
{

    int min = TimeMinute(iTime(NULL, 1, 0));
    if ( min == 55 ){
        static datetime s_dt = 0;
        // 55分になった時、1回だけ処理する
        if ( s_dt != iTime(NULL, 1, 0) ){
            s_dt = iTime(NULL, 1, 0);
            PlaySound("::chime.wav");
        }
    }
}

これで、55分になったら1回だけ、chime.wavがなります。

もう1つ、高度なことをすると、chime.wavの再生時間が30秒など長い場合に途中で止めたくなります。

13秒なりつづけたら、再生を止めることを追加します。

int OnTimer()
{

    int min = TimeMinute(iTime(NULL, 1, 0));
    if ( min == 55 ){
        static datetime s_dt = 0;
        // 55分になった時、1回だけ処理する
        if ( s_dt != iTime(NULL, 1, 0) ){
            s_dt = iTime(NULL, 1, 0);
            PlaySound("::chime.wav");
        }
        if(TimeSeconds(TimeCurrent()) > 13){
            PlaySound(NULL);
        }
    }
}

55分からchime.wavはなり始めます。

TimeSeconds(TimeCurrent())で現在の秒を取得し、13秒より大きい場合はPlaySoundのNULLを渡すことで、再生を止めることができます。

では、まただお。

Twitterでフォローしよう

おすすめの記事