基礎から学ぶシステムトレード
シストレブログ人気ランキング  

シストレ徹底攻略シストレマスターへの道ワールド・トレーディング・エッジ基礎から学ぶシステムトレードシストレニュースシストレツールシストレナビTOPへ

 

2012年08月20日(月)

MT5で両建てシステム(5)〜仮想ポジションのプログラミング [MQL5]



今回から、仮想ポジションのプログラミングについて説明していきます。

ポイントとしては、

・オーダー送信時に適切なマジックナンバーを付加する

・仮想ポジションのオープンロット数を取得する

のプログラミングをどうするかということになります。

まずはオーダーの送信です。

前回説明したように、買いオーダーと売りオーダーでマジックナンバーを変えるということですが、これは元々買いと売りを区別しているので難しくはありません。ただ、それ以前にオーダー送信の関数がMQL4と全く異なっているという点に注意が必要です。

オーダーには成行オーダー、指値、逆指値の待機オーダーなどがありますが、この連載記事では、とりあえず成行オーダーを対象に説明していきます。

MQL5のオーダー送信関数はMQL4と同様にOrderSend()という関数なのですが、パラメータがまるっきり違います。MQL5のOrderSend()関数の書式は次のようになっています。

【書式】
bool OrderSend(MqlTradeRequest& request, MqlTradeResult& result)
【パラメータ】
request
トレードの要求を記述した MqlTradeRequest型の構造体
result
トレードの結果を記述した MqlTradeResult型の構造体
【戻り値】
成功すれば「true」を、失敗すれば「false」を返す。

このようにパラメータはrequest, resultの二つしかないのですが、それぞれが構造体となっています。

使い方としては、request, result の構造体変数を宣言して、OrderSend()関数を実行するだけですが、予め、request という構造体変数にオーダーの条件をすべて設定する必要があります。

MqlTradeRequestの構造体は次のように定義されています。

struct MqlTradeRequest
{
ENUM_TRADE_REQUEST_ACTIONS action;
ulong magic;
ulong order;
string symbol;
double volume;
double price;
double stoplimit;
double sl;
double tp;
ulong deviation;
ENUM_ORDER_TYPE type;
ENUM_ORDER_TYPE_FILLING type_filling;
ENUM_ORDER_TYPE_TIME type_time;
datetime expiration;
string comment;
};

実に15個のメンバーを含んだ構造体です。

これらのメンバーのうち、成行オーダーで利用するものを説明しておきます。

action トレードの種類
 成行オーダーの場合、「TRADE_ACTION_DEAL」を指定

magic マジックナンバー

symbol 通貨ペア・ティッカーシンボル

volume 売買ロット数

price 売買価格

sl 損切り価格

tp 利食い価格

deviation 許容スリッページ

type 注文の種類
 ORDER_TYPE_BUY 成行買い
 ORDER_TYPE_SELL 成行売り

type_filling 注文執行の種類
 ORDER_FILLING_FOK Fill or Kill(指定したロット数が約定しない場合、キャンセル)
 ORDER_FILLING_IOC Immediate or Cancel(指定したロット数の一部しか約定しない場合、残りはキャンセル)
 ORDER_FILLING_RETURN Return(指定したロット数の一部しか約定しない場合でも残りはキャンセルしない)

comment 注文のコメント

これら11個のメンバーに値を代入してOrderSend()を実行することになります。

ここで、type_filling について、3つの選択肢がありますが、今回のような仮想ポジションを考える場合、指定したロット数の一部だけ約定するような状態は後の処理が複雑になるので、指定したロット数が約定しない場合、キャンセルするというORDER_FILLING_FOKを選択するのが無難です。

例えば、成行買いオーダーの送信は以下のような形になります。

例:成行買いオーダーの場合

MqlTradeRequest request;
MqlTradeResult result;

request.action = TRADE_ACTION_DEAL;
request.magic = magic;
request.symbol = symbol;
request.volume = volume;
request.price = price;
request.sl = sl;
request.tp = tp;
request.deviation = deviation;
request.type = ORDER_TYPE_BUY;
request.type_filling = ORDER_FILLING_FOK;
request.comment = comment;

OrderSend(request, result);

ただ、毎回このように何行もプログラムを記述するのは見にくいので、これらを別の関数として定義しておくと便利です。

次回は関数の定義の仕方とパラメータの選び方について説明します。


>>“基礎から学ぶシステムトレード”全記事バックナンバーはこちらから




Posted at 17時25分


ページのトップへ ページのトップへ

Sponsor AD

2012/8

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

プロフィール

豊嶋久道

2003年よりFX取引を始め、システムトレードの道へ。最近ではFXオプション取引も含めたトレーディングシステムの研究を行っている。システムトレードを基礎から正しく理解するための情報を発信する予定。

PHOTO

Excelでヒストグラムの作成

Excelでヒストグラムの作成

カテゴリーリスト

最近の記事

検索


当サイトコメントについて

当コメントは情報提供のみを目的として作成されたものであり、投資に関してはご自身でご判断くださいますようお願い致します。また、当資料は著作物であり著作権法により保護されております。無断で全文または一部を転載することはできません。

RSS1.0

[Login]


powered by a-blog
Copyright (C) 2008 PhiConcept,Inc. All rights reserved.