『ボヘミアン・ラプソディ』はなぜ人々を魅了したのか >>

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

具体的に言うと、、21時から23時の間の高値・安値です。

少し調べたところ、iHighest,iLowestやiBarSHiftの関数で値を出せると思ったのですが、
この関数では、指定の期間が、”現在から何本前の足から何本分の期間”といったように時刻で指定できないみたいで困っております。

※MT4を使用しております。

このQ&Aに関連する最新のQ&A

A 回答 (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の勉強をはじめたばかりで、質問者の方と同様、いろいろ苦労しております。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

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

お礼日時:2010/03/08 22:01

たびたびごめんなさい。



このやり方だと、23時台以外のときに、変数HとLが初期値(0)に戻ってしまうので、調子が悪いですね。

うーん、
もう少し研究してみます。
    • good
    • 0

あ、いけません。



追伸です。

iHighest()の中のtimeframe(2つ目のパラメーター)は、0ではなくて、PERIOD_H1にしておいてください。
    • good
    • 0

こんな感じでどうでしょうか。



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時にそれらが更新されていくと思います。

もっと、スマートなやり方があるかもしれませんが、今の私の技術では、これが限界(汗)。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

そうゆうやり方があったんですね。
参考にします!!

お礼日時:2010/02/01 23:16

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QMT4で時間を指定するにはどのようにすれば良いでしょうか。

MT4で時間を指定するにはどのようにすれば良いでしょうか。

例えば、取引を日本時間で午前9時から午後3時の間に指定して、午後3時の時点で建て玉があった場合は手仕舞いできるようにしたいのです。

MT4付属EAの、MACD Sampleで時間指定する場合は、どのようなプログラムをどの位置に書けば良いのでしょうか。

時間指定をいろいろ変えてバックテストを行ってみたいと思っています。

プログラムは、トレードスタジアムで少しやった程度ですので、MT4のプログラムは初心者のレベルです。よろしくお願いします。

Aベストアンサー

回答が大変遅くなってごめんなさい。

実は、私も悩んでいました。

MACDのサンプルプログラムを下の方までよく読んでみると、マジックナンバーが16384となっているので、これに統一しなければ決済されません。

よって、私が書いた最初の部分で、

# define MAGIC 0001

という部分を、

# define MAGIC 16384

としていただければ、うまくいくかと思います。

一時やってみてください。

Q【MQL4】ZigZagの天底の値の取得

最近MT4の入門書を買ってMQL4の勉強を始めた者です。よろしくお願いします。

EAでZigZagの天底を現在レートがブレイクアウトしたところでエントリーするシステムを作りたいのですが、ZigZagの頂点(底点)の値の取得の仕方がわかりません。

iCustomで標準搭載のZigZagを呼び出して条件式を書いてみましたが売買できませんでした。
(以下のような文です)

double zig = iCustom(NULL, 0,"ZigZag",12,5,3,0,0);

if(zig <Ask)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",0,0,Blue);
}

おそらく見当違いのことをしているのだとは思います。
私が知りたいことは以下の2点です。

1.一つ前のZigZagの頂点(底点)の値。
2.二つ前のZigZagの頂点(底点)の値。

どうかよろしくお願い致します。

Aベストアンサー

ZigZagの場合、頂点と頂点の間は空値が入っています。
ZigZagは頂点よりもその間を繋いでいる線の部分の方が圧倒的に多いです。ですからそのEAのiCustom関数はほとんどの場合、空値を返します。

さらにZigZagのmql文の中を見てみると34行目に
SetIndexEmptyValue(0,0.0);
http://www.metasys-seeker.net/MQL4_Reference_ver1/11-08_SetIndexEmptyValue.html
の一文が入っていることが分かりますよね。

これは空値を0.0に設定するという意味です。つまりそのiCustom関数ではほとんどの場合0が返されています。

SC11さんのEAではif文中で zig<Ask と書かれているので(以下略)。


低点の見つけ方ですが、私なら頂点を一つづつ探していき、一つ見つかったらその前後の頂点を探して、最初に見つけた頂点が次に見つけた2つの頂点の値より下回っていたら低点であるとします。
普通は見つかった順番に配列に入れておきます。こうするといくつ前の低点なのか分かりますしね。

ZigZagの場合、頂点と頂点の間は空値が入っています。
ZigZagは頂点よりもその間を繋いでいる線の部分の方が圧倒的に多いです。ですからそのEAのiCustom関数はほとんどの場合、空値を返します。

さらにZigZagのmql文の中を見てみると34行目に
SetIndexEmptyValue(0,0.0);
http://www.metasys-seeker.net/MQL4_Reference_ver1/11-08_SetIndexEmptyValue.html
の一文が入っていることが分かりますよね。

