取引関数


OrderCalcMargin

この関数は、現在未決算の注文と未決済ポジションを考慮せずに、現在の口座で、指定された注文の種類に現在の市場環境で必要な証拠金を預金通貨で計算します。これは、計画された取引操作のための証拠金の評価を可能にします。値は口座の預金通貨で返されます。

bool  OrderCalcMargin(
  ENUM_ORDER_TYPE      action,          // 注文の種類
  string                symbol,          // 銘柄名
  double                volume,          // ボリューム
  double                price,            // 始値
  double&               margin           // 証拠金取得に使用される変数
  );

パラメータ

action

[in] ENUM_ORDER_TYPE 列挙のいずれかの値を持つ注文の種類

symbol

[in]  銘柄名

volume

[in]  取引操作のボリューム

price

[in]  始値

margin

[out]  関数の実行が成功した場合にリクエストされた証拠金の値が配置される変数。計算は、現在未決算の注文と未決済ポジションを考慮せずに行われます。証拠金の値は多くの要因に依存し、市場環境によって異なることがあります。

戻り値

成功の場合は true、それ以外の場合は false。エラー情報を取得するには、GetLastError() 関数が呼ばれます。

参照

OrderSend()、注文プロパティ、取引操作の種類

OrderCalcProfit

この関数は、渡されたパラメータに基づいて、現在の銘柄での現在の口座の利益を計算します。これは、取引操作の結果の事前評価のために使用されます。値は口座の預金通貨で返されます。

bool  OrderCalcProfit(
  ENUM_ORDER_TYPE      action,          // 注文の種類 (ORDER_TYPE_BUY または ORDER_TYPE_SELL)
  string                symbol,          // 銘柄名
  double                volume,          // ボリューム
  double                price_open,      // 始値
  double                price_close,      // 終値
  double&               profit            // 利益値の取得に使用される変数
  );

パラメータ

動作

[in] ENUM_ORDER_TYPE 列挙のいずれか(ORDER_TYPE_BUY または ORDER_TYPE_SELL)の値を持つ注文の種類

symbol

[in]  銘柄名

ボリューム

[in]  取引操作のボリューム

price_open

[in]  始値

price_close

[in]  終値

profit

[out]  関数の実行が成功した場合に計算された利益の値を格納する変数。見積りされた利益の値は多くの要因に依存し、市場環境によって異なることがあります。

戻り値

成功の場合は true、それ以外の場合は false。無効な注文の種類が指定された場合、この関数はfalseを返します。エラー情報を取得するには GetLastError() 関数が呼ばれます。

参照

OrderSend()、注文プロパティ、取引操作の種類

OrderCheck

OrderCheck() 関数は、取引操作を実行するための充分な資金があるかをチェックします。チェックの結果は MqlTradeCheckResult 構造体のフィールドに配置されます。

bool  OrderCheck(
  MqlTradeRequest&      request,      // リクエスト構造体
  MqlTradeCheckResult&   result       // 結果構造体
  );

パラメータ

request

[in]  必要な取引アクションを記述する MqlTradeRequest 型の構造体へのポインタ

result

[in,out]  チェック結果が格納される MqlTradeCheckResult 型の構造体

戻り値

資金が足りない場合、またパラメータが不正な場合は false 。基本的な構造体チェック(ポインタチェック)が成功した場合は true 。しかし、これは、リクエストされた取引操作が確実に正常に実行されることの保障ではありません。関数実行結果の詳細には、result 構造体のフィールドが分析されるべきです。

エラー情報を取得するには GetLastError() 関数が呼ばれます。

参照

OrderSend()、取引操作の種類、取引リクエスト結果, リクエストチェック結果の構造体、取引リクエスト結果の構造体

OrderSend

OrderSend() 関数は取引操作の実行に使用され、リクエストを取引サーバに送信します。

bool  OrderSend(
  MqlTradeRequest&  request,      // 問の構造体
  MqlTradeResult&   result       // 答えの構造体
  );

パラメータ

request

[in]  クライエントの取引アクティビティを記述する MqlTradeRequest 型の構造体へのポインタ

result

[in,out]  成功した場合(true が返される場合)取引操作の結果を表す MqlTradeResult 型の構造体へのポインタ

戻り値

基本的な構造体チェック(ポインタチェック)が成功した場合、trueが戻されます。しかし、これは取引操作が成功することを表すものではありません。 関数実行結果の詳細には、result 構造体のフィールドが分析されるべきです。

注意事項

取引リクエストは、サーバ上で複数の段階を踏みます。初めに、request パラメータの必須のフィールドが正しく書き入れられているかどうかがチェックされます。エラーがない場合、サーバは、更なる処理のために注文を受け付けます。注文が正常に取引サーバによって受け入れられると、OrderSend() 関数が true を返します。

取引サーバに送信する前に、リクエストをチェックすることが推奨されます。リクエストをチェックするには OrderCheck() 関数が使用されます。それは、取引を実行するための充分な資金があるかをチェックし、複数の役立つパラメータを 取引リクエストチェックの結果に返します。

  • チェックされたリクエストに含まれるエラーの情報を含むリターンコード
  • 取引操作が実行された後に表示される残高値
  • 取引操作が実行された後に表示される株式価値
  • 取引操作が実行された後に表示される浮動小数点値
  • 取引操作に必要な証拠金
  • 取引操作が実行された後に残る自由資本の金額
  • 取引操作が実行された後に設定される証拠金レベル
  • 返信コードコメント(エラーの説明)

成行注文を送信する場合 (MqlTradeRequest.action=TRADE_ACTION_DEAL)、OrderSend() 関数の正常結果は、注文が実行されたことを意味しません。この場合、'true"によって意味されるのは、注文がその後の実行のために取引システムに正常に配置されたことだけです。トレードサーバーは、OrderSend()への応答を形成する場合にデータがある場合、返された結果構造体dealまたはorderフィールド値に書き入れます。一般に、注文に対応する取引を実行するイベントは、OrderSend() 呼び出しに対する応答を送信した後に発生する可能性があります。したがって、いずれの取引リクエストに対しても、OrderSend()の実行結果を受け取ったときには、まず、結果構造体retcode t取引サーバリレスポンスコードとretcode_external外部システムレスポンスコードを初めに確認するべきです。

受け入れられた注文は、実行に必要な条件の 1 つが準備出来るまで処理を待って取引サーバに格納されます。

  • 期限切れ
  • 反方向のリクエストの出現
  • 指定された実行価格が出現した場合の注文の実行
  • 注文を取り消すリクエストの受信

注文処理時に、取引サーバは端末に取引イベント発生についてのメッセージを送り、これは OnTrade() 関数で処理出来ます。

サーバ上で OrderSend() 関数で送られたリクエストを実行した結果は OnTradeTransaction ハンドラで追跡出来ます。1 つの取引リクエストを実行する際に OnTradeTransaction ハンドラは複数回呼ばれることには留意されるべきです。

例えば、市場の買い注文を送信する際に、注文が処理され、買い注文が口座に記録されます。その後注文が実行されオープン注文の表から削除されて注文履歴に追加されます。約定履歴に追加され新しいポジションが作成されます。OnTradeTransaction 関数はこれらのイベント全部に呼び出されます。

例:

//— ORDER_MAGIC の値
input long order_magic=55555;
//+——————————————————————+
//| スクリプトプログラムを開始する関数                                          |
//+——————————————————————+
void OnStart()
 {
//— これがデモ口座であることを確かめる
  if(AccountInfoInteger(ACCOUNT_TRADE_MODE)==ACCOUNT_TRADE_MODE_REAL)
    {
    Alert("Script operation is not allowed on a live account!");
    return;
    }
//— 注文を出すか削除する
  if(GetOrdersTotalByMagic(order_magic)==0)
    {
    //— 現在注文はないので、注文を出す
    uint res=SendRandomPendingOrder(order_magic);
    Print("Return code of the trade server ",res);
    }
  else // 注文があるので削除する
    {
     DeleteAllOrdersByMagic(order_magic);
    }
//—
 }
//+——————————————————————+
//| 指定された ORDER_MAGIC で現在の注文数を受け取る                          |
//+——————————————————————+
int GetOrdersTotalByMagic(long const magic_number)
 {
  ulong order_ticket;
  int total=0;
//— 未決注文を全部見る
  for(int i=0;i<OrdersTotal();i++)
    if((order_ticket=OrderGetTicket(i))>0)
        if(magic_number==OrderGetInteger(ORDER_MAGIC)) total++;
//—
  return(total);
 }
//+——————————————————————+
//| 指定された ORDER_MAGIC  の未決注文を全て作成する                         |
//+——————————————————————+
void DeleteAllOrdersByMagic(long const magic_number)
 {
  ulong order_ticket;
//— 未決注文を全部見る
  for(int i=OrdersTotal()-1;i>=0;i–)
    if((order_ticket=OrderGetTicket(i))>0)
        //— 適切な ORDER_MAGIC を持った注文
        if(magic_number==OrderGetInteger(ORDER_MAGIC))
          {
          MqlTradeResult result={0};
          MqlTradeRequest request={0};
           request.order=order_ticket;
           request.action=TRADE_ACTION_REMOVE;
          OrderSend(request,result);
          //— サーバ返答をログに書く
          Print(__FUNCTION__,": ",result.comment," reply code ",result.retcode);
          }
//—
 }
//+——————————————————————+
//| 未決注文をランダムに設定する                                            |
//+——————————————————————+
uint SendRandomPendingOrder(long const magic_number)
 {
//— リクエストを準備する
  MqlTradeRequest request={0};
  request.action=TRADE_ACTION_PENDING;         // 未決注文を設定する
  request.magic=magic_number;                 // ORDER_MAGIC
  request.symbol=_Symbol;                     // シンボル
  request.volume=0.1;                         // 0.1 ロットのボリューム
  request.sl=0;                               // 決済逆指の指定なし
  request.tp=0;                               // 決済指値の指定なし    
//— 注文の種類を形成する
  request.type=GetRandomType();               // 注文の種類
//— 未決注文の価格を形成する
  request.price=GetRandomPrice(request.type); // 始値
//— 取引リクエストを送る
  MqlTradeResult result={0};
  OrderSend(request,result);
//— サーバ返答をログに書く  
  Print(__FUNCTION__,":",result.comment);
  if(result.retcode==10016) Print(result.bid,result.ask,result.price);
//— 取引サーバの返答のコードを返す
  return result.retcode;
 }
