MT4のEAのプログラムで両建てする事は可能ですが、決済になると売玉しか決済できません。
決済関数が買ポジも売りポジもOrderCloseで決済します。
OrderClose(OrderTicket(),OrderLots(),Bid,SPP,EXcolor1);
で買ポジを決済しようとしましたが、
OrderClose error 138
というエラーになりできません、ちなみに売玉は決済出来ました。
つまり正確に両建ての決済が可能なプログラムの習得が色々試して見ましたが不可能なので、両建てEAのプログラムソースをネット上から探してますが見つけにくく質問させて戴いた次第であります。
両建てEAで正確に買玉も売玉も決済も出来るEAをプログラムするにはどう書けば宜しいのでしょうか?
ご回答宜しくお願いします。

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

MT4」に関するQ&A: FX 証券会社選びとMT4

A 回答 (1件)

両建てはやったことはないですが


なぜそうなるかというと
mt4では
両建てで、例え同時に発注したとしても
一つの注文として扱われません。

売りと買いの注文が一つずつ発注された
という扱いになります。

そうなるとポジション毎に固有のチケット番号も当然、売りと買いで別々ですので
同じチケット番号でOrderSelect出来ません。

それが原因で片方だけが決済されるという状況になっているのかと思います。

ではどうすればいいかですが
発注時にOrderSendが戻り値として返してくれる固有のチケット番号を
グローバル変数なり、static変数なり
静的な変数に保存します。
(おすすめはグローバル変数)
そして、そのチケット番号を決済時に利用します。

発注時

saver_TicketNumLP = OrderSend(買い注文);

saver_TicketNumSP = OrderSend(売り注文);

決済時

買い決済
OrderClose(saver_TicketNumLP,‥‥);

売り決済
OrderClose(saver_TicketNumSP,‥‥);

こんな感じでやればうまくいくと思います。
    • good
    • 0
この回答へのお礼

ご回答どうもありがとうございました。
OrderSelectが記述されてませんでした、OrderSelectにより両建て同時決済ができました。

お礼日時:2016/03/27 11:28

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

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

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

この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土日でも為替の変動が見れるサイトは?

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

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

宜しくお願い致します。

Aベストアンサー

こちらですか?

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

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

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を使い、トレンドラインで売買する方法

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

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

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

よろしくお願いします。

Aベストアンサー

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

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

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

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

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で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 「iCustom関数での条件記述について」

お尋ねします。初心者にてNETや本を参考にしつつEAを作成しております。

EA作成に"MA Candles"というインジを使おうと考えています。
ある条件にてローソク足の色を「青or赤」にて表示するものです。

たとえばエントリーにて下記条件を記述した場合、

if( iCustom(NULL,0,"MA Candles", 2,1) □□□□

□□□□の箇所に「 color 」を指定することは可能でしょうか?

根本的に間違っているのか、はたまたもっと単純なのか。。
皆目見当がつかなくなってます。


検索しましたが有用な情報が得られず、あれこれトライしましたがエラー吐きまくりです。

よろしくお願いします。

Aベストアンサー

iCustom関数はインジケーターで定義されているindicator_buffersの配列?の値を取得するためのものなので、この場合はcolorを指定することはできません。

つまり、iCustom(NULL,0,"MA Candles", 2,1) ですと、"MA Candles"というインジケーターの3つ目のbufferの現在から2本目のバーに対応する値を取得することになります。

実際のインジケーター・プログラムで言うと、Candle1[1]の値になりますね。

色の指定はプログラムの中で実施されています。質問者の方の目的を考えますと、色を直接読み取るように頑張るのではなく、色の決定ロジックを理解してbufferの値を使って色を算出する(つまり、トレンドを見る)ように考えると良いです。

ただ、
当該インジケーター自体は単に期間5と25のクロスでトレンドを見ているだけなので、一般にこの分析手法だけでエッジがあるとは思えないので、私などは近づかないインジケーターです(個人的な趣味なので、使いようによっては意味があるかも知れませんが。。。)。
念のため、このインジケーターの算出ロジックを明確にするため、期間5(黄線)と期間25(緑線)を表示させてみました(添付画像)。
ん~、どうみても、、、使えそうにないです。私的には。

すいません、余分なコメントが多すぎました。。。

iCustom関数はインジケーターで定義されているindicator_buffersの配列?の値を取得するためのものなので、この場合はcolorを指定することはできません。

つまり、iCustom(NULL,0,"MA Candles", 2,1) ですと、"MA Candles"というインジケーターの3つ目のbufferの現在から2本目のバーに対応する値を取得することになります。

実際のインジケーター・プログラムで言うと、Candle1[1]の値になりますね。

色の指定はプログラムの中で実施されています。質問者の方の目的を考えますと、色を直接読み取るように頑張...続きを読む

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エクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

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

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

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

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

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

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

Aベストアンサー

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

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

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

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

# define MAGIC 0001

という部分を、

# define MAGIC 16384

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

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


人気Q&Aランキング

おすすめ情報