EAやインジケーターにアラート機能をつけたいという方は多いと思います。
つい最近、お客様から、
「アラート機能をつけてほしいが、ポップアップ画面が出ないようにしてほしい。」
という要望がありました。
MT4ではポピュラーなAlert()関数を使用すると、たしかに、上の画像のような画面が毎回現れて、うっとうしいでしょうね。
そんなときに重宝するのが、PlaySound()関数です。
この関数は、Cドライブ→MT4フォルダ→Soundsフォルダ内にある音声ファイル(wavファイル)を呼び出すことで、ポップアップ画面を表示せずに特定の音声だけを発生させるものです。
使い方はいたって簡単で、
スタート関数内の任意の場所で、上のように、Soundsフォルダ内にある音声ファイル名を()内で指定するだけです。
Soundsフォルダ内には、デフォルトでいくつか音声ファイルが保存されていますが、自分の好きな歌謡曲やロックミュージックなどをwavファイルに変換して保存すれば、売買シグナルとともにその音楽を流すことも可能でしょう(やったことはありませんが)。
たとえば、こんな音楽を流すといいかも…。汗
冗談はさておき、MT4に標準装備されている「alert.wav」ファイルをPlaysound()関数で呼び出す場合、ポップアップ画面は表示されないので、アラート音が1回しか鳴らないように設定すると、万一聞き漏らした場合が不安ですよね。
そこで、Playsound()関数において、アラート音を指定の回数だけ連続で鳴らすことはできないでしょうか。
理屈からは、上のように記述すれば、Playsound()関数が3回だけ実行されてその後のティック変動では実行されないので、うまくいくはずなのですが…。
実際に試してみると、アラート音は耳で聞くかぎり1回しか鳴りません。
詳しい原因はよく分かりませんが、単に音が重なって聞こえるのか、あるいは、処理速度が速すぎるなど何らかの理由で、結果的に関数が1回しか実行されないのかも知れません。
そこで、Sleep()関数を利用して、各実行処理の間に一定秒数だけプログラムを停止すればうまくいくかも…。
上のプログラムのように、各実行処理の間に1000ミリ秒=1秒だけプログラムを停止させてみました。
すると、
プルルン プルルン プルルン
と、みごとに3回鳴って止まりました。
しかし、このプログラムは、EAではうまく稼働しますが、インジケーターでは、先ほどと同様に1回しか鳴りませんでした。
その理由は、Sleep()関数はインジケーターからは呼び出せないからです。つまり、インジケーターはその性質上EAと異なり、プログラムの「一時停止」になじまないということらしいです。
はぁ~? 誰がそんなこと勝手に決めたん?
じゃあ、どうすりゃいいの?
そうですね。「一時停止」がだめなら「時間かせぎ」しかないでしょ。
Playsound()関数の各実行処理の間の秒数をGetTickCount()関数で計測して、1秒以内ならwhile文で引き続き秒数計測をして時間を稼ぐプログラムです。
これなら、インジケーターでも、1秒間隔で3回アラートが鳴って無事終了しました。
うーん、やっぱりメタレトレーダーは奥が深いなあ~。
というか、単に、使い勝手が悪いだけでしょ。呆
コメントをお書きください