//+——————————————————————+
//| 未決注文の種類をランダムに返す                                           |
//+——————————————————————+
ENUM_ORDER_TYPE GetRandomType()
 {
  int t=MathRand()%4;
//—   0<=t<4
  switch(t)
    {
    case(0):return(ORDER_TYPE_BUY_LIMIT);
    case(1):return(ORDER_TYPE_SELL_LIMIT);
    case(2):return(ORDER_TYPE_BUY_STOP);
    case(3):return(ORDER_TYPE_SELL_STOP);
    }
//— 不正な値
  return(WRONG_VALUE);
 }
//+——————————————————————+
//| ランダムな価格を返す                                                   |
//+——————————————————————+
double GetRandomPrice(ENUM_ORDER_TYPE type)
 {
  int t=(int)type;
//— シンボルのストップレベル
  int distance=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
//— 最終ティックのデータを受け取る
  MqlTick last_tick={0};
  SymbolInfoTick(_Symbol,last_tick);
//— 種類に応じて価格を計算する
  double price;
  if(t==2 || t==5) // ORDER_TYPE_BUY_LIMIT または ORDER_TYPE_SELL_STOP
    {
     price=last_tick.bid; // 買値から離れる
     price=price-(distance+(MathRand()%10)*5)*_Point;
    }
  else             // ORDER_TYPE_SELL_LIMIT または ORDER_TYPE_BUY_STOP
    {
     price=last_tick.ask; // 売値から離れる
     price=price+(distance+(MathRand()%10)*5)*_Point;
    }
//—
  return(price);
 }

参照

取引操作の種類、取引リクエストの構造体、リクエストチェック結果の構造体、取引リクエスト結果の構造体

OrderSendAsync

OrderSendAsync() 関数は、取引サーバの返答を待たずに非同期的な 取引操作を行うための リクエストの送信に使用されます。この関数は、サーバからの応答を待つ時間の無駄を容認出来ない取引アルゴリズムの条件下での高頻度取引のために設計されています。

bool  OrderSendAsync(
  MqlTradeRequest&  request,      // リクエスト構造体
  MqlTradeResult&   result       // 返答構造体
  );

パラメータ

request

[in]  クライエントの取引アクションを記述する MqlTradeRequest 型の構造体へのポインタ

result

[in,out]  成功した場合(true が返される場合)取引操作の結果を表す MqlTradeResult 型の構造体へのポインタ

戻り値

リクエストが取引サーバに送信された場合は true、それ以外の場合は false。リクエストが送信された場合 result 変数内で、レスポンスコードが TRADE_RETCODE_PLACED 値(コード 10008– order placed(注文が出された))を含みます。正常な実行は送信の事実のみを意味し、リクエストが取引サーバに到達し処理のために受け入れられている保証を与えるものではありません。受信したリクエストを処理する際、取引サーバは、ポジション、注文や約定の状態の変化を通知する応答をクライアント端末に送信し、これが Trade イベント生成につながります。

OrderSend() 関数で送られたリクエストをサーバ上で 実行した結果は OnTradeTransaction ハンドラで追跡出来ます。1 つの取引リクエストを実行する際に OnTradeTransaction ハンドラは複数回呼ばれることには留意されるべきです。

例えば、市場の買い注文を送信する際に、注文が処理され、買い注文が口座に記録されます。その後注文が実行されオープン注文の表から削除されて注文履歴に追加されます。約定履歴に追加され新しいポジションが作成されます。OnTradeTransaction 関数はこれらのイベント全部に呼び出されます。この様なデータの取得には、関数パラメータが分析されるべきです。

  • trans – このパラメータは取引口座に適用される取引トランザクションを記述する MqlTradeTransaction 構造体を取得します。
  • request – このパラメータは取引トランザクションにつながった取引リクエストを記述する MqlTradeRequest 構造体を取得します。
  • result – このパラメータは取引リクエスト実行の結果を記述する MqlTradeResult 構造体を取得します。

注意事項

パラメータの用途の点では、この関数は OrderSend() に似ていますが、それとは異なって非同期的です。つまり、関数の実行結果を待っている間にプログラム動作は止められません。サンプルのエキスパートアドバイザーを使用して、これら 2 つの関数の取引操作の速度を比較することが出来ます。

例:

#property description "Expert Advisor for sending trade requests "
                    " using OrderSendAsync() function.\r\n"
#property description "Handling trading events using"
                    " OnTrade() and OnTradeTransaction() handler functions is displayed\r\n"
#property description "Expert Advisor parameters allow setting Magic Number"
                    " (unique ID) "
#property description "and the mode of displaying messages in Experts log. All details are displayed by default.\r\n"
//— 入力パラメータ
input int MagicNumber=1234567;     // エキスパートアドバイザー ID
input bool DescriptionModeFull=true; // 詳細出力モード
//— HistorySelect() 呼び出しに使用される変数
datetime history_start;
//+——————————————————————+
//| エキスパート初期化に使用される関数                                        |
//+——————————————————————+
int OnInit()
 {
//— 自動売買が許可されているかどうかをチェックする
  if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
    {
    Alert("Autotrading in the terminal is disabled, Expert Advisor will be removed.");
    ExpertRemove();
    return(-1);
    }
//— 実際の口座での取引が不可能
  if(AccountInfoInteger(ACCOUNT_TRADE_MODE)==ACCOUNT_TRADE_MODE_REAL)
    {
    Alert("Expert Advisor cannot trade on a real account!");
    ExpertRemove();
    return(-2);
    }
//— この口座で取引が可能かどうかをみる(例えば、投資家のパスワードを使用しての取引は不可能)
  if(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED))
    {
    Alert("Trading on this account is disabled");
    ExpertRemove();
    return(-3);
    }
//— 取引履歴を受信するためにエキスパートアドバイザーを起動する時間を節約する
  history_start=TimeCurrent();
//—
  CreateBuySellButtons();
  return(INIT_SUCCEEDED);
 }
//+——————————————————————+
//| エキスパート初期化解除に使用される関数                                    |
//+——————————————————————+
void OnDeinit(const int reason)
 {
//— 全てのグラフィックオブジェクトを削除する
  ObjectDelete(0,"Buy");
  ObjectDelete(0,"Sell");
//—
 }
//+——————————————————————+
//| TradeTransaction 関数                                             |
//+——————————————————————+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                      const MqlTradeRequest &request,
                      const MqlTradeResult &result)
 {
//— 取引イベントのハンドラ関数名にちなんだ名付け見出し
  Print("=> ",__FUNCTION__," at ",TimeToString(TimeCurrent(),TIME_SECONDS));
//— トランザクションタイプを列挙値として取得する
  ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//— トランザクションがリクエスト処理の結果の場合
  if(type==TRADE_TRANSACTION_REQUEST)
    {
    //— トランザクション名を表示する
    Print(EnumToString(type));
    //— 処理されたリクエストを記述する文字列を表示する
    Print("————RequestDescription\r\n",
           RequestDescription(request,DescriptionModeFull));
    //— そしてリクエスト結果の記述を表示する
    Print("———— ResultDescription\r\n",
           TradeResultDescription(result,DescriptionModeFull));
    }
  else // トランザクションの他のトランザクションのための完全な記述を表示する
    {
    Print("———— TransactionDescription\r\n",
           TransactionDescription(trans,DescriptionModeFull));
    }
//—    
 }
//+——————————————————————+
//| 取引関数                                                          |
//+——————————————————————+
void OnTrade()
 {
//— 取引口座の状態を格納する静的メンバ
  static int prev_positions=0,prev_orders=0,prev_deals=0,prev_history_orders=0;
//— 取引履歴をリクエストする
  bool update=HistorySelect(history_start,TimeCurrent());
  PrintFormat("HistorySelect(%s , %s) = %s",
              TimeToString(history_start),TimeToString(TimeCurrent()),(string)update);
//— 取引イベントのハンドラ関数名にちなんだ名付け見出し
  Print("=> ",__FUNCTION__," at ",TimeToString(TimeCurrent(),TIME_SECONDS));
//— ハンドラの名称と処理の瞬間の注文数を表示する
  int curr_positions=PositionsTotal();
  int curr_orders=OrdersTotal();
  int curr_deals=HistoryOrdersTotal();
  int curr_history_orders=HistoryDealsTotal();
//— 注文、ポジション、及び約定の数、またカッコ内に変更を表示
  PrintFormat("PositionsTotal() = %d (%+d)",
              curr_positions,(curr_positions-prev_positions));
  PrintFormat("OrdersTotal() = %d (%+d)",
              curr_orders,curr_orders-prev_orders);
  PrintFormat("HistoryOrdersTotal() = %d (%+d)",
              curr_deals,curr_deals-prev_deals);
  PrintFormat("HistoryDealsTotal() = %d (%+d)",
              curr_history_orders,curr_history_orders-prev_history_orders);
//— ログをより便利に表示する文字列の区切りを挿入する
  Print("");
//— 口座の状態を保存する
  prev_positions=curr_positions;
  prev_orders=curr_orders;
  prev_deals=curr_deals;
  prev_history_orders=curr_history_orders;
//—
 }
//+——————————————————————+
//| ChartEvent 関数                                                   |
//+——————————————————————+
void OnChartEvent(const int id,
                const long &lparam,
                const double &dparam,
                const string &sparam)
 {
//— CHARTEVENT_CLICK イベント(「チャートクリック」)の処理
  if(id==CHARTEVENT_OBJECT_CLICK)
    {
    Print("=> ",__FUNCTION__,": sparam = ",sparam);
    //—約定の最小ボリューム
    double volume_min=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
    //— 「Buy」 ボタンが押されたら、買う
    if(sparam=="Buy")
       {
        PrintFormat("Buy %s %G lot",_Symbol,volume_min);
        BuyAsync(volume_min);
        //— ボタンを放す
        ObjectSetInteger(0,"Buy",OBJPROP_STATE,false);
       }
    //— 「Sell」ボタンが押されたら、売る
    if(sparam=="Sell")
       {
        PrintFormat("Sell %s %G lot",_Symbol,volume_min);
        SellAsync(volume_min);
        //— ボタンを放す
        ObjectSetInteger(0,"Sell",OBJPROP_STATE,false);
       }
    ChartRedraw();
    }
//—        
 }
