*

ここが変だよMQL5 ~実装の話~

公開日: : MT5/MQL5 , , ,

実装の問題

OrderSelectで済んでたのに、6通りの使い分けが必要

OrderSelect(ticket):

引数はチケット番号。MQL4で言うところの、OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADE)です。ただし、対象はオーダー。SELECT_BY_POSとかSELECT_BY_TICKETの指定はもうありません。チケットでしか渡せません。


PositionSelectByTicket(ticket):

チケットを引数に入れると、MQL4で言うところのOrderSelectした状態になります。MQL4で言うところの、OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADE)です。ただし、対象はポジション。


PositionSelect(symbol):

引数はシンボル。ネッティングの場合、シンボル毎にオーダーが集約されるので、シンボルを選択すればオーダーの情報が引っ張ってこれるよね、って仕組みです。


HistorySelect(from_date,   to_date ):

MQL4のOrderSelect(i,SELECT_BY_POS, MODE_HISTORY)と見せかけて違います。履歴を参照する期間をUNIXタイムで指定します。(HistoryReadPeriod()とかの名前の方が良かったんじゃないの?)


HistoryOrderSelect(ticket):

MQL4で言うところの、OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISOTRY)です。呼び出せば、HistoryOrderGetDouble(), HistoryOrderGetInteger(),HistoryOrderGetString() が使えるようになります。


HistoryDealSelect(ticket):

ディールごとに履歴を参照できます。呼び出せば、HistoryDealGetDouble(), HistoryDealGetInteger()を利用できるようになります。


HistorySelectByPosition(position_id):

position_idは、全ての新しくオープンしたポジションに割り当てられ、ポジションのライフタイムに一貫する固有の番号です。これに関してはあまり馴染みがないと思います。指定した条件のポジション履歴を参照・回収します。こいつを使うとHistoryDealsTotal() とHistoryOrdersTotal()の値が変わります。

でも、上の関数を従来のように使うにはチケットがわかってないと駄目だよねってことで、

チケットを取得する関数

OrderGetTicket(index):

MQL4で言うところの、OrderSelect(index,SELECT_BY_POS,MODE_TRADE)ですが、チケットを返すと同時にOrderSelectの役割も自動的に果たすので、OrderTicket()とOrderSelectの合体版のようなやつです。(逆にこいつのあとでOrderSelectするとバグります。)  注:約定済みのポジションは範囲外なので、予約注文のみを返します。


PositionGetTicket(index):

ポジションの数以下の数値を引数に入れると、そのポジションのチケットを返します。


PositionGetSymbol(index):

持っているポジションの数以下の数値を引数に入れると、そのポジションのシンボルを返します。返すのはチケットではありませんが、PositionSelect(symbol)と組み合わせて使えます。


HistoryOrderGetTicket(index):

履歴のチケットを返します。使うには事前にHistorySelectで期間を指定しておく必要があります。


HistoryDealGetTicket(index):

履歴のディールのチケットを返します。

実装

保有中のポジション情報が欲しい場合のコード

有効のオーダー情報が欲しい場合のコード:https://www.mql5.com/en/docs/trading/ordergetticket

履歴のオーダー情報が欲しい場合のコード:

https://www.mql5.com/en/docs/trading/historyordergetticket

履歴のディール情報が欲しい場合のコード:https://www.mql5.com/en/docs/trading/historydealgetticket

その他

・パラメータとして宣言した変数は後から違う値を入れらない。

ユーザーが間違えて入力した場合などにはOnInit内で修正することがMT4ではできたのですが、MQL5ではエラーになるのでそういったフェイルセイフは実装できません。

・OrderSendの扱い
MQL4では単一の関数OrderSend、MQL5では構造体とOrderSend

ただし、標準ライブラリのCTradeを使うと、MQL4のように注文できます。

・オーダー決済
MQL4ではOrderClose,MQL5ではOrdersendによる反対ポジション(ネッティグ口座の場合。標準ライブラリのCTradeを使うと楽に実装できます。)

・Barsによるバーの取得
MQL4ではBars, MQL5ではChartGetInteger(Chart_ID,CHART_VISIBLE_BARS)。→バージョンアップでMQL4由来の配列も使えるようになりました。

・始値~終値の取得
MQL4では、iOpenやOpen[] MQL5では独自で配列の宣言をして配列の向きを変えて値を入れてから使用

・オブジェクトの扱い
MQL5では、関数の引数のチャートIDの省略が不可に

・市場情報の取得
MQL4ではMarketInfo(), MQL5ではAccountInfoInteger()~AccountInfoDouble()

・IsDemoの返り値
MQL4では0-ライブか1-デモか、MQL5では0-デモ、1-コンテスト、2-ライブ、
(AccountInfoInteger(ACCOUNT_TRADE_MODE))
いや、数字の順番は一緒にしてくれよ・・・

ほとんど変わらないもの

MT4のBuild610以降に実装された新しい関数群(WebRequestとか)はMQL4とMQL5で差はほとんどありません。

Message

メールアドレスが公開されることはありません。

このコメントはWEBに公開されるので、問い合わせ等はメールでお願いします。

関連記事

ここが変だよMT5 ~MT4ユーザーのためのちょっとためになる話~

ヘッジタイプとネッティングタイプによる仕様の大幅な差 MT5ではアカウントの種類にヘッジタイ

記事を読む

ここが変だよMQL5 ~でも、ちょっとずつ良くなった(概要版)~

【この記事は2017年の記事を更新したものです。】 Order, Positionの意味が変わっ

記事を読む

MT5のテスターではスプレッドは変更できないという事実

を知らない人が多くて、「このバックテストのスプレッドはいくつですか」という質問が来るので共有です。

記事を読む

ここが凄いよMT5 ~たまにはいいところも褒めないと~

いつもMT5,MQL5の悪口ばかり書いているので、たまにはMT5の良いところも紹介したいと思います

記事を読む

 

  • (↑広告です。このサイトの管理者の運営ではありません)



  • 横瀬兼元(ペンネーム)です。

    ご質問、ご相談などは
    infoあっとfxantenna.com
    まで
    偽者(オリジナルある模倣者)がいるらしいのでご注意ください。
no image
(MT4EA)MACDと特殊ベッティング【EA検証班求ム】 

. . 超シンプルなMACDのEAです

MT4の1分足テストで起こる致命的な現象

1分足っていうのは他の時間枠といろいろ違う点があります。 まず、本題か

no image
【EA検証班募集】コツコツドカンとドローダウン(MT4) ~原理は単純を、構造は複雑を、人は最も人らしく~

EURGBP 2018.11.1~2019.4.30 D1 Sp

MT5のテスターではスプレッドは変更できないという事実

を知らない人が多くて、「このバックテストのスプレッドはいくつですか」と

FX業界の人種マップとその特徴 LP、ホワイトラベル、商材屋さん、開発代行…

FX業界にはさまざまな人種というか役割の人たちがいます。職人気質の開発

→もっと見る

PAGE TOP ↑