これは空値を0.0に設定するという意味です。つまりそのiCustom関数ではほとんどの場合0が返されています...続きを読む

QMT4のEX4ファイルをMQ4ファイルに変換する無料ソフトを教えて下さ

MT4のEX4ファイルをMQ4ファイルに変換する無料ソフトを教えて下さい。

先日まではhttp://www.ex4tomq4.net/を使っていたのですが、変換しようとページを訪れるとUnder Constructionで、暫くこの状態が続いています。

で、他のソフトを探してみてhttp://www.greattradingsystems.com/2009/08/free-mt4-decompiler-ex4-to-mq4/でDecompiler EX4-TO-MQ4 4.0.215.6やMetaTrader 4 Ex4 Decompilerを試してみたのですが、どちらも使えませんでした。(前者はダウンロード後インストールしようとするとエラーになりインストール出来ない。後者はダウンロード後EX4ファイルをダブルクリックするとMQ4ファイルに変換するものですが、ダブルクリックしても何の変化もなく、読み取れないEX4ファイルが開くだけです。)

という訳で、ディコンパイラーならこれがお勧め、という無料ソフトがあったら教えて下さい。

宜しくお願いします。

MT4のEX4ファイルをMQ4ファイルに変換する無料ソフトを教えて下さい。

先日まではhttp://www.ex4tomq4.net/を使っていたのですが、変換しようとページを訪れるとUnder Constructionで、暫くこの状態が続いています。

で、他のソフトを探してみてhttp://www.greattradingsystems.com/2009/08/free-mt4-decompiler-ex4-to-mq4/でDecompiler EX4-TO-MQ4 4.0.215.6やMetaTrader 4 Ex4 Decompilerを試してみたのですが、どちらも使えませんでした。(前者はダウンロード後インストールしようとするとエラーになりイン...続きを読む

Aベストアンサー

基本的にはコンパイルされたex4ファイルのみで配布されているものは
mq4を見せたくないという公開者の意志がそこにありますので
それをデコンパイルするという行為は倫理的にグレーゾーンになりますし
公開者自身がそれを禁ずる旨の声明を出している場合は権利の侵害行為となります。
お探しのデコンパイラですが、上記のような理由でアンダーグラウンド的なツールであり
こういった公の場では質問する性質のものではないかもしれません。
感覚的には「デジタル映像のコピーガードをキャンセルする」というような行為と同様ということですね。

QMT4を使い、トレンドラインで売買する方法

メタトレのEA作成について質問させてください。

自分で描画したトレンドラインに、現在値が達したら建玉又は決済するという方法を教えて下さい。

色んなサイト(海外も含め)を調べたのですが、わかりませんでした。
FX自体は5年やっておりますが、メタトレは最近口座開設したばかりの初心者です。
まだ、プログラム言語の勉強中なので、関数などは・・・です。

よろしくお願いします。

Aベストアンサー

それ、不可能かもしれません。
決済はEAで、ラインはあなたが手動で描くという意味ならば、恐らく無理です。

基本スタンスとして業者側が提供する数値(4本値)で制御するという考え方であり、
ユーザー側で入力できる値の個数は8個とかなり制限されています。
このユーザ側で設定できる値とは、例えば移動平均線の日数などです。
8個も変数があれば十分でしょうということです。

EAでトレンドラインを描く分には業者側提供の値で十分実装できます。
しかし、ユーザーが個別に描いた線の位置を入力値として制御したい場合、
とても8個では足りないでしょう。しかも、それは座標上から拾って来ないといけません。

MT5ではこの辺の設計が可能になっているかもしれませんが、
それは関知致しません。悪しからず。

Qエラーの意味は? Lvalue required

今プログラミングと格闘中です。タイトルにもあるように「Lvalue required」とはどういう意味か教えてください。

Aベストアンサー

補足を拝見しました。
まず、if文ですが
if(day%7=5)
では無く
if(day%7==5)
とイコールを2つ書きましょう。
それからprint文ですが
printf("%d月%d日は、土曜日です。");
%dに対する表示したい値が入っていません。

ほかにも、コンパイルエラーに掛かる場所は有りますが、簡単に直せるとこでしょうから、あえて記述致しません。

Q戻り値の意味がわかりません…

戻り値とはどういう値なのか簡単な例文で教えて頂けますか?

Aベストアンサー

バカくさいかもしれませんが簡単な例えをだしてみます。
2人の子供がいて、名前をそれぞれ太郎・花子にしましょう。この2人の子にある役割を決めます。
・花子は飴をもらうと、それをチョコにする役割。(できるかは別として)
・太郎は花子を呼んで飴をあげる役割。

