MQLの勉強メモ (10) トレード関数前編(注文情報照会)

MQL4の公式ドキュメントにより、トレード用関数は合計25個あります。
これらを勉強して、2種類に分けて、メモしておきます。
情報系関数(20個:合計・選択・情報照会)はこの記事で。
動作系関数(5個:発注・修正・削除・決済)は別の記事で勉強する予定です。

注文選択 OrderSelect

注文の情報を照会するには、まずはOrderSelect関数で注文を選択しなければなりません。

  • 順序(index)で選択:OrderSelect(index, SELECT_BY_POS)
    注文リストの順序indexで選択、0から始まる。
  • 番号(ticket)で選択:OrderSelect(ticket, SELECT_BY_TICKET)

注文情報の照会

基礎情報

戻り値 関数名 意味 説明
string OrderSymbol() 通貨ペア 例:”USDJPY”
int OrderTicket() 番号 注文選択用Ticket番号
int定数 OrderType() 注文種類 詳細説明
int OrderMagicNumber() マジックナンバー  
double OrderLots() ロット・枚数  
string OrderComment() コメント  
double OrderCommission() 手数料  
double OrderPrint() 情報出力 出力例

損益系情報

戻り値 関数名 意味 説明
double OrderProfit() 評価損益・実現損益  
double OrderSwap() 実現スワップ  

価格系情報

戻り値 関数名 意味 説明
double OrderOpenPrice() 注文約定価格  
double OrderClosePrice() 決済約定価格 未決済の注文は現在の価格
double OrderTakeProfit() 指値執行価格  
double OrderStopLoss() 逆指値執行価格  

時間系情報

戻り値 関数名 意味 説明
datetime OrderOpenTime() 注文時間  
datatime OrderCloseTime() 決済時間 未決済は0
datetime OrderExpiration() 有効期限 指値・逆指値だけ
datetimeの出力がint型で、秒数そのままなので、
TimeToString()で整形してから表示したほうが見やすい。
Print(TimeToString(OrderOpenTime()));

OrderType()の種類と相互変化

    種類

  • OP_BUY 買いポジション
  • OP_SELL 売りポジション
  • OP_BUYLIMIT 買い指値
  • OP_BUYSTOP 買い逆指値
  • OP_SELLLIMIT 売り指値
  • OP_SELLSTOP 売り逆指値
    変換規則

  • 成り行きの実行済み注文はBUYかSELL、決済後も変わらない。
  • 指値・逆指値の未実行注文はXXXLIMITかXXXSTOP、実行したらBUYかSELLに変わる。
  • 未実行取り消しの指値・逆指値注文は取消後もXXXLIMITかXXXSTOPのまま。

OrderPrint()関数の出力例

OrderPrintExample

注文数統計

全注文を遍歴するためのfor文によく使う関数です。

  • OrdersTotal():現在の注文と待機注文の合計
  • OrdersHistoryTotal():履歴注文総数

OrdersHistoryTotal()関数の統計範囲に関数記事です。
http://www.makit.co.jp/systemtrade/index.php/archives/234
統計範囲に入るのは「履歴」タブに表示されている注文だけです。
全歴史注文数を統計したい場合、先に「履歴」タブを「全期間」に設定する必要があります。

プログラミング応用例

上記の知識を踏まえ、
現在の実行済み注文の総評価損益を計算するスクリプトを作ってみた。

int total = OrdersTotal();
double totalProfit = 0;
// 注文遍歴のループ
for (int i = 0; i < total; i++) {
    OrderSelect(i, SELECT_BY_POS);
    // 実際に実行済みか判断する必要がありません。
    // 待機注文のOrderProfit()が0なので。
    if (OrderType() == OP_BUY || OrderType == OP_SELL) {
        totalProfit += OrderProfit();
    }
}
MessageBox(totalProfit);

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>