【MQL4関数】OrderSymbol関数の使い方!正しくポジションを決済する方法

【中級編】MQLプログラムの読み方・書き方
朝日奈りさ
朝日奈りさ

別の通貨ペアのポジションを、自動売買が勝手に決済しちゃった!どうしたら防げるの?

OrderSymbol関数とは

自動売買が勝手に別のポジションを決済することはありませんか?

そういうときは、自動売買のプログラム内で、通貨ペアの設定ができていない可能性があります。

 

通貨ペアの設定ができていない場合、別の通貨ペアのポジションを決済してしまうことがあります。

例えば、自動売買を「USDJPY」で動かしているのに、「EURUSD」のポジションを決済してしまったり、「AUDJPY」のポジションを決済してしまったりします。

そこで、別のポジションを決済してしまうことを防ぐために、OrderSymbol関数を使いましょう。

 

OrderSymbol関数とは、保有ポジションの通貨ペアの情報を取得する関数です。

保有ポジションの通貨ペアを取得することで、正しい通貨ペアのポジションだけを決済させることができます。

例えば、自動売買が「USDJPY」で動いているなら、「USDJPY」のポジションだけを決済させることができます。

このように OrderSymbol関数を使って正しい通貨ペアを設定することで、別の通貨ペアのポジションを勝手に決済してしまうことを防ぐことができます。

 

OrderSymbol関数の書き方

OrderSymbol関数の書き方は、関数の書き方と同じです。

もし関数の使い方をマスターしていない方は、こちらの記事が参考になります。


 

基本的な書き方

OrderSymbol関数の基本的な書き方は以下の通りです。

string orderSymbol = OrderSymbol();

 

返り値は string型で、引数はありません。

 

返り値(戻り値)

OrderSymbol関数の返り値は、string型です。

保有ポジションの通貨ペア名が返ってきます。

 

例えば、保有ポジションがドル円の場合、「USDJPY」という値が返ってきます。

 

このように OrderSymbol関数は、string型が返り値となっていて、保有ポジションの通貨ペア名が返ってきます。

 

事前にポジションを選択しておく

OrderSymbol関数は、ポジションを選択しないと使うことができません。

そのため OrderSymbol関数を実行する前に、ポジションを選択しておきましょう。

ポジションを選択するには、OrderSelect関数を使います。

 

必ず OrderSelect関数 → OrderSymbol関数 の順にプログラムするので、以下のようなプログラムになります。

//保有ポジションを一つ選択
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
   {

   //選択したポジションが、実行されている通貨ペアと同じかどうかチェック
   if(OrderSymbol() == Symbol())
   {

      //ここにポジションを決済するプログラムを書く

   }

 

このように、OrderSymbol関数を実行する前に、ポジションを選択しておくようにしましょう。

ちなみに if文の条件式に「Symbol( )」と書いていますが、Symbol関数は自動売買が動いている通貨ペアの情報が返ってきます。

OrderSymbol関数でポジションの通貨ペアを取得し、Symbol関数で自動売買が動いている通貨ペアを取得します。

通貨ペアを一致させることで、別のポジションを決済してしまうことを防いでいます。

 

OrderSelect関数は、こちらの記事が参考になります。

 

OrderSymbol関数の具体的な使い方(サンプルあり)

先ほど、OrderSelect関数と組み合わせましたが、さらに他の関数とも組み合わせます。

上記の例では、ポジションを1つだけ選択して、通貨ペアを取得していましたが、全てのポジションの情報を取得してみます。

全てのポジションの情報を取得するためには、for文を使って全てのポジションをチェックします。

そのとき、for分の条件式に保有ポジション数が必要となりますので、OrdersTotal関数と組み合わせて使ってみましょう。

例えば、以下のようなプログラムです。

//保有ポジションを一つずつチェックしていく
  for( int i = OrdersTotal() - 1; i >= 0; i--)
     {

      //保有ポジションを一つ選択
      if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
          {

              //選択したポジションが、実行されている通貨ペアと同じかどうかチェック
              if( OrderSymbol() == Symbol())
              {

              //ここにポジションを決済するプログラムを書く

              }
          }
     }

 

 

このように書くことで、全てのポジションをチェックし、その中から自動売買が動いている通貨ペアだけを選択することができます。

この書き方は、自動売買を作るときによく使う書き方なので、どこかにコピーしておくと良いでしょう。

 

OrdersTotal関数の使い方は、以下の記事が参考になります。

 

まとめ

OrderSymbol関数は、保有ポジションの通貨ペアの情報を取得する関数です。

自動売買が動いている通貨ペアと一致させることで、別の通貨ペアのポジションを決済することを防ぐことができます。

使い方としては、OrderSelect関数でポジションを事前に選択しておく必要があるので、注意しましょう。

また、上記で紹介したサンプルプログラムは、どの自動売買でも基本となる書き方なので、コピーしておくと良いでしょう。