//+——————————————————————+
//| トランザクションの記述を文字列として返す                                     |
//+——————————————————————+
string TransactionDescription(const MqlTradeTransaction &trans,
                            const bool detailed=true)
 {
//— 関数が返す文字列を準備する
  string desc=EnumToString(trans.type)+"\r\n";
//— detailed(繊細)モードでは繊細が全て追加される
  if(detailed)
    {
     desc+="Symbol: "+trans.symbol+"\r\n";
     desc+="Deal ticket: "+(string)trans.deal+"\r\n";
     desc+="Deal type: "+EnumToString(trans.deal_type)+"\r\n";
     desc+="Order ticket: "+(string)trans.order+"\r\n";
     desc+="Order type: "+EnumToString(trans.order_type)+"\r\n";
     desc+="Order state: "+EnumToString(trans.order_state)+"\r\n";
     desc+="Order time type: "+EnumToString(trans.time_type)+"\r\n";
     desc+="Order expiration: "+TimeToString(trans.time_expiration)+"\r\n";
     desc+="Price: "+StringFormat("%G",trans.price)+"\r\n";
     desc+="Price trigger: "+StringFormat("%G",trans.price_trigger)+"\r\n";
     desc+="Stop Loss: "+StringFormat("%G",trans.price_sl)+"\r\n";
     desc+="Take Profit: "+StringFormat("%G",trans.price_tp)+"\r\n";
     desc+="Volume: "+StringFormat("%G",trans.volume)+"\r\n";
    }
//— 受信された文字列を返す
  return desc;
 }
//+——————————————————————+
//| 取引リクエストのテキスト記述を返す                                         |
//+——————————————————————+
string RequestDescription(const MqlTradeRequest &request,
                        const bool detailed=true)
 {
//— 関数が返す文字列を準備する
  string desc=EnumToString(request.action)+"\r\n";
//— detailed(繊細)モードでは、使用可能のデータを全て追加する
  if(detailed)
    {
     desc+="Symbol: "+request.symbol+"\r\n";
     desc+="Magic Number: "+StringFormat("%d",request.magic)+"\r\n";
     desc+="Order ticket: "+(string)request.order+"\r\n";
     desc+="Order type: "+EnumToString(request.type)+"\r\n";
     desc+="Order filling: "+EnumToString(request.type_filling)+"\r\n";
     desc+="Order time type: "+EnumToString(request.type_time)+"\r\n";
     desc+="Order expiration: "+TimeToString(request.expiration)+"\r\n";
     desc+="Price: "+StringFormat("%G",request.price)+"\r\n";
     desc+="Deviation points: "+StringFormat("%G",request.deviation)+"\r\n";
     desc+="Stop Loss: "+StringFormat("%G",request.sl)+"\r\n";
     desc+="Take Profit: "+StringFormat("%G",request.tp)+"\r\n";
     desc+="Stop Limit: "+StringFormat("%G",request.stoplimit)+"\r\n";
     desc+="Volume: "+StringFormat("%G",request.volume)+"\r\n";
     desc+="Comment: "+request.comment+"\r\n";
    }
//— 受信された文字列を返す
  return desc;
 }
//+——————————————————————+
//| リクエスト処理結果の記述ををテキスト形式で返す                                |
//+——————————————————————+
string TradeResultDescription(const MqlTradeResult &result,
                            const bool detailed=true)
 {
//— 関数が返す文字列を準備する
  string desc="Retcode "+(string)result.retcode+"\r\n";
//— detailed(繊細)モードでは、使用可能のデータを全て追加する
  if(detailed)
    {
     desc+="Request ID: "+StringFormat("%d",result.request_id)+"\r\n";
     desc+="Order ticket: "+(string)result.order+"\r\n";
     desc+="Deal ticket: "+(string)result.deal+"\r\n";
     desc+="Volume: "+StringFormat("%G",result.volume)+"\r\n";
     desc+="Price: "+StringFormat("%G",result.price)+"\r\n";
     desc+="Ask: "+StringFormat("%G",result.ask)+"\r\n";
     desc+="Bid: "+StringFormat("%G",result.bid)+"\r\n";
     desc+="Comment: "+result.comment+"\r\n";
    }
//— 受信された文字列を返す
  return desc;
 }
//+——————————————————————+
//| 売買に必要な 2 つのボタンを作成する                                       |
//+——————————————————————+
void CreateBuySellButtons()
 {
//— 「Buy」オブジェクトをチェックする
  if(ObjectFind(0,"Buy")>=0)
    {
    //— 見つかったオブジェクトがボタンでない場合は削除する
    if(ObjectGetInteger(0,"Buy",OBJPROP_TYPE)!=OBJ_BUTTON)
        ObjectDelete(0,"Buy");
    }
  else
    ObjectCreate(0,"Buy",OBJ_BUTTON,0,0,0); // 「Buy」 ボタンを作成する
//— 「Buy」 ボタンを設定する
  ObjectSetInteger(0,"Buy",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
  ObjectSetInteger(0,"Buy",OBJPROP_XDISTANCE,100);
  ObjectSetInteger(0,"Buy",OBJPROP_YDISTANCE,50);
  ObjectSetInteger(0,"Buy",OBJPROP_XSIZE,70);
  ObjectSetInteger(0,"Buy",OBJPROP_YSIZE,30);
  ObjectSetString(0,"Buy",OBJPROP_TEXT,"Buy");
  ObjectSetInteger(0,"Buy",OBJPROP_COLOR,clrRed);
//— 「Sell」オブジェクトの存在をチェックする
  if(ObjectFind(0,"Sell")>=0)
    {
    //— 見つかったオブジェクトがボタンでない場合は削除する
    if(ObjectGetInteger(0,"Sell",OBJPROP_TYPE)!=OBJ_BUTTON)
        ObjectDelete(0,"Sell");
    }
  else
    ObjectCreate(0,"Sell",OBJ_BUTTON,0,0,0); // 「 Sell 」ボタンを作成する
//— 「Sell」 ボタンを設定する
  ObjectSetInteger(0,"Sell",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
  ObjectSetInteger(0,"Sell",OBJPROP_XDISTANCE,100);
  ObjectSetInteger(0,"Sell",OBJPROP_YDISTANCE,100);
  ObjectSetInteger(0,"Sell",OBJPROP_XSIZE,70);
  ObjectSetInteger(0,"Sell",OBJPROP_YSIZE,30);
  ObjectSetString(0,"Sell",OBJPROP_TEXT,"Sell");
  ObjectSetInteger(0,"Sell",OBJPROP_COLOR,clrBlue);
//— ボタンをすぐに表示するためにチャートの強制アップデートを実行する
  ChartRedraw();
//—
 }
//+——————————————————————+
//| OrderSendAsync() 非同期的関数を使用して買う                            |
//+——————————————————————+
void BuyAsync(double volume)
 {
//— リクエストを準備する
  MqlTradeRequest req={0};
  req.action      =TRADE_ACTION_DEAL;
  req.symbol      =_Symbol;
  req.magic       =MagicNumber;
  req.volume      =0.1;
  req.type        =ORDER_TYPE_BUY;
  req.price       =SymbolInfoDouble(req.symbol,SYMBOL_ASK);
  req.deviation   =10;
  req.comment     ="Buy using OrderSendAsync()";
  MqlTradeResult  res={0};
  if(!OrderSendAsync(req,res))
    {
    Print(__FUNCTION__,": error ",GetLastError(),", retcode = ",res.retcode);
    }
//—
 }
//+——————————————————————+
//| OrderSendAsync() 非同期的関数を使用して売る                            |
//+——————————————————————+
void SellAsync(double volume)
 {
//— リクエストを準備する
  MqlTradeRequest req={0};
  req.action      =TRADE_ACTION_DEAL;
  req.symbol      =_Symbol;
  req.magic       =MagicNumber;
  req.volume      =0.1;
  req.type        =ORDER_TYPE_SELL;
  req.price       =SymbolInfoDouble(req.symbol,SYMBOL_BID);
  req.deviation   =10;
  req.comment     ="Sell using OrderSendAsync()";
  MqlTradeResult  res={0};
  if(!OrderSendAsync(req,res))
    {
    Print(__FUNCTION__,": error ",GetLastError(),", retcode = ",res.retcode);
    }
//—
 }
//+——————————————————————+

「エキスパート」操作ログでのメッセージ表示の例:

12:52:52   ExpertAdvisor (EURUSD,H1)   => OnChartEvent: sparam = Sell
12:52:52   ExpertAdvisor (EURUSD,H1)   Sell EURUSD 0.01 lot
12:52:52   ExpertAdvisor (EURUSD,H1)   => OnTradeTransaction at 09:52:53
12:52:52   ExpertAdvisor (EURUSD,H1)   TRADE_TRANSACTION_REQUEST
12:52:52   ExpertAdvisor (EURUSD,H1)   ————RequestDescription
12:52:52   ExpertAdvisor (EURUSD,H1)   TRADE_ACTION_DEAL
12:52:52   ExpertAdvisor (EURUSD,H1)   Symbol: EURUSD
12:52:52   ExpertAdvisor (EURUSD,H1)   Magic Number: 1234567
12:52:52   ExpertAdvisor (EURUSD,H1)   Order ticket: 16361998
12:52:52   ExpertAdvisor (EURUSD,H1)   Order type: ORDER_TYPE_SELL
12:52:52   ExpertAdvisor (EURUSD,H1)   Order filling: ORDER_FILLING_FOK
12:52:52   ExpertAdvisor (EURUSD,H1)   Order time type: ORDER_TIME_GTC
12:52:52   ExpertAdvisor (EURUSD,H1)   Order expiration: 1970.01.01 00:00
12:52:52   ExpertAdvisor (EURUSD,H1)   Price: 1.29313
12:52:52   ExpertAdvisor (EURUSD,H1)   Deviation points: 10
12:52:52   ExpertAdvisor (EURUSD,H1)   Stop Loss: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Take Profit: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Stop Limit: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Volume: 0.1
12:52:52   ExpertAdvisor (EURUSD,H1)   Comment: Sell using OrderSendAsync()
12:52:52   ExpertAdvisor (EURUSD,H1)  
12:52:52   ExpertAdvisor (EURUSD,H1)   ———— ResultDescription
12:52:52   ExpertAdvisor (EURUSD,H1)   Retcode 10009
12:52:52   ExpertAdvisor (EURUSD,H1)   Request ID: 2
12:52:52   ExpertAdvisor (EURUSD,H1)   Order ticket: 16361998
12:52:52   ExpertAdvisor (EURUSD,H1)   Deal ticket: 15048668
12:52:52   ExpertAdvisor (EURUSD,H1)   Volume: 0.1
12:52:52   ExpertAdvisor (EURUSD,H1)   Price: 1.29313
12:52:52   ExpertAdvisor (EURUSD,H1)   Ask: 1.29319
12:52:52   ExpertAdvisor (EURUSD,H1)   Bid: 1.29313
12:52:52   ExpertAdvisor (EURUSD,H1)   Comment:
12:52:52   ExpertAdvisor (EURUSD,H1)  
12:52:52   ExpertAdvisor (EURUSD,H1)   HistorySelect( 09:34 , 09:52) = true
12:52:52   ExpertAdvisor (EURUSD,H1)   => OnTrade at 09:52:53
12:52:52   ExpertAdvisor (EURUSD,H1)   PositionsTotal() = 1 (+1)
12:52:52   ExpertAdvisor (EURUSD,H1)   OrdersTotal() = 0 (+0)
12:52:52   ExpertAdvisor (EURUSD,H1)   HistoryOrdersTotal() = 2 (+2)
12:52:52   ExpertAdvisor (EURUSD,H1)   HistoryDealsTotal() = 2 (+2)
12:52:52   ExpertAdvisor (EURUSD,H1)  
12:52:52   ExpertAdvisor (EURUSD,H1)   => OnTradeTransaction at 09:52:53
12:52:52   ExpertAdvisor (EURUSD,H1)   ———— TransactionDescription
12:52:52   ExpertAdvisor (EURUSD,H1)   TRADE_TRANSACTION_ORDER_ADD
12:52:52   ExpertAdvisor (EURUSD,H1)   Symbol: EURUSD
12:52:52   ExpertAdvisor (EURUSD,H1)   Deal ticket: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Deal type: DEAL_TYPE_BUY
12:52:52   ExpertAdvisor (EURUSD,H1)   Order ticket: 16361998
12:52:52   ExpertAdvisor (EURUSD,H1)   Order type: ORDER_TYPE_SELL
12:52:52   ExpertAdvisor (EURUSD,H1)   Order state: ORDER_STATE_STARTED
12:52:52   ExpertAdvisor (EURUSD,H1)   Order time type: ORDER_TIME_GTC
12:52:52   ExpertAdvisor (EURUSD,H1)   Order expiration: 1970.01.01 00:00
12:52:52   ExpertAdvisor (EURUSD,H1)   Price: 1.29313
12:52:52   ExpertAdvisor (EURUSD,H1)   Price trigger: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Stop Loss: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Take Profit: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Volume: 0.1
12:52:52   ExpertAdvisor (EURUSD,H1)  
12:52:52   ExpertAdvisor (EURUSD,H1)   => OnTradeTransaction at 09:52:53
12:52:52   ExpertAdvisor (EURUSD,H1)   ———— TransactionDescription
12:52:52   ExpertAdvisor (EURUSD,H1)   TRADE_TRANSACTION_ORDER_DELETE
12:52:52   ExpertAdvisor (EURUSD,H1)   Symbol: EURUSD
12:52:52   ExpertAdvisor (EURUSD,H1)   Deal ticket: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Deal type: DEAL_TYPE_BUY
12:52:52   ExpertAdvisor (EURUSD,H1)   Order ticket: 16361998
12:52:52   ExpertAdvisor (EURUSD,H1)   Order type: ORDER_TYPE_SELL
12:52:52   ExpertAdvisor (EURUSD,H1)   Order state: ORDER_STATE_STARTED
12:52:52   ExpertAdvisor (EURUSD,H1)   Order time type: ORDER_TIME_GTC
12:52:52   ExpertAdvisor (EURUSD,H1)   Order expiration: 1970.01.01 00:00
12:52:52   ExpertAdvisor (EURUSD,H1)   Price: 1.29313
12:52:52   ExpertAdvisor (EURUSD,H1)   Price trigger: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Stop Loss: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Take Profit: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Volume: 0.1
12:52:52   ExpertAdvisor (EURUSD,H1)  
12:52:52   ExpertAdvisor (EURUSD,H1)   HistorySelect( 09:34 , 09:52) = true
12:52:52   ExpertAdvisor (EURUSD,H1)   => OnTrade at 09:52:53
12:52:52   ExpertAdvisor (EURUSD,H1)   PositionsTotal() = 1 (+0)
12:52:52   ExpertAdvisor (EURUSD,H1)   OrdersTotal() = 0 (+0)
12:52:52   ExpertAdvisor (EURUSD,H1)   HistoryOrdersTotal() = 2 (+0)
12:52:52   ExpertAdvisor (EURUSD,H1)   HistoryDealsTotal() = 2 (+0)
12:52:52   ExpertAdvisor (EURUSD,H1)  
12:52:52   ExpertAdvisor (EURUSD,H1)   => OnTradeTransaction at 09:52:53
12:52:52   ExpertAdvisor (EURUSD,H1)   ———— TransactionDescription
12:52:52   ExpertAdvisor (EURUSD,H1)   TRADE_TRANSACTION_HISTORY_ADD
12:52:52   ExpertAdvisor (EURUSD,H1)   Symbol: EURUSD
12:52:52   ExpertAdvisor (EURUSD,H1)   Deal ticket: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Deal type: DEAL_TYPE_BUY
12:52:52   ExpertAdvisor (EURUSD,H1)   Order ticket: 16361998
12:52:52   ExpertAdvisor (EURUSD,H1)   Order type: ORDER_TYPE_SELL
12:52:52   ExpertAdvisor (EURUSD,H1)   Order state: ORDER_STATE_FILLED
12:52:52   ExpertAdvisor (EURUSD,H1)   Order time type: ORDER_TIME_GTC
12:52:52   ExpertAdvisor (EURUSD,H1)   Order expiration: 1970.01.01 00:00
12:52:52   ExpertAdvisor (EURUSD,H1)   Price: 1.29313
12:52:52   ExpertAdvisor (EURUSD,H1)   Price trigger: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Stop Loss: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Take Profit: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Volume: 0
12:52:52   ExpertAdvisor (EURUSD,H1)  
12:52:52   ExpertAdvisor (EURUSD,H1)   HistorySelect( 09:34 , 09:52) = true
12:52:52   ExpertAdvisor (EURUSD,H1)   => OnTrade at 09:52:53
12:52:52   ExpertAdvisor (EURUSD,H1)   PositionsTotal() = 1 (+0)
12:52:52   ExpertAdvisor (EURUSD,H1)   OrdersTotal() = 0 (+0)
12:52:52   ExpertAdvisor (EURUSD,H1)   HistoryOrdersTotal() = 2 (+0)
12:52:52   ExpertAdvisor (EURUSD,H1)   HistoryDealsTotal() = 2 (+0)
12:52:52   ExpertAdvisor (EURUSD,H1)  
12:52:52   ExpertAdvisor (EURUSD,H1)   => OnTradeTransaction at 09:52:53
12:52:52   ExpertAdvisor (EURUSD,H1)   ———— TransactionDescription
12:52:52   ExpertAdvisor (EURUSD,H1)   TRADE_TRANSACTION_DEAL_ADD
12:52:52   ExpertAdvisor (EURUSD,H1)   Symbol: EURUSD
12:52:52   ExpertAdvisor (EURUSD,H1)   Deal ticket: 15048668
12:52:52   ExpertAdvisor (EURUSD,H1)   Deal type: DEAL_TYPE_SELL
12:52:52   ExpertAdvisor (EURUSD,H1)   Order ticket: 16361998
12:52:52   ExpertAdvisor (EURUSD,H1)   Order type: ORDER_TYPE_BUY
12:52:52   ExpertAdvisor (EURUSD,H1)   Order state: ORDER_STATE_STARTED
12:52:52   ExpertAdvisor (EURUSD,H1)   Order time type: ORDER_TIME_GTC
12:52:52   ExpertAdvisor (EURUSD,H1)   Order expiration: 1970.01.01 00:00
12:52:52   ExpertAdvisor (EURUSD,H1)   Price: 1.29313
12:52:52   ExpertAdvisor (EURUSD,H1)   Price trigger: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Stop Loss: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Take Profit: 0
12:52:52   ExpertAdvisor (EURUSD,H1)   Volume: 0.1
12:52:52   ExpertAdvisor (EURUSD,H1)  
12:52:52   ExpertAdvisor (EURUSD,H1)   HistorySelect( 09:34 , 09:52) = true
12:52:52   ExpertAdvisor (EURUSD,H1)   => OnTrade at 09:52:53
12:52:52   ExpertAdvisor (EURUSD,H1)   PositionsTotal() = 1 (+0)
12:52:52   ExpertAdvisor (EURUSD,H1)   OrdersTotal() = 0 (+0)
12:52:52   ExpertAdvisor (EURUSD,H1)   HistoryOrdersTotal() = 2 (+0)
12:52:52   ExpertAdvisor (EURUSD,H1)   HistoryDealsTotal() = 2 (+0)
12:52:52   ExpertAdvisor (EURUSD,H1)  

PositionsTotal

未決済ポジションの数を返します。

int  PositionsTotal();

戻り値

int 型の値

注意事項

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

ポジションに制限がない場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)各シンボルごとに同時に複数のポジションを保有することができます。

参照

PositionGetSymbol()、PositionSelect()、ポジションプロパティ

PositionGetSymbol

未決済ポジションに対応するシンボルを返し、PositionGetDouble、PositionGetInteger、PositionGetString 関数を使用しての操作のために自動的にポジションを選択します。

string  PositionGetSymbol(
  int  index      // ポジションリスト内の番号
  );

パラメータ

index

[in]  未決済ポジションリスト内での番号

戻り値

string 型の変数ポジションが見つからなかった場合、空の文字列 が戻されます。エラーコード取得には GetLastError() 関数が呼ばれます。

注意事項

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

ポジションに制限がない場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)各シンボルごとに同時に複数のポジションを保有することができます。

参照

PositionsTotal()、PositionSelect()、ポジションプロパティ

PositionSelect

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

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

パラメータ

symbol

[in]  金融商品の名称。

戻り値

bool型の値。

注意事項

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

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

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

こちらも同様にご覧ください。

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

PositionSelectByTicket

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

bool  PositionSelectByTicket(
  ulong  ticket     // ポジションチケット
  );

パラメータ

ticket

[in]  ポジションチケット。

戻り値

bool型の値。

注意事項

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

こちらも同様にご覧ください。

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

PositionGetDouble

この関数は PositionGetSymbol または PositionSelect で事前に選択された未決済ポジションのリクエストされたプロパティを返します。ポジションプロパティは double 型でなければなりません。この関数には 2 つのバージョンがあります。

1. すぐにプロパティ値を返します。

double  PositionGetDouble(
  ENUM_POSITION_PROPERTY_DOUBLE  property_id      // プロパティ識別子
  );

2. 関数実行の成功に応じて true または false を返す。成功した場合、プロパティの値は、参照によって渡された最後のパラメータに配置される。

bool  PositionGetDouble(
  ENUM_POSITION_PROPERTY_DOUBLE  property_id,     // プロパティ識別子
  double&                        double_var      // プロパティ値を受け取る
  );

パラメータ

property_id

[in]  ポジションプロパティの識別子。値は ENUM_POSITION_PROPERTY_DOUBLE 列挙のいずれかです。

double_var

[out]  リクエストされたプロパティの値を受け取るdouble 型の変数

戻り値

double 型の値(関数が失敗した場合は 0 )

注意事項

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

ポジションに制限がない場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)各シンボルごとに同時に複数のポジションを保有することができます。

取得したポジション情報が最新であるように、PositionSelect() を参照直前に呼び出すことが推奨されています。

参照

PositionGetSymbol()、PositionSelect()、ポジションプロパティ

PositionGetInteger

この関数は PositionGetSymbol または PositionSelect で事前に選択された未決済ポジションのリクエストされたプロパティを返します。ポジションプロパティは datetime または int 型でなければいけません。この関数には 2 つのバージョンがあります。

1. すぐにプロパティ値を返します。

long  PositionGetInteger(
  ENUM_POSITION_PROPERTY_INTEGER  property_id      // プロパティ識別子
  );

2. 関数実行の成功に応じて true または false を返す。成功した場合、プロパティの値は、参照によって渡された最後のパラメータに配置されます。

bool  PositionGetInteger(
  ENUM_POSITION_PROPERTY_INTEGER  property_id,     // プロパティ識別子
  long&                          long_var        // プロパティ値を受け取る
  );

パラメータ

property_id

[in]  ポジションプロパティの識別子。値は ENUM_POSITION_PROPERTY_INTEGER 列挙のいずれかです。

long_var

[out]  リクエストされたプロパティの値を受け取る long 型の変数

戻り値

long 型の値(関数が失敗した場合は 0 )

注意事項

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

ポジションに制限がない場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)各シンボルごとに同時に複数のポジションを保有することができます。

取得したポジション情報が最新であるように、PositionSelect() を参照直前に呼び出すことが推奨されています。

例:

//+——————————————————————+
//| 取引関数                                                          |
//+——————————————————————+
void OnTrade()
 {
//— ポジションが存在するかどうかをチェックし、変化の時刻を表示する
  if(PositionSelect(_Symbol))
    {    
//— 更に操作するためにポジション識別子を受け取る
    ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER);
    Print(_Symbol," position #",position_ID);
//— 01.01.1970 から経過したミリ秒で表されたポジション形成の時刻を受け取る
    long create_time_msc=PositionGetInteger(POSITION_TIME_MSC);
    PrintFormat("Position #%d  POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID,
                 create_time_msc,TimeToString(create_time_msc/1000));
//— 01.01.1970 から経過した秒数で表されたポジションの最終変化時刻を受け取る
    long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE);
    PrintFormat("Position #%d  POSITION_TIME_UPDATE = %i64 seconds => %s",
                 position_ID,update_time_sec,TimeToString(update_time_sec));
//— 01.01.1970 から経過したミリ秒数で表されたポジションの最終変化時刻を受け取る
    long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC);
    PrintFormat("Position #%d  POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s",
                 position_ID,update_time_msc,TimeToString(update_time_msc/1000));
    }
//—
 }

参照

PositionGetSymbol()、PositionSelect()、ポジションプロパティ

PositionGetString

この関数は PositionGetSymbol または PositionSelect で事前に選択された未決済ポジションのリクエストされたプロパティを返します。ポジションプロパティは string 型でなければなりません。この関数には 2 つのバージョンがあります。

1. すぐにプロパティ値を返します。

string  PositionGetString(
  ENUM_POSITION_PROPERTY_STRING  property_id      // プロパティ識別子
  );

2. 関数実行の成功に応じて true または false を返す。成功した場合、プロパティの値は、参照によって渡された最後のパラメータに配置されます。

bool  PositionGetString(
  ENUM_POSITION_PROPERTY_STRING  property_id,     // プロパティ識別子
  string&                        string_var      // プロパティ値を受け取る
  );

パラメータ

property_id

[in]  ポジションプロパティの識別子。値は ENUM_POSITION_PROPERTY_STRING 列挙のいずれかです。

string_var

[out]  リクエストされたプロパティ値を受け取るstring 型の変数

戻り値

string 型の変数関数が失敗した場合、空の文字列 が戻されます。

注意事項

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

ポジションに制限がない場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)各シンボルごとに同時に複数のポジションを保有することができます。

取得したポジション情報が最新であるように、PositionSelect() を参照直前に呼び出すことが推奨されています。

参照

PositionGetSymbol()、PositionSelect()、ポジションプロパティ

PositionGetTicket

関数は保有ポジションの一覧のインデックスでポジションチケットを返し、PositionGetDouble、PositionGetInteger、PositionGetString関数を使用した今後の作業の為に自動的にこのポジションを選択します。

ulong  PositionGetTicket(
  int  index      // ポジション一覧の番号
  );

パラメータ

index

[in]  0から始まる保有ポジション一覧のポジションインデックス。

戻り値

ポジションチケット。実行に失敗した場合は、0を返します。

注意事項

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

ポジションに制限がない場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)各シンボルごとに同時に複数のポジションを保有することができます。

ポジションの最新データの取得を確実なものにする為には、直接PositionSelect()関数を適用前に呼び出すことをお勧めします。

こちらも同様にご覧ください。

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

OrdersTotal

現在の注文数を返します。

int  OrdersTotal();

戻り値

int 型の値

注意事項

現在の未決注文はクライアント端末の「ツールボックス」の「取引」タブに表示されているポジションと混乱されてはなりません。注文とはトランザクションを実行するリクエストです。ポジションは 1 つまたは複数の約定の結果です。

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

ポジションに制限がない場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)各シンボルごとに同時に複数のポジションを保有することができます。

参照

OrderSelect()、OrderGetTicket()、注文プロパティ

OrderGetTicket

さらに関数を使用して作業するための注文を自動的に選択して対応するチケットを返します。

ulong  OrderGetTicket(
  int  index      // 注文リスト内の番号
  );

パラメータ

index

[in]  現在の注文リスト内での注文の番号

戻り値

ulong 型の値(関数が失敗した場合は 0 )

注意事項

現在の未決注文はクライアント端末の「ツールボックス」の「取引」タブに表示されているポジションと混乱されてはなりません。注文とはトランザクションを実行するリクエストです。ポジションは 1 つまたは複数の約定の結果です。

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

ポジションに制限がない場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)各シンボルごとに同時に複数のポジションを保有することができます。

OrderGetTicket() 関数は、注文に関するデータをプログラム環境にコピーし、OrderGetDouble()、OrderGetInteger()、OrderGetString() の呼び出しは既に複製されたデータを返します。つまり、注文自体はもはや存在しなくても(または始値、決済逆指及び決済指レベルまたは期限が変更されても)、注文に関するデータはまだ取得することが出来ます。取得した注文情報が最新であるように、OrderGetTicket() を参照直前に呼び出すことが推奨されています。

例:

void OnStart()
 {
//— 注文プロパティから値を返す変数
  ulong    ticket;
  double   open_price;
  double   initial_volume;
  datetime time_setup;
  string   symbol;
  string   type;
  long     order_magic;
  long     positionID;
//— 現在の未決注文数
  uint     total=OrdersTotal();
//— ループで注文をみる
  for(uint i=0;i<total;i++)
    {
    //— リスト内の位置によって注文を返す
    if((ticket=OrderGetTicket(i))>0)
       {
        //— 注文プロパティを返す
        open_price    =OrderGetDouble(ORDER_PRICE_OPEN);
        time_setup    =(datetime)OrderGetInteger(ORDER_TIME_SETUP);
        symbol       =OrderGetString(ORDER_SYMBOL);
        order_magic   =OrderGetInteger(ORDER_MAGIC);
        positionID    =OrderGetInteger(ORDER_POSITION_ID);
        initial_volume=OrderGetDouble(ORDER_VOLUME_INITIAL);
        type          =EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE)));
        //— 注文についての情報を準備して表示する
        printf("#ticket %d %s %G %s at %G was set up at %s",
               ticket,                 // 注文チケット
               type,                   // 種類
               initial_volume,         // 注文のボリューム
               symbol,                 // シンボル
               open_price,             // 指定された始値
              TimeToString(time_setup)// 注文の出された時刻
               );
       }
    }
//—
 }

参照

OrdersTotal()、OrderSelect()、OrderGetInteger()

OrderSelect

操作に使用する注文を選択します。関数実行が成功した場合は true を返します。関数実行が失敗した場合 false を返します。更なるエラー情報を取得するには、GetLastError() が呼ばれます。

bool  OrderSelect(
  ulong  ticket      // 注文チケット
  );

パラメータ

ticket

[in]  注文チケット

戻り値

bool 型の値

注意事項

現在の未決注文はクライアント端末の「ツールボックス」の「取引」タブに表示されているポジションと混乱されてはなりません。

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

ポジションに制限がない場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)各シンボルごとに同時に複数のポジションを保有することができます。

OrderSelect() 関数は、注文に関するデータをプログラム環境にコピーし、OrderGetDouble()、OrderGetInteger()、OrderGetString() の呼び出しは既に複製されたデータを返します。つまり、注文自体はもはや存在しなくても(または始値、決済逆指及び決済指レベルまたは期限が変更されても)、注文に関するデータはまだ取得することが出来ます。取得した注文情報が最新であるように、OrderGetTicket() を参照直前に呼び出すことが推奨されています。

参照

OrderGetInteger()、OrderGetDouble()、OrderGetString()、OrderCalcProfit()、OrderGetTicket()、注文プロパティ

OrderGetDouble

OrderGetTicket または OrderSelectで事前に選択された注文のプロパティを返します。注文プロパティは double 型でなければなりません。この関数には 2 つのバージョンがあります。

1. すぐにプロパティ値を返します。

double  OrderGetDouble(
  ENUM_ORDER_PROPERTY_DOUBLE  property_id        // プロパティ識別子
  );

2. 関数の成功に応じて、true または false を返します。成功した場合、プロパティの値は、参照によって渡された最後のパラメータに配置されます。

bool  OrderGetDouble(
  ENUM_ORDER_PROPERTY_DOUBLE  property_id,       // プロパティ識別子
  double&                        double_var        // プロパティ値を受け取る
  );

パラメータ

property_id

[in]  注文プロパティの識別子。値は ENUM_ORDER_PROPERTY_DOUBLE 列挙のいずれかです。

double_var

[out]  リクエストされたプロパティの値を受け取るdouble 型の変数

戻り値

double 型の値(関数が失敗した場合は 0 )

注意事項

現在の未決注文はクライアント端末の「ツールボックス」の「取引」タブに表示されているポジションと混乱されてはなりません。

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

ポジションに制限がない場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)各シンボルごとに同時に複数のポジションを保有することができます。

取得した注文情報が最新であるように、OrderSelect() を参照直前に呼び出すことが推奨されています。

参照

OrdersTotal()、OrderGetTicket()、注文プロパティ

OrderGetInteger

OrderGetTicket または OrderSelect で事前に選択された注文のリクエストされたプロパティを返します。注文プロパティは datetime または int 型でなければいけません。この関数には 2 つのバージョンがあります。

1. すぐにプロパティ値を返します。

long  OrderGetInteger(
  ENUM_ORDER_PROPERTY_INTEGER  property_id        // プロパティ識別子
  );

2. 関数実行の成功に応じて true または false を返します。成功した場合、プロパティの値は、参照によって渡された最後のパラメータに配置されます。

bool  OrderGetInteger(
  ENUM_ORDER_PROPERTY_INTEGER  property_id,       // プロパティ識別子
  long&                        long_var          // プロパティ値を受け取る
  );

パラメータ

property_id

[in]  注文プロパティの識別子。値は ENUM_ORDER_PROPERTY_INTEGER 列挙のいずれかです。

long_var

[out]  リクエストされたプロパティの値を受け取る long 型の変数

戻り値

long 型の値(関数が失敗した場合は 0 )

注意事項

現在の未決注文はクライアント端末の「ツールボックス」の「取引」タブに表示されているポジションと混乱されてはなりません。

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

ポジションに制限がない場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)各シンボルごとに同時に複数のポジションを保有することができます。

取得した注文情報が最新であるように、OrderSelect() を参照直前に呼び出すことが推奨されています。

参照

OrdersTotal()、OrderGetTicket()、注文プロパティ

OrderGetString

OrderGetTicket または OrderSelect で事前に選択された注文のリクエストされたプロパティを返します。注文プロパティは string 型でなければなりません。この関数には 2 つのバージョンがあります。

1. すぐにプロパティ値を返します。

string  OrderGetString(
  ENUM_ORDER_PROPERTY_STRING  property_id        // プロパティ識別子
  );

2. 関数実行の成功に応じて true または false を返します。成功した場合、プロパティの値は、参照によって渡された最後のパラメータに配置されます。

bool  OrderGetString(
  ENUM_ORDER_PROPERTY_STRING  property_id,       // プロパティ識別子
  string&                    string_var        // プロパティ値を受け取る
  );

パラメータ

property_id

[in]  注文プロパティの識別子。値は ENUM_ORDER_PROPERTY_STRING 列挙のいずれかです。

string_var

[out] リクエストされたプロパティ値を受け取るstring 型の変数

戻り値

string 型の変数

注意事項

現在の未決注文はクライアント端末の「ツールボックス」の「取引」タブに表示されているポジションと混乱されてはなりません。

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

ポジションに制限がない場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)各シンボルごとに同時に複数のポジションを保有することができます。

取得した注文情報が最新であるように、OrderSelect() を参照直前に呼び出すことが推奨されています。

参照

OrdersTotal()、OrderGetTicket()、注文プロパティ

HistorySelect

指定されたサーバタイム期間の約定と注文履歴を取得します。

bool  HistorySelect(
  datetime  from_date,    // 開始日
  datetime  to_date        // 終了日
  );

パラメータ

from_date

[in]  リクエストの開始日

to_date

[in]  リクエストの終了日

戻り値

成功の場合は true、それ以外の場合は false

注意事項

HistorySelect() は MQL5 プログラムの注文と取引のリストを作成し、対応する関数での要素参照を可能にします。約定リストのサイズは HistoryDealsTotal() 関数、注文リストのサイズは HistoryOrdersTotal() 関数を使用して取得することが出来ます。注文リストでの選択には HistoryOrderGetTicket() が使用されるべきです。約定リストの要素には HistoryDealGetTicket() が適切です。

MQL5 プログラムで使用可能な注文履歴のリストは HistoryOrderSelect() の使用後にリセットされ、チケットによる注文の検索が成功した場合、見つかった注文で書き入れられます。MQL5 プログラムで使用可能な約定履歴のリストについても同じことが言えます。それは HistoryDealSelect() の使用後にリセットされ、チケットによる約定が受け取られた場合、それで書き込まれます。

例:

void OnStart()
 {
  color BuyColor =clrBlue;
  color SellColor=clrRed;
//— 取引履歴をリクエストする
  HistorySelect(0,TimeCurrent());
//— オブジェクトを作成する
  string   name;
  uint     total=HistoryDealsTotal();
  ulong    ticket=0;
  double   price;
  double   profit;
  datetime time;
  string   symbol;
  long     type;
  long     entry;
//— 全ての約定に対して
  for(uint i=0;i<total;i++)
    {
    //— 約定チケットの取得を試みる
    if((ticket=HistoryDealGetTicket(i))>0)
       {
        //— 約定プロパティを取得する
        price =HistoryDealGetDouble(ticket,DEAL_PRICE);
        time  =(datetime)HistoryDealGetInteger(ticket,DEAL_TIME);
        symbol=HistoryDealGetString(ticket,DEAL_SYMBOL);
        type  =HistoryDealGetInteger(ticket,DEAL_TYPE);
        entry =HistoryDealGetInteger(ticket,DEAL_ENTRY);
        profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
        //— 現在のシンボルのみ
        if(price && time && symbol==Symbol())
          {
          //— 価格オブジェクトを作成する
           name="TradeHistory_Deal_"+string(ticket);
          if(entry) ObjectCreate(0,name,OBJ_ARROW_RIGHT_PRICE,0,time,price,0,0);
          else     ObjectCreate(0,name,OBJ_ARROW_LEFT_PRICE,0,time,price,0,0);
          //— オブジェクトプロパティを設定する
          ObjectSetInteger(0,name,OBJPROP_SELECTABLE,0);
          ObjectSetInteger(0,name,OBJPROP_BACK,0);
          ObjectSetInteger(0,name,OBJPROP_COLOR,type?BuyColor:SellColor);
          if(profit!=0) ObjectSetString(0,name,OBJPROP_TEXT,"Profit: "+string(profit));
          }
       }
    }
//— チャートに適応する
  ChartRedraw();
 }

参照

HistoryOrderSelect()、HistoryDealSelect()

HistorySelectByPosition

指定されたポジション識別子を有する取引や注文履歴を取得します。

bool  HistorySelectByPosition(
  long   position_id    // ポジション識別子 – POSITION_IDENTIFIER
  );

パラメータ

position_id

[in]  全ての実行された注文と約定に設定されるポジション識別子

戻り値

成功の場合は true、それ以外の場合は false

注意事項

取引履歴の注文を「ツールボックス」バーの「取引」タブに表示される未決注文 と混乱してはいけません。取り消されたまたはトランザクションにつながった 注文のリストはクライアント端末の「ツールボックス」バーの「履歴」タブで見られます。

HistorySelectByPosition() は MQL5 プログラムに指定されたポジション識別子 を持った注文リストと約定リストを作成し、対応する関数での要素参照を可能にします。約定リストのサイズは HistoryDealsTotal() 関数、注文リストのサイズは HistoryOrdersTotal() 関数を使用して取得することが出来ます。注文リストの要素を全部参照するには HistoryOrderGetTicket()、約定リストの要素を全部参照するには HistoryDealGetTicket() が使用されるべきです。

MQL5 プログラムで使用可能な注文履歴のリストは HistoryOrderSelect() の使用後にリセットされ チケットによる注文の検索が成功した場合、見つかった注文で書き入れられます。MQL5 プログラムで使用可能な取引履歴のリストについても同じことが言えます。それは HistoryDealSelect() にリセットされ、チケットによる取引が受け取られた場合、それで書き込まれます。

参照

HistorySelect()、HistoryOrderGetTicket()、注文プロパティ

HistoryOrderSelect

更に適切な関数で呼び出すために履歴内の注文を選択します。関数実行が成功した場合は true を返します。関数実行が失敗した場合 false を返します。エラーの詳細については GetLastError() を呼びます。

bool  HistoryOrderSelect(
  ulong  ticket      // 注文チケット
  );

パラメータ

ticket

[in]  注文チケット

戻り値

成功の場合は true、それ以外の場合は false。

注意事項

取引履歴の注文を「ツールボックス」バーの「取引」タブに表示される未決注文 と混乱してはいけません。取り消されたまたはトランザクションにつながった 注文のリストはクライアント端末の「ツールボックス」バーの「履歴」タブで見られます。

HistoryOrderSelect() はMQL5 プログラムで参照出来る注文のリストをクリアして、成功した場合、1 つの注文を複製します。HistorySelect()関数で選ばれた約定を1つずつ参照する必要がある場合には HistoryOrderGetTicket() が使用されるべきです。

参照

HistorySelect()、HistoryOrderGetTicket()、注文プロパティ

HistoryOrdersTotal

履歴内の注文の数を返します。HistoryOrdersTotal() を呼び出す前に HistorySelect() または HistorySelectByPosition() 関数を使用して約定と注文の履歴を受信するべきです。

int  HistoryOrdersTotal();

戻り値

int 型の値

注意事項

取引履歴の注文を「ツールボックス」バーの「取引」タブに表示される未決注文 と混乱してはいけません。取り消されたまたはトランザクションにつながった 注文のリストはクライアント端末の「ツールボックス」バーの「履歴」タブで見られます。

参照

HistorySelect()、HistoryOrderSelect()、HistoryOrderGetTicket()、注文プロパティ

HistoryOrderGetTicket

履歴内の注文に対応するチケットを返します。HistoryOrderGetTicket() を呼び出す前に HistorySelect() または HistorySelectByPosition() 関数を使用して取引と注文の履歴を受信するべきです。

ulong  HistoryOrderGetTicket(
  int  index      // 注文リスト内の番号
  );

パラメータ

index

[in]  注文リスト内での注文の番号

戻り値

ulong 型の値(関数が失敗した場合は 0 )

注意事項

取引履歴の注文を「ツールボックス」バーの「取引」タブに表示される未決注文 と混乱してはいけません。取り消されたまたはトランザクションにつながった 注文のリストはクライアント端末の「ツールボックス」バーの「履歴」タブで見られます。

例:

void OnStart()
 {
  datetime from=0;
  datetime to=TimeCurrent();
//— 履歴全部をリクエストする
  HistorySelect(from,to);
//— 注文プロパティから値を返す変数
  ulong    ticket;
  double   open_price;
  double   initial_volume;
  datetime time_setup;
  datetime time_done;
  string   symbol;
  string   type;
  long     order_magic;
  long     positionID;
//— 現在の未決注文数
  uint     total=HistoryOrdersTotal();
//— ループで注文をみる
  for(uint i=0;i<total;i++)
    {
    //— リスト内の位置によって注文を返す
    if((ticket=HistoryOrderGetTicket(i))>0)
       {
        //— 注文プロパティを返す
        open_price    =HistoryOrderGetDouble(ticket,ORDER_PRICE_OPEN);
        time_setup    =(datetime)HistoryOrderGetInteger(ticket,ORDER_TIME_SETUP);
        time_done     =(datetime)HistoryOrderGetInteger(ticket,ORDER_TIME_DONE);
        symbol        =HistoryOrderGetString(ticket,ORDER_SYMBOL);
        order_magic   =HistoryOrderGetInteger(ticket,ORDER_MAGIC);
        positionID    =HistoryOrderGetInteger(ticket,ORDER_POSITION_ID);
        initial_volume=HistoryOrderGetDouble(ticket,ORDER_VOLUME_INITIAL);
        type          =GetOrderType(HistoryOrderGetInteger(ticket,ORDER_TYPE));
        //— 注文についての情報を準備して表示する
        printf("#ticket %d %s %G %s at %G was set up at %s => done at %s, pos ID=%d",
               ticket,                 // 注文チケット
               type,                   // 種類
               initial_volume,         // 注文のボリューム
               symbol,                 // シンボル
               open_price,             // 指定された始値
              TimeToString(time_setup),// 注文の出された時刻
              TimeToString(time_done), // 注文実行または削除の時刻
               positionID               // 注文の約定が含まれたポジションの識別子
               );
       }
    }
//—
 }
//+——————————————————————+
//| 注文の種類を文字列として返す                        |
//+——————————————————————+
string GetOrderType(long type)
 {
  string str_type="unknown operation";
  switch(type)
    {
    case (ORDER_TYPE_BUY):           return("buy");
    case (ORDER_TYPE_SELL):           return("sell");
    case (ORDER_TYPE_BUY_LIMIT):     return("buy limit");
    case (ORDER_TYPE_SELL_LIMIT):     return("sell limit");
    case (ORDER_TYPE_BUY_STOP):       return("buy stop");
    case (ORDER_TYPE_SELL_STOP):     return("sell stop");
    case (ORDER_TYPE_BUY_STOP_LIMIT): return("buy stop limit");
    case (ORDER_TYPE_SELL_STOP_LIMIT):return("sell stop limit");
    }
  return(str_type);
 }

参照

HistorySelect()、HistoryOrdersTotal()、HistoryOrderSelect()、注文プロパティ

HistoryOrderGetDouble

リクエストされた注文プロパティを返します。注文プロパティは double 型でなければなりません。この関数には 2 つのバージョンがあります。

1. すぐにプロパティ値を返します。

double  HistoryOrderGetDouble(
  ulong                      ticket_number,    // チケット
  ENUM_ORDER_PROPERTY_DOUBLE  property_id        // プロパティ識別子
  );

2. 関数実行の成功に応じて true または false を返します。成功した場合、プロパティの値は、参照によって渡された最後のパラメータに配置されます。

bool  HistoryOrderGetDouble(
  ulong                      ticket_number,    // チケット
  ENUM_ORDER_PROPERTY_DOUBLE  property_id,       // プロパティ識別子
  double&                    double_var        // プロパティ値を受け取る
  );

パラメータ

ticket_number

[in]  注文チケット

property_id

[in]  注文プロパティの識別子。値は ENUM_ORDER_PROPERTY_DOUBLE 列挙のいずれかです。

double_var

[out]  リクエストされたプロパティの値を受け取るdouble 型の変数

戻り値

double 型の値

注意事項

取引履歴の注文を「ツールボックス」バーの「取引」タブに表示される未決注文 と混乱してはいけません。取り消されたまたはトランザクションにつながった 注文のリストはクライアント端末の「ツールボックス」バーの「履歴」タブで見られます。

参照

HistorySelect()、HistoryOrdersTotal()、HistoryOrderSelect()、注文プロパティ

HistoryOrderGetInteger

リクエストされた注文プロパティを返します。注文プロパティは datetime または int 型でなければいけません。この関数には 2 つのバージョンがあります。

1. すぐにプロパティ値を返します。

long  HistoryOrderGetInteger(
  ulong                        ticket_number,    // チケット
  ENUM_ORDER_PROPERTY_INTEGER  property_id        // プロパティ識別子
  );

2. 関数実行の成功に応じて true または false を返します。成功した場合、プロパティの値は、参照によって渡された最後のパラメータに配置されます。

bool  HistoryOrderGetInteger(
  ulong                        ticket_number,    // チケット
  ENUM_ORDER_PROPERTY_INTEGER  property_id,       // プロパティ識別子
  long&                        long_var          // プロパティ値を受け取る
  );

パラメータ

ticket_number

[in]  注文チケット

property_id

[in]  注文プロパティの識別子。値は ENUM_ORDER_PROPERTY_INTEGER 列挙のいずれかです。

long_var

[out]  リクエストされたプロパティの値を受け取る long 型の変数

戻り値

long 型の値

注意事項

取引履歴の注文を「ツールボックス」バーの「取引」タブに表示される未決注文 と混乱してはいけません。取り消されたまたはトランザクションにつながった 注文のリストはクライアント端末の「ツールボックス」バーの「履歴」タブで見られます。

例:

//+——————————————————————+
//| 取引関数                                                          |
//+——————————————————————+
void OnTrade()
 {
//— 今週の取引履歴から最終注文のチケットを受け取る
  ulong last_order=GetLastOrderTicket();
  if(HistoryOrderSelect(last_order))
    {
    //— 01.01.1970から経過したミリ秒数で表された注文が出された時刻
    long time_setup_msc=HistoryOrderGetInteger(last_order,ORDER_TIME_SETUP_MSC);
    PrintFormat("Order #%d ORDER_TIME_SETUP_MSC=%i64 => %s",
                 last_order,time_setup_msc,TimeToString(time_setup_msc/1000));
    //— 01.01.1970 から経過したミリ秒数で表された注文の実行/取り消し時刻
    long  time_done_msc=HistoryOrderGetInteger(last_order,ORDER_TIME_DONE_MSC);
    PrintFormat("Order #%d ORDER_TIME_DONE_MSC=%i64 => %s",
                 last_order,time_done_msc,TimeToString(time_done_msc/1000));
    }
  else // 失敗を通知する
    PrintFormat("HistoryOrderSelect() failed for #%d. Eror code=%d",
                 last_order,GetLastError());
 
//—
 }
//+——————————————————————+
//| 履歴内の最終注文チケットまたは -1 を返す                                   |
//+——————————————————————+
ulong GetLastOrderTicket()
 {
//— 過去7日の履歴をリクエストする
  if(!GetTradeHistory(7))
    {
    //— 失敗した呼び出しを通知して -1 を返す
    Print(__FUNCTION__," HistorySelect() returned false");
    return -1;
    }
//—
  ulong first_order,last_order,orders=HistoryOrdersTotal();
//— あれば注文を操作する
  if(orders>0)
    {
    Print("Orders = ",orders);
     first_order=HistoryOrderGetTicket(0);
    PrintFormat("first_order = %d",first_order);
    if(orders>1)
       {
        last_order=HistoryOrderGetTicket((int)orders-1);
        PrintFormat("last_order = %d",last_order);
        return last_order;
       }
    return first_order;
    }
//— 注文が見つからないので -1 を返す
  return -1;
 }
//+————————————————————————–+
//| 過去数日の履歴をリクエストし、障害が発生した場合にはfalseを返す                         |
//+————————————————————————–+
bool GetTradeHistory(int days)
 {
//— 取引履歴を要求する週の期間を設定する
  datetime to=TimeCurrent();
  datetime from=to-days*PeriodSeconds(PERIOD_D1);
  ResetLastError();
//— リクエストして結果をチェックする
  if(!HistorySelect(from,to))
    {
    Print(__FUNCTION__," HistorySelect=false. Error code=",GetLastError());
    return false;
    }
//— 履歴が正常に受信された
  return true;
 }

参照

HistorySelect()、HistoryOrdersTotal()、HistoryOrderSelect()、注文プロパティ

HistoryOrderGetString

リクエストされた注文プロパティを返します。注文プロパティは string 型でなければなりません。この関数には 2 つのバージョンがあります。

1. すぐにプロパティ値を返します。

string  HistoryOrderGetString(
  ulong                      ticket_number,    // チケット
  ENUM_ORDER_PROPERTY_STRING  property_id        // プロパティ識別子
  );

2. 関数実行の成功に応じて true または false を返します。成功した場合、プロパティの値は、参照によって渡された最後のパラメータに配置されます。

bool  HistoryOrderGetString(
  ulong                      ticket_number,    // チケット
  ENUM_ORDER_PROPERTY_STRING  property_id,       // プロパティ識別子
  string&                    string_var        // プロパティ値を受け取る
  );

パラメータ

ticket_number

[in]  注文チケット

property_id

[in]  注文プロパティの識別子。値は ENUM_ORDER_PROPERTY_STRING 列挙のいずれかです。

string_var

[out]  string 型の変数

戻り値

string 型の変数

注意事項

取引履歴の注文を「ツールボックス」バーの「取引」タブに表示される未決注文 と混乱してはいけません。取り消されたまたはトランザクションにつながった 注文のリストはクライアント端末の「ツールボックス」バーの「履歴」タブで見られます。

参照

HistorySelect()、HistoryOrdersTotal()、HistoryOrderSelect()、注文プロパティ

HistoryDealSelect

更に適切な関数で呼び出すために履歴内の約定を選択します。関数実行が成功した場合は true を返します。関数実行が失敗した場合 false を返します。エラーの詳細については GetLastError() を呼びます。

bool  HistoryDealSelect(
  ulong  ticket      // 約定チケット
  );

パラメータ

ticket

[in]   約定チケット

戻り値

成功の場合は true、それ以外の場合は false。

注意事項

注文、約定 及び ポジションは混乱されてはなりません。 約定は注文実行の結果で、ポジションは 1 つ以上の 約定の結果の概要です。

HistoryDealSelect() はMQL5 プログラムで参照出来る約定のリストをクリアして、成功した場合、1 つの約定を複製します。HistorySelect() 関数で選ばれた約定をひとつずつ参照する必要がある場合には HistoryDealGetTicket()が使用されるべきです。

参照

HistorySelect()、HistoryDealGetTicket()、 約定プロパティ

HistoryDealsTotal

履歴内の約定数を返します。HistoryDealsTotal() を呼び出す前に HistorySelect() または HistorySelectByPosition() 関数を使用して約定と注文の履歴を受信するべきです。

int  HistoryDealsTotal();

戻り値

int 型の値

注意事項

注文、約定 及び ポジションは混乱されてはなりません。 約定は注文実行の結果で、ポジションは 1 つ以上の 約定の結果の概要です。

参照

HistorySelect()、HistoryDealGetTicket()、 約定プロパティ

HistoryDealGetTicket

この関数は、さらなる処理のための約定を選択し、履歴中の約定チケットを返します。HistoryDealGetTicket() を呼び出す前に HistorySelect() または HistorySelectByPosition() 関数を使用して約定と注文の履歴を受信するべきです。

ulong  HistoryDealGetTicket(
  int  index      // 約定チケット
  );

パラメータ

index

[in]  リスト中の約定番号

戻り値

ulong 型の値(関数が失敗した場合は 0 )

注意事項

注文、約定 及び ポジションは混乱されてはなりません。 約定は注文実行の結果で、ポジションは 1 つ以上の 約定の結果の概要です。

例:

void OnStart()
 {
  ulong deal_ticket;           // 約定チケット
  ulong order_ticket;           // 約定が実行された注文のチケット
  datetime transaction_time;   // 約定実行時刻
  long deal_type ;             // 取引操作の種類
  long position_ID;             // ポジション識別子
  string deal_description;     // 操作の説明
  double volume;               // 操作のボリューム
  string symbol;               // 約定シンボル
//— 約定履歴をリクエストするのに開始日と終了日を設定する
  datetime from_date=0;         // 一番初めから
  datetime to_date=TimeCurrent();// 今まで
//— 指定された期間の約定履歴をリクエストする
  HistorySelect(from_date,to_date);
//— リスト中の約定の数の合計
  int deals=HistoryDealsTotal();
//— 取引をひとつづつ処理する
  for(int i=0;i<deals;i++)
    {
     deal_ticket=               HistoryDealGetTicket(i);
     volume=                   HistoryDealGetDouble(deal_ticket,DEAL_VOLUME);
     transaction_time=(datetime)HistoryDealGetInteger(deal_ticket,DEAL_TIME);
     order_ticket=             HistoryDealGetInteger(deal_ticket,DEAL_ORDER);
     deal_type=                 HistoryDealGetInteger(deal_ticket,DEAL_TYPE);
     symbol=                   HistoryDealGetString(deal_ticket,DEAL_SYMBOL);
     position_ID=               HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);
     deal_description=          GetDealDescription(deal_type,volume,symbol,order_ticket,position_ID);
    //— 約定番号をフォーマットする
    string print_index=StringFormat("% 3d",i);
    //— 約定の情報を表示する
    Print(print_index+": deal #",deal_ticket," at ",transaction_time,deal_description);
    }
 }
//+——————————————————————+
//| 操作の説明を文字列として返す                                            |
//+——————————————————————+
string GetDealDescription(long deal_type,double volume,string symbol,long ticket,long pos_ID)
 {
  string descr;
//—
  switch(deal_type)
    {
    case DEAL_TYPE_BALANCE:                 return ("balance");
    case DEAL_TYPE_CREDIT:                   return ("credit");
    case DEAL_TYPE_CHARGE:                   return ("charge");
    case DEAL_TYPE_CORRECTION:               return ("correction");
    case DEAL_TYPE_BUY:                      descr="buy"; break;
    case DEAL_TYPE_SELL:                     descr="sell"; break;
    case DEAL_TYPE_BONUS:                   return ("bonus");
    case DEAL_TYPE_COMMISSION:               return ("additional commission");
    case DEAL_TYPE_COMMISSION_DAILY:         return ("daily commission");
    case DEAL_TYPE_COMMISSION_MONTHLY:       return ("monthly commission");
    case DEAL_TYPE_COMMISSION_AGENT_DAILY:   return ("daily agent commission");
    case DEAL_TYPE_COMMISSION_AGENT_MONTHLY: return ("monthly agent commission");
    case DEAL_TYPE_INTEREST:                 return ("interest rate");
    case DEAL_TYPE_BUY_CANCELED:             descr="cancelled buy deal"; break;
    case DEAL_TYPE_SELL_CANCELED:            descr="cancelled sell deal"; break;
    }
  descr=StringFormat("%s %G %s (order #%d, position ID %d)",
                     descr, // 現在の説明
                     volume, // 約定高
                     symbol, // 約定シンボル
                     ticket, // 約定が実行された注文のチケット
                     pos_ID // 約定が含まれたポジションの識別子
                     );
  return(descr);
//—
 }

 

参照

HistorySelect()、HistoryDealsTotal()、HistoryDealSelect()、 約定プロパティ

HistoryDealGetDouble

約定のリクエストされたプロパティを返します。 約定プロパティは double 型でなければいけません。この関数には 2 つのバージョンがあります。

1. すぐにプロパティ値を返します。

double  HistoryDealGetDouble(
  ulong                      ticket_number,    // チケット
  ENUM_DEAL_PROPERTY_DOUBLE  property_id        // プロパティ識別子
  );

2. 関数実行の成功に応じて true または false を返します。成功した場合、プロパティの値は、参照によって渡された最後のパラメータに配置されます。

bool  HistoryDealGetDouble(
  ulong                      ticket_number,    // チケット
  ENUM_DEAL_PROPERTY_DOUBLE  property_id,       // プロパティ識別子
  double&                    double_var        // プロパティ値を受け取る
  );

パラメータ

ticket_number

[in]   約定チケット

property_id

[in]   約定プロパティ識別子。値は ENUM_DEAL_PROPERTY_DOUBLE 列挙のいずれかです。

double_var

[out]  リクエストされたプロパティの値を受け取るdouble 型の変数

戻り値

double 型の値

注意事項

注文、約定 及び ポジションは混乱されてはなりません。 約定は注文実行の結果で、ポジションは 1 つ以上の 約定の結果の概要です。

参照

HistorySelect()、HistoryDealsTotal()、HistoryDealGetTicket()、 約定プロパティ

HistoryDealGetInteger

約定のリクエストされたプロパティを返します。 約定プロパティは datetime または int 型でなければいけません。この関数には 2 つのバージョンがあります。

1. すぐにプロパティ値を返します。

long  HistoryDealGetInteger(
  ulong                      ticket_number,    // チケット
  ENUM_DEAL_PROPERTY_INTEGER  property_id        // プロパティ識別子
  );

2. 関数実行の成功に応じて true または false を返します。成功した場合、プロパティの値は、参照によって渡された最後のパラメータに配置されます。

bool  HistoryDealGetInteger(
  ulong                      ticket_number,    // チケット
  ENUM_DEAL_PROPERTY_INTEGER  property_id,       // プロパティ識別子
  long&                      long_var          // プロパティ値を受け取る
  );

パラメータ

ticket_number

[in]  取引チケット

property_id

[in]   約定プロパティ識別子値は ENUM_DEAL_PROPERTY_INTEGER 列挙のいずれかです。

long_var

[out]  リクエストされたプロパティの値を受け取る long 型の変数

戻り値

long 型の値

注意事項

注文、約定 及び ポジションは混乱されてはなりません。 約定は注文実行の結果で、ポジションは 1 つ以上の 約定の結果の概要です。

例:

//+——————————————————————+
//| 取引関数                                                          |
//+——————————————————————+
void OnTrade()
 {
//— 今週の取引履歴から直近約定のチケットを受け取る
  ulong last_deal=GetLastDealTicket();
  if(HistoryDealSelect(last_deal))
    {
    //— 01.01.1970から経過したミリ秒数で表された約定の実行時刻
    long deal_time_msc=HistoryDealGetInteger(last_deal,DEAL_TIME_MSC);
    PrintFormat("Deal #%d DEAL_TIME_MSC=%i64 => %s",
                 last_deal,deal_time_msc,TimeToString(deal_time_msc/1000));
    }
  else
    PrintFormat("HistoryDealSelect() failed for #%d. Eror code=%d",
                 last_deal,GetLastError());
//—
 }
//+——————————————————————+
//| 履歴内の最終約定チケットまたは -1 を返す                                   |
//+——————————————————————+
ulong GetLastDealTicket()
 {
//— 過去7日の履歴をリクエストする
  if(!GetTradeHistory(7))
    {
    //— 失敗した呼び出しを通知して -1 を返す
    Print(__FUNCTION__," HistorySelect() returned false");
    return -1;
    }
//—
  ulong first_deal,last_deal,deals=HistoryOrdersTotal();
//— あれば注文を操作する
  if(deals>0)
    {
    Print("Deals = ",deals);
     first_deal=HistoryDealGetTicket(0);
    PrintFormat("first_deal = %d",first_deal);
    if(deals>1)
       {
        last_deal=HistoryDealGetTicket((int)deals-1);
        PrintFormat("last_deal = %d",last_deal);
        return last_deal;
       }
    return first_deal;
    }
//— 約定が見つからないので -1 を返す
  return -1;
 }
//+————————————————————————–+
//| 過去数日の履歴をリクエストし、障害が発生した場合にはfalseを返す                         |
//+————————————————————————–+
bool GetTradeHistory(int days)
 {
//— 取引履歴を要求する週の期間を設定する
  datetime to=TimeCurrent();
  datetime from=to-days*PeriodSeconds(PERIOD_D1);
  ResetLastError();
//— リクエストして結果をチェックする
  if(!HistorySelect(from,to))
    {
    Print(__FUNCTION__," HistorySelect=false. Error code=",GetLastError());
    return false;
    }
//— 履歴が正常に受信された
  return true;
 }

参照

HistoryDealsTotal()、HistorySelect()、HistoryDealGetTicket()、 約定プロパティ

HistoryDealGetString

約定のリクエストされたプロパティを返します。 約定プロパティは string 型でなければなりません。この関数には 2 つのバージョンがあります。

1. すぐにプロパティ値を返します。

string  HistoryDealGetString(
  ulong                      ticket_number,    // チケット
  ENUM_DEAL_PROPERTY_STRING  property_id        // プロパティ識別子
  );

2. 関数実行の成功に応じて true または false を返します。成功した場合、プロパティの値は、参照によって渡された最後のパラメータに配置されます。

bool  HistoryDealGetString(
  ulong                      ticket_number,    // チケット
  ENUM_DEAL_PROPERTY_STRING  property_id,       // プロパティ識別子
  string&                    string_var        // プロパティ値を受け取る
  );

パラメータ

ticket_number

[in]   約定チケット

property_id

[in]   約定プロパティ識別子値は ENUM_DEAL_PROPERTY_STRING 列挙のいずれかです。

string_var

[out] リクエストされたプロパティ値を受け取るstring 型の変数

戻り値

string 型の変数

注意事項

注文、約定 及び ポジションは混乱されてはなりません。 約定は注文実行の結果で、ポジションは 1 つ以上の 約定の結果の概要です。

参照

HistoryDealsTotal()、HistorySelect()、HistoryDealGetTicket()、 約定プロパティ

Originally posted 2019-07-30 09:24:12.

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">