プロが教えるわが家の防犯対策術!

MT4のチャート上に表示するインディケーターを自作しています。(プログラムを勉強しながらですが)

ある程度満足いくものになったのですが、値がゼロ以上になった場合に、自分の携帯にメールを

飛ばそうと思い、書き加えたのですが、ゼロ以上の状態である限り、ずっとメール発信してしまい

あっと言う間に300通くらいメールが入って困りました。

前のティックの時は負で今のティックで正の値になった場合のみメールを送るようにするのには、

どのような条件をプログラムに書きくわえれば良いのでしょうか。ゼロ近辺で行ったり来たりして

いる状態では何度もメールが入るのは仕方ないと思います。

どなたか教えていただけないでしょうか。よろしくお願いいたします。

A 回答 (2件)

実際には色んな書き方があると思いますが、例えば、下記のようにすれば実行できます。


(もちろん、変数の定義などは、はしょってます)

int start() {
if(value_x < 0) cross_zero = -1;
if(cross_zero == -1 && value_x > 0) {
(処理)
cross_zero = 1;
}
return(0);
}
    • good
    • 0
この回答へのお礼

ありがとうございます。

実際にプログラムに書き込んでみて、実験してみます。

お礼日時:2012/11/01 11:07

私がよくやる方法は、ひとつ変数、例えば、cross_zeroを定義して、ある値がゼロ以下の場合は、cross_zeroを-1に設定して、ゼロ以上になったら、cross_zeroを1とします。


で、cross_zeroが-1→1になったことをif文の判断条件として、メールを送信するのです。
こうすれば、cross_zeroがずっと1(つまり、ある値がずっとゼロ以上)になってもメールを送り続けることがありません。

実際は、ある値がゼロ近傍をウロウロすることが多いので、TimeCurrent()関数でcross_zeroが-1→1になった時点の時刻を記録しておき、そこから3分間はメールを送らない、といった工夫もしています。

ご参考までに。

この回答への補足

御回答いただきありがとうございます。

cross_zeroが-1→1になったことをif文の判断条件としての書き方が分からず、困っております。

この部分のみ、具体的なコードとして、例示してもらえないでしようか。

if(int cross_zero == 1)   → 一つ前が cross_zero == -1 であったという条件は ?

{
(処理内容)
}

重ね重ね申し訳ありません。

補足日時:2012/10/31 13:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!