• ベストアンサー

FX:指定した時間の高値・安値を返すプログラムを教えてください。(MT4)

指定した時間の高値・安値を返すプログラムを教えてください。 具体的に言うと、、21時から23時の間の高値・安値です。 少し調べたところ、iHighest,iLowestやiBarSHiftの関数で値を出せると思ったのですが、 この関数では、指定の期間が、”現在から何本前の足から何本分の期間”といったように時刻で指定できないみたいで困っております。 ※MT4を使用しております。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

ちょっと自信ありませんが、とりあえず作ってみました。 今、手元に、MT4がないので、コンパイルその他の実験をしておりません。エラー等ありましたら、どうかご容赦を。 double H=0; // 最高値を変数として宣言 double L=0; // 最安値を変数として宣言 int T = TimeHour(CurTime()); // 現在の時刻を変数として宣言 if(T!=23) // もしも現在が23時台でなければ、 { H= High[iHighest(NULL,PERIOD_H1,MODE_HIGH,2,T+2)]; L= Low[iLowest(NULL,PERIOD_H1,MODE_LOW,2,T+2)]; } else // もしも現在が23時台であれば、 { H=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,2,1)]; L=Low[iLowest(NULL,PERIOD_H1,MODE_LOW,2,1)]; } ちなみに、TimeHour()関数については、以下のサイトで詳しく解説されておりました。 http://jidoubaibai.com/index.html また、私は、ごく最近MT4の勉強をはじめたばかりで、質問者の方と同様、いろいろ苦労しております。

gsr_gsr
質問者

お礼

ご回答ありがとうございます! しかも何度も回答してくださってまことにありがとうございます。

その他の回答 (3)

回答No.3

たびたびごめんなさい。 このやり方だと、23時台以外のときに、変数HとLが初期値(0)に戻ってしまうので、調子が悪いですね。 うーん、 もう少し研究してみます。

回答No.2

あ、いけません。 追伸です。 iHighest()の中のtimeframe(2つ目のパラメーター)は、0ではなくて、PERIOD_H1にしておいてください。

回答No.1

こんな感じでどうでしょうか。 double H=0; // 最高値の変数を宣言 double L=0; // 最安値の変数を宣言 if(TimeHour(CurTime())!=23) // もしも現在が23時台でなければ、 { H=H; // Hは以前の数値のまま L=L; // Lは以前の数値のまま } else // もしも現在が23時台であれば、 { H=High[iHighest(NULL,0,MODE_HIGH,2,1)]; // Hには21時~23時の最高値が代入され L=Low[iLowest(NULL,0,MODE_LOW,2,1)]; //Lには 21時~23時の最安値が代入される。 } 上の記述ですと、毎日23:00(サーバーの時間帯)になるたびに、直前の2時間の最高値と最安値が、それぞれHとLに代入され、同時に日々23時にそれらが更新されていくと思います。 もっと、スマートなやり方があるかもしれませんが、今の私の技術では、これが限界(汗)。

gsr_gsr
質問者

お礼

ご回答ありがとうございます。 そうゆうやり方があったんですね。 参考にします!!