English

MQL5の書き方(for MQL4デザイナー)

 

2024.08

林貴晴/AMSER Inc.

ポジションの識別(ネッティングとヘッジング)

MetaTrader(MT)にはネッティングとヘッジングの2種類のポジション管理方法があります。

MT4はヘッジング方式を採用しています。この方式では、同じ銘柄(通貨ペアや商品など)に対して複数のポジションを同時に保有することが可能です。例えば、同じ通貨ペアの買いと売りのポジションを同時に持つことができ、それぞれのポジションが独立して管理されます。これにより、同じ銘柄で異なる取引戦略を同時に実行することができます。

一方、MT5はネッティング方式で開発されました。ネッティングでは、同じ銘柄に対して、同じ方向のポジションは一つにまとめられます。例えば、ある銘柄を買った後にさらに同じ銘柄を買うと、ポジションが合計されて一つのポジションとして表示されます。反対方向の取引をすると、そのポジションは部分的にまたは完全に決済されます。株式取引では、国内外を問わずほとんどがこのネッティング方式を採用しています。

 

ポジション管理方法の歴史

MetaTraderのポジション管理方式は、バージョンによって変遷してきました。

MT3では、ネッティング方式が採用されていました。この方式では、同じ銘柄に対して1つのポジションしか持つことができませんでした。そのため、銘柄を確認するだけで、ポジションを識別することが可能でした。

MT4になると、ヘッジング方式に変更されました。これにより、一つの銘柄に対して複数のポジションを保有できるようになりました。ポジションの選択にはチケット番号が、EA(Expert Advisor)毎のポジション管理にはマジックナンバーが使用されるようになりました。

MT5は当初、再びネッティング方式で開発されました。銘柄ごとに1つのポジションしか持てないため、銘柄を選択することがそのままポジションの識別につながりました。MT5でのポジション識別はPositionSelect()関数で行われ、銘柄名を引数として使用します。

bool  PositionSelect(
  string  symbol     // 銘柄名
  );
                    
 

しかし、この方式では複数のEAが発注したポジションが一つにまとまってしまい、特定のEAのポジションを選択することや、EA毎の成績管理が非常に困難でした。

2016年4月のBuild 1325で、MT5にヘッジング機能が追加されました。これにより、国内のFX会社がMT5を採用し始めました。多くのFX会社がヘッジング方式を選択したことで、MT4からMT5へのEAの移植における大きな障壁だったポジション管理の問題が解決されました。

 

マジックナンバーの管理

MT5ヘッジングでのMQL5のマジックナンバー識別方法とMQL4のマジックナンバー識別方法には重要な違いがあります。
MQL4では「Order」と呼ばれていたものがMQL5では「Position」に変わりました。MQL5では未約定の注文を「Order」、約定済み未決済の取引を「Position」と呼びます。

注意すべき点として、MQL4のOrderSelect()関数と同様に動作する関数はMQL5のPositionSelect()関数ではありません。MQL4とMQL5には同じように見えて異なる関数が多くあります。

ポジション選択で最も使いやすいのはPositionGetTicket()関数です。この関数はチケット番号を返すとともにポジションを選択します。チケット番号の取得とポジション選択が同時にできる点がメリットです。

ulong  PositionGetTicket(
  int  index      // ポジション通し番号
  );
                    
 

MQL5のマジックナンバーの取得は以下のようになります。

  • PositionGetTicket()でポジションを選択します。
  • PositionGetInteger(POSITION_MAGIC)でマジックナンバーを取得します。
for(int i=PositionsTotal()-1; i>=0; i--)
  {
  ulong ticket=PositionGetTicket(i);
  long magic=PositionGetInteger(POSITION_MAGIC);
  }
                    
 

MQL5では整数系のデータ型としてint以外も多く利用されます。
例えば、PositionGetTicket()はulong型、PositionGetInteger()はlong型を返します。これらのデータ型の違いを理解し適切に扱うことで、MQL5での開発がよりスムーズになります。

 

シンボルとマジックナンバーの確認について

ネッティングとヘッジングの場合で確認すべき項目が異なります。ネッティングの場合はシンボル(通貨ペアや銘柄)を確認し、ヘッジングの場合にはマジックナンバーを確認するのが適切です。

ヘッジング環境でマジックナンバー以外に追加の確認が必要な場合、シンボルよりも確実な方法があります。マジックナンバー以外の確認項目としては、チケットナンバーやコメントを使用することをお勧めします。これらの方法はシンボルを確認するよりも正確にポジションを識別できます。

 

執筆者紹介
林貴晴

林 貴晴(AMSER株式会社代表取締役)

内資系薬品会社で約10年勤務の後、
外資系製薬会社(現IQVIA及びGSK)で合計約10年を勤務
その後EA AMSERを開発し、その成績を評価され、株式会社ゴゴジャンの部長として抜擢。
現在はAMSER株式会社代表取締役。