English

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

 

cTraderライブラリを活用したポジションのクローズや変更に関する詳細な解説

この記事では、MT5に初めからインストールされているcTraderライブラリを使用してヘッジアカウントのポジションを効率的にクローズや変更する方法について詳しく説明します。これにより、取引戦略の効果的な実装が可能となります。

PositionClose()関数の使い方

cTraderライブラリの PositionClose() 関数は、チケット番号を引数として渡すことでポジションをクローズする指令を実行できます。deviation というパラメータにより、許容スリッページ範囲をポイント単位で指定することができます。ただし、deviation の設定は取引業者によって無効にされることがありますので注意が必要です。

PositionClose
bool  PositionClose(
  const ulong   ticket,
  ulong     deviation=ULONG_MAX
)
PositionModify()関数の説明

cTraderライブラリの PositionModify() 関数にチケット番号、ストップロス(SL)値、テイクプロフィット(TP)値を引数として渡すことにより、ポジションの変更が可能となります。
なお、戻り値は注文の成功そのものではなく、基本構造体のチェックが正常に行われたかどうかを示すものです。

PosiotionModify
bool  PositionModify(
  const ulong   ticket,   
  double        sl,   
  double        tp    
)
ポジション数の取得

MQL4では、OrdersTotal()関数の戻り値によってエントリー中のポジション数を取得することができます。一方、MQL5のOrdersTotal()関数では、指値注文、逆指値注文、発注後未約定のオーダー数の合計が返されます。
エントリー中のポジション数を取得するには、MQL5ではPositionsTotal()関数の戻り値を用いることができます。これにより、現在のエントリー中のポジション数を正確に把握することが可能です。

各関数の戻り値に含まれる内容

MQL4
OrdersTotal
MQL5
OrdersTotal
MQL5
PositionsTotal
エントリー中のポジション
指値、逆指値注文
発注後未約定のオーダー
 
指値、逆指値注文
発注後未約定のオーダー
エントリー中のポジション
ポジションの選択とチケット番号の取得

MQL4のOrderSelect()関数では、チケット番号またはポジションのインデックス番号を使ってポジションを選択できました。しかし、MQL5のOrderSelect()関数では、チケット番号のみを引数として渡す方法に変更され、ポジションのインデックス番号を使って選択することができなくなりました。

MQL5では、ポジションのインデックス番号を使って選択する場合、PositionGetTicket()関数を使用します。この関数の戻り値としてチケット番号が得られ、ポジションの選択も同時に行われます。ただし、戻り値の型はint型ではなく、ulong型であることに注意してください。

PositionGetTicket
ulong  PositionGetTicket(
  int  index    
);
マジックナンバーの取得方法

MQL5では、ポジション選択後にマジックナンバーを取得するために、PositionGetInteger()関数を使用します。POSITION_MAGICという識別子を引数として渡すことで、マジックナンバーが戻り値として取得できます。

long magic_number = PositionGetInteger(POSITION_MAGIC);

 

使用例
#include 
CTrade Trade;
input long MAGIC = 12345;
void OnTick()
   {
   for(int i = PositionsTotal() - 1; i >= 0; i--)
      {
      ulong Ticket = PositionGetTicket(i);
      long PositionMagic = PositionGetInteger(POSITION_MAGIC);
      if(PositionMagic != MAGIC)continue;
      if( /*&& 条件 */)
         {
         int value = Trade.PositionClose(Ticket);
         }
      }
   }

解説)

  • #include <Trade\Trade.mqh>
     上記のコードを使用して、cTradeライブラリをインクルードし、プログラム内で利用できるようになります。cTradeライブラリは、MQL5の取引機能を簡単に扱うための便利なクラスを提供しており、このライブラリを使用することで、取引操作を効率的に実行できます。
  • CTrade Trade;
     CTradeクラスのインスタンスである「Trade」を宣言しています。これにより、プログラム内でTradeオブジェクトを使用して、cTradeライブラリの取引機能にアクセスできるようになります。Tradeオブジェクトを用いることで、効率的な取引操作を実現することが可能です。
     
  • for(int i = PositionsTotal() - 1; i >= 0; i--)
     全てのポジションをforループを使ってチェックするための構文です。PositionsTotal()関数は、エントリー中のポジション数を返します。このループでは、ポジション数をカウントダウンしながら、すべてのポジションにアクセスして処理を実行できます。これにより、一括してポジションに対する操作を行うことができます。
     
  • ulong Ticket = PositionGetTicket(i);
     インデックス番号iを引数として渡すことで、対応するチケット番号を取得し、同時にポジションを選択するための構文です。PositionGetTicket()関数は、指定されたインデックス番号に対応するチケット番号を戻り値として返します。
     
  • long PositionMagic = PositionGetInteger(POSITION_MAGIC);
     選択されたポジションのマジックナンバーを取得するための構文です。PositionGetInteger()関数にPOSITION_MAGICを引数として渡すことで、マジックナンバーが戻り値として得られます。このコードを使って、ポジションに関連付けられたマジックナンバーを把握し、特定のポジションに対する操作を行うことができます。
     
  • int value = Trade.PositionClose(Ticket);
     指定されたチケット番号(Ticket)のポジションを閉じるための構文です。CTradeクラスのインスタンスである「Trade」のPositionClose()メソッドを使用して、ポジションをクローズする操作を実行します。戻り値(value)は、実行結果を示し、成功した場合はtrueが返され、失敗した場合はfalseが返されます。
     
  • ※注:発注直後は、オーダーが1つ増え、ポジションは増えません。その後、オーダーが承認されると、オーダーは1つ減り、ポジションが追加されます。発注直後にポジションを確認する際は、ポジションに反映されないことがあるため、注意が必要です。
    オーダーとポジションの考え方、ポジションの選択方法や詳細の取得方法は、MQL4とMQL5で大きく変わりました。また、整数型にはintだけでなく、longやulongなどがあり、関数に合わせて適切な型を選択する必要があります。これらの点に注意して、cTraderライブラリを使用すれば、MQL4に近い形でポジションの決済を行うことができます。
     

 

執筆者
林貴晴

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

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