ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

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

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

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

よろしくお願いします。

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

A 回答 (3件)

それ、不可能かもしれません。


決済はEAで、ラインはあなたが手動で描くという意味ならば、恐らく無理です。

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

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

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

わかりやすく教えてくださり、ありがとうございます。
自分で引いたトレンドラインの売買は不可能なんですね。
でもこれで悩みが減りました。
もう少しMTについて勉強します。

お礼日時:2012/02/04 08:07

私にはできないので参考までに・・・


”MT4 トレンドライン 自動”などで検索すると、自動でトレンドラインを引いてくれるインディケーターがあるようですので、
このようなものからEAを作成すれば可能かもしれません。

また、面白そうなもので、「手動で引いたトレンドラインのブレイクでエントリーするEA」というものを、紹介しているサイトも
見かけました。
実際にどういうものかわかりませんので、参考になればと思います。
一応リンク先を付けておきました。

参考URL:http://miyachi3000.cocolog-nifty.com/blog/2011/0 …
    • good
    • 0
この回答へのお礼

参考サイトを紹介してくださり、ありがとうございます。
なかなか難しいみたいですね。
メタトレはサポート的に考えて利用します。

お礼日時:2012/02/10 18:10

MT4で売買させるためには、プログラムでトレンドラインを描画させなければなりません。


プログラム言語の勉強中となれば、相当難しいと思いますよ。

まずは、安値(高値)の定義方法などを学びましょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。
移動平均やRSIなどのEAは作れるんですが。
自分で引いたトレンドラインのEAだけは本やサイトで紹介されてないんですよ。

お礼日時:2012/02/03 06:48

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

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

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

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

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

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

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

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

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

Aベストアンサー

ちょっと自信ありませんが、とりあえず作ってみました。
今、手元に、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の勉強をはじめたばかりで、質問者の方と同様、いろいろ苦労しております。

ちょっと自信ありませんが、とりあえず作ってみました。
今、手元に、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 // もしも現在...続きを読む

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でShellExcecuteを使い外部アプリ

メタトレーダーでシグナルが出た時に外部アプリを起動させたいのですが上手くいきません。
ヘッダ部分で、

#import "shell32.dll"
int ShellExecuteA(int hWnd,int lpVerb,string lpFile,string lpParameters,string lpDirectory,int nCmdShow);
#import

と記述し、
シグナル発生を示すif文で、

ShellExecuteA(0,"open","C:\Windows\notepad.exe","","",0);

と記述していますが、
シグナルが発生してもメモ帳は起動しません。
ShellExecuteの前行に音声を鳴らす構文を書いていますが、そちらは上手く作動しています。
コンパイル時のエラーは0です。
何が原因でしょうか?
宜しくお願いします。

Aベストアンサー

では、下記をスクリプトでコピーして実行してみて下さい。


#import "shell32.dll"
int ShellExecuteA(int hWnd,int Verb,string File,int Parameter,int Path,int ShowCommand);
#import

int start() {

ShellExecuteA(0,"open","C:/Windows/notepad.exe","","",1);

return(0);
}

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

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

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

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

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

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

Aベストアンサー

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

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

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

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

# define MAGIC 0001

という部分を、

# define MAGIC 16384

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

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

Q土日でも為替の変動が見れるサイトは?

土日でも為替の変動が見れるサイトはありますでしょうか?

見たいのは円/USドルですが。

宜しくお願い致します。

Aベストアンサー

こちらですか?

http://www.ne.jp/asahi/cme/globex/fx4.html

ここの注意として土曜日にどんなに相場が動いても無視して下さい。
ほとんどの場合は日曜日に元に戻ります。
日曜日の26時(月曜の午前2時)すぎまで相場の変動がそのままの場合は月曜日の相場に影響がある場合があります。(9月10月に2回ずつ有りました)

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ランキング