さてこの例では太郎の飴が引数(ひきすう)になり
花子のチョコが戻り値になります。

このイメージを元に次の文を読んでみてください。

「プログラム中の関数やサブルーチンが処理を終了し
呼び出し元に処理の結果として返す値。」

これが戻り値の正しい定義です。
そのほかにはNo1さんのような役割指すときも、それを「戻り値」と呼んだりします。

QMT4のOrderSendでエラーになります…

以下のように、OrderSendで新規注文を行うプログラムを作成してみましたが、GetLastError()でエラー(4055)になってしまいます。
4055は、「カスタムインジケータエラー」とのことですが、どのように修正すればよいのか分かりません。
どうか、ご教示頂きたくよろしくお願い致します。
ちなみに、FXDD(デモ口座)のEURJPY(5分足)でテストしています。

bool EFlg=true;
int start()
{
if(EFlg)
{
EAticket = OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,Ask+25*Point,"My order #2",16384,0,Green);
if(EAticket < 0 )
Alert("Order Failed #",GetLastError());
else
Alert("OK!!");

EFlg = false;
}

return(0);
}

以下のように、OrderSendで新規注文を行うプログラムを作成してみましたが、GetLastError()でエラー(4055)になってしまいます。
4055は、「カスタムインジケータエラー」とのことですが、どのように修正すればよいのか分かりません。
どうか、ご教示頂きたくよろしくお願い致します。
ちなみに、FXDD(デモ口座)のEURJPY(5分足)でテストしています。

bool EFlg=true;
int start()
{
if(EFlg)
{
EAticket = OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,Ask+25*Point,"My order #2",16384,0,...続きを読む

Aベストアンサー

ANo.2 okw201114です

カスタムインジケータから使われたのでしょうか? お気づきになられて良かったです。

私も、ウェブ上にマニュアルの様なものを見つけ..
エラーコードには「トレード サーバーから返されるエラーコード」と「ランタイムエラー」があると知り..
関数ごとのエラーコード表で OrderSend は 4055 ~ 4111と「トレード サーバーから返されるエラーコード」があると知り..
エラーコードが 4055 のみの比較的仕様の小さいSleep()関数をみると..
「Sleep() 関数は、カスタム インディケータから呼び出すことはできません~」とありましたので^^;;
やっぱり英語は苦手です;;

http://www.metasys-seeker.net/MQL4_Reference_ver1/02-19_ErrorCodes.html <-- エラーコード【Error codes】
http://www.metasys-seeker.net/MQL4_Reference_ver1/04-03_RuntimeErrors.html <-- ランタイムエラー【Runtime errors】
http://www.metasys-seeker.net/MQL4_Reference_ver1/09-10_Sleep.html <-- 実行待機【Sleep】


PC関係だと長年のナントカがありますからw
そんな私でもネットなど下調べしてたり、参考もなしで実装はしません。
ぜひそうしてください。

業者によっては デモは 1 ロット指定とか、Modify でしか T/P, S/L 設定できない所もあるらしいのですが..



自作インジケータを持っているなんてすごいです。私は自作EAのトレードに呆然としてますまだまだですw


あとわからないとのことで参考になるかですが

ネット検索すると MT4 紹介や、EA/カスタムインジケータの作り方を紹介されているブロブなどがヒットします。

国内の http://jp.forex.com/jp/learn/mt4_expertadvisor.shtml やあたりのリンクを読み倒す。というか国内業者はその辺強いかと。

カスタムインジケータ作成経験がおありならば、その場所の親フォルダの "experts" に MA や MACD を使ったサンプルEAがあるので、
テンプレートに使ったり、Tester したりデモで確認したりする。

MT4エディターで公開されているカスタムインジケータや EA を見つけられる。

カスタムインジケータを EA から使用する場合は iCustom 関数を使います。Tester で遅いらしい.. 


などなど、ただ鵜呑みようなことは危険だと思います。ハイリスクですよね

楽しかったですw

ANo.2 okw201114です

カスタムインジケータから使われたのでしょうか? お気づきになられて良かったです。

私も、ウェブ上にマニュアルの様なものを見つけ..
エラーコードには「トレード サーバーから返されるエラーコード」と「ランタイムエラー」があると知り..
関数ごとのエラーコード表で OrderSend は 4055 ~ 4111と「トレード サーバーから返されるエラーコード」があると知り..
エラーコードが 4055 のみの比較的仕様の小さいSleep()関数をみると..
「Sleep() 関数は、カスタム インディケータから呼び出...続きを読む

Qc言語プログラミング実行時エラーについて質問です。

c言語プログラミングを実行しようとすると、
エラーが出て次のようなメッセージが出てしまいました。
「「7行目」で記述エラーを発見しました。「constant expression」を付け忘れています。」

どなたか原因を教えてください。よろしくお願いいたします。

以下が失敗したプログラムです。
#include <stdio.h>

int main(int argc, const char * argv[]) {
const char FILENAME[] = "/Users/user/Desktop/date3.txt";
const int LEN = 100;
char line [LEN];
char name [LEN];
char birth [LEN];
char address [LEN];
FILE *dat;


dat = fopen(FILENAME, "r");
if ( dat == NULL ) {
printf(" ファイル %s がオープンできません. ", FILENAME);
return -1;
}
while( fgets( line, LEN, dat) != NULL ) {
sscanf( line "%s, %s, %s", name ,birth, address );
printf("name = %s, address = %s\n", name, address );
}
fclose(dat);


return 0;
}

c言語プログラミングを実行しようとすると、
エラーが出て次のようなメッセージが出てしまいました。
「「7行目」で記述エラーを発見しました。「constant expression」を付け忘れています。」

どなたか原因を教えてください。よろしくお願いいたします。

以下が失敗したプログラムです。
#include <stdio.h>

int main(int argc, const char * argv[]) {
const char FILENAME[] = "/Users/user/Desktop/date3.txt";
const int LEN = 100;
char line [LEN];
char name [LEN];
char birth [LEN];
char address [...続きを読む

Aベストアンサー

実行時エラーではなく、コンパイル時のエラーですね。

とりあえず環境(OSやコンパイラ)くらいは書きましょう。

現状で思いつくのはコンパイラが
自動変数の配列の要素数に定数以外を書くことに対応してないのではないかと思います。

char line[LEN /* ここが変数はダメ */];

GNU CコンパイラやC99対応のCコンパイラなら大丈夫なのですが。

QMQL4での条件文の書き方

MT4でEA作成を勉強中です。

if文の条件で詰まっているので助けてください。


変数の宣言で

double hensu_A1 ←値は何でもいいです
double hensu_B1 ←値は何でもいいです
double hensu_A2 ←値は何でもいいです
double hensu_B2 ←値は何でもいいです
double hensu_C  ←0.00

としていたとします。


if文の中で、

if ( hensu_A1 < hensu_B1 && hensu_A2 < hensu_B2)

とした時はちゃんと機能しました。
また、

if ( hensu_A1 + 0 < hensu_B1 && hensu_A2 + 0 < hensu_B2)

としても機能しました。
しかし、上の式の「0」を「hensu_C」に置き換えて

if ( hensu_A1 + hensu_C < hensu_B1 && hensu_A2 + hensu_C < hensu_B2)

とすると、機能しない(計算結果が正しくてもtrueを返さない)ようで困っています。
「hensu_C」の中身は0.00を入れてあるので、計算結果は同じになるはずです。


条件文の書き方が間違っているのでしょうか。
判る方おられましたら教えて頂けると助かります。

MT4でEA作成を勉強中です。

if文の条件で詰まっているので助けてください。


変数の宣言で

double hensu_A1 ←値は何でもいいです
double hensu_B1 ←値は何でもいいです
double hensu_A2 ←値は何でもいいです
double hensu_B2 ←値は何でもいいです
double hensu_C  ←0.00

としていたとします。


if文の中で、

if ( hensu_A1 < hensu_B1 && hensu_A2 < hensu_B2)

とした時はちゃんと機能しました。
また、

if ( hensu_A1 + 0 < hensu_B1 && hensu_A2 + 0 < hensu_B2)

としても機能しました。
しか...続きを読む

Aベストアンサー

うーん、MT4がわからないが、他言語でありがちな
「初期化してないから初期値0を期待してたら、実は値がNullだったので演算結果もNull」じゃないですか?
hensu_Cは、本当に0.00ですか?

Q為替データをエクセルにダウンロード出来るサイト

為替データをリアルタイムで取得して、エクセルに
ダウンロードして処理したいのですが、
そのような事の出来るサイトは無いでしょうか。

Aベストアンサー

システムに関しては全く無知です。

株価のリアルタイムダウンロードの質問は時々あり、次が参考になっているようです。為替も同じじゃないでしょうか?

Excelで株投資
http://www2s.biglobe.ne.jp/~iryo/kabu/index.html
このなかの、右下のほうで、
■ 解析ツール関連VBAの解説
┣[1]-1Webから株価データ取得マクロ(Yahoo)
 ┣[1]-2Webから株価データ取得マクロ(Infoseek)

参考URL:http://www2s.biglobe.ne.jp/~iryo/kabu/index.html


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング