PositionSelect

今後の作業で使用する保有ポジションを選択します。関数の実行に成功した場合、trueを返します。関数の実行に失敗した場合、falseを返します。エラーに関する情報を取得するには、GetLastError()関数を呼び出す必要があります。

bool  PositionSelect(
  string  symbol     // 商品名
  );

パラメータ

symbol

[in]  金融商品の名称。

戻り値

bool型の値。

注意事項

ポジションの『ネッティング』計算時(ACCOUNT_MARGIN_MODE_RETAIL_NETTINGACCOUNT_MARGIN_MODE_EXCHANGE)各シンボルにつき常に一つのポジションのみ(1つ以上の取引の結果である)保有することができます。ポジションと『ツールボックス』パネルの『取引』タブに表示される有効な未決注文と混同しないようにしてください。

ポジションに制限がない場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)各シンボルごとに同時に複数のポジションを保有することができます。この場合、PositionSelectは最小チケットのポジションを選択します。

PositionSelect()関数はソフトウェア環境でのポジションについての情報をコピーし、後続のPositionGetDouble()PositionGetInteger()PositionGetString()の呼び出しは前にコピーしたデータを返します。これはつまり、ポジション自体はすでになくても(またはポジションのボリュームや方向が変わったなど)、このポジションのデータは取得できるということを意味しています。ポジションの最新データの取得を確実なものにする為には、直接PositionSelect()関数を適用前に呼び出すことをお勧めします。

例:

#define   SYMBOL_NAME   "EURUSD"
 
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                              |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- 指定された銘柄でポジションを選択する
  if(!PositionSelect(SYMBOL_NAME))
    {
    PrintFormat("PositionSelect(%s) failed. Error %d",SYMBOL_NAME, GetLastError());
    return;
    }
 
//--- ポジションが選択されている場合、PositionGetDouble()、PositionGetInteger()、PositionGetString() を使用してそのデータを取得できる
//--- 選択されたポジションチケットを取得する
  ResetLastError();
  long ticket=PositionGetInteger(POSITION_TICKET);
  if(ticket==0)
    {
    PrintFormat("Failed to get %s position ticket. Error %d", SYMBOL_NAME, GetLastError());
    return;
    }
   
//--- チケットが正常に受信された場合、選択されたポジションの銘柄とチケットを操作ログに出力する
  PrintFormat("The position that is selected on the %s symbol has ticket %I64d", SYMBOL_NAME, ticket);
  /*
   結果:
  The position that is selected on the EURUSD symbol has ticket 2810846623
  */
 }

参照

PositionGetSymbol(), PositionsTotal(), ポジションプロパティ