取引リクエスト構造体 (MqlTradeRequest)

クライアント端末と注文確定操作を実行する取引サーバとの間の相互作用は、取引リクエストを用いて行われます。取引リクエストは取引を実行するために必要な全てのフィールドが含まれている MqlTradeRequest 構造体で表されます。リクエスト処理の結果は MqlTradeResult 型の構造体で表されます。

struct MqlTradeRequest
 {
  ENUM_TRADE_REQUEST_ACTIONS   action;           // 取引の種類
  ulong                         magic;           // エキスパートアドバイザー ID(マジックナンバー)
  ulong                         order;           // 注文チケット
  string                       symbol;           // 取引シンボル
  double                       volume;           // 約定のための要求されたボリューム(ロット単位)
  double                       price;           // 価格
  double                       stoplimit;       // 注文のストップリミットレベル
  double                       sl;               // 注文の決済逆指値レベル
  double                       tp;               // 注文の決済指値レベル
  ulong                         deviation;       // リクエストされた価格からの可能な最大偏差
  ENUM_ORDER_TYPE               type;             // 注文の種類
  ENUM_ORDER_TYPE_FILLING       type_filling;     // 注文実行の種類
  ENUM_ORDER_TYPE_TIME       type_time;       // 注文期限切れの種類
  datetime                     expiration;       // 注文期限切れの時刻 (ORDER_TIME_SPECIFIED 型の注文)
  string                       comment;         // 注文コメント
  ulong                         position;         // Position ticket
  ulong                         position_by;     // The ticket of an opposite position
 };

フィールドの説明

フィールド

説明

action

取引操作の種類値は ENUM_TRADE_REQUEST_ACTIONS 列挙値の 1 つです。

magic

エキスパートアドバイザー ID。取引注文の分析処理の整理を可能にします。取引リクエストを送信する際に、各エキスパートアドバイザーには、固有の ID を設定することが出来ます。

order

注文チケット。未決注文を変更するために使用されます。

symbol

注文シンボル。注文の変更とポジション決済操作には必要ありません。

volume

リクエストされた注文ボリューム(ロット単位)。約定の出来高は注文実行の種類によって異なります。

price

注文が実行されなければならない値に達している価格。「成行」実行タイプのシンボルの成行注文(TRADE_ACTION_DEALSYMBOL_TRADE_EXECUTION_MARKET)では価格の指定は必要ありません。

stoplimit

Limit pending 注文が置かれる価格 (この条件は必須です)。それまで未決注文は出されません。

sl

不利な値動きの際の決済逆指値。

tp

有利な値動きの際の決済指値。

deviation

ポイントで指定された最大価格偏差。

type

注文の種類。ENUM_ORDER_TYPE 列挙値の 1 つ。

type_filling

注文実行の種類。ENUM_ORDER_TYPE_FILLING 列挙値の 1 つ。

type_time

注文期限切れの種類。ENUM_ORDER_TYPE_TIME 列挙値の 1 つ。

expiration

注文期限切れの時刻(ORDER_TIME_SPECIFIED)。

comment

注文コメント。

position

ポジションチケット。ポジションの決済や変更をするときに、ポジションの一意義の認証の為に埋める必要があります。原則として、その結果としてポジションを保有する、注文のチケットに対応します。

position_by

反対ポジションのチケット。反対ポジション(同じ商品であるが反対側に保有するポジション)の決済時に使用されます。

ヘッジシステムでのポジションの変更または決済の時には、そのチケット(MqlTradeRequest::position)を必ず指定してください。ネッティングシステムでもチケットを指定する必要がありますが、ポジションの識別はシンボル名で行われます。

取引操作を実行する注文を送信するには、OrderSend() 関数の使用が必要です。各取引操作のためには、必須項目を指定する必要があります。任意のフィールドを指定することも出来ます。取引注文を送信するには 7 つの可能なケースがあります。

Request Execution

これは、「リクエスト実行モード」で注文を出すための取引注文です(リクエストされた価格での取引)。以下の 9 のフィールドを指定する必要があります。

  • action
  • symbol
  • volume
  • price
  • sl
  • tp
  • deviation
  • type
  • type_filling

「magic」及び「comment」フィールドの指定も可能です。

即時実行

これは、「即時実行モード」で注文を出すための取引注文です(現在価格での取引)。以下の 9 のフィールドを指定する必要があります。

  • action
  • symbol
  • volume
  • price
  • sl
  • tp
  • deviation
  • type
  • type_filling

「magic」及び「comment」フィールドの指定も可能です。

マーケット実行

これは、「マーケット実行モード」で注文を出すための取引注文です。以下の 5 つのフィールドを指定する必要があります。

  • action
  • symbol
  • volume
  • type
  • type_filling

「magic」及び「comment」フィールドの指定も可能です。

エクスチェンジ実行

これは、「エクスチェンジ実行モード」で注文を出すための取引注文です。以下の 5 つのフィールドを指定する必要があります。

  • action
  • symbol
  • volume
  • type
  • type_filling

「magic」及び「comment」フィールドの指定も可能です。

買いポジションを持つ 取引操作TRADE_ACTION_DEALの例:

#define EXPERT_MAGIC 123456   // エキスパートアドバイザのMagicNumber
//+------------------------------------------------------------------+
//| 買いポジションの発注                                                   |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- リクエストと結果の宣言と初期化
  MqlTradeRequest request={};
  MqlTradeResult  result={};
//--- リクエストのパラメータ
  request.action   =TRADE_ACTION_DEAL;                     // 取引操作タイプ
  request.symbol   =Symbol();                             // シンボル
  request.volume   =0.1;                                   // 0.1ロットのボリューム
  request.type     =ORDER_TYPE_BUY;                       // 注文タイプ
  request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // 発注価格
  request.deviation=5;                                     // 価格からの許容偏差
  request.magic    =EXPERT_MAGIC;                         // 注文のMagicNumber
//--- リクエストの送信
  if(!OrderSend(request,result))
    PrintFormat("OrderSend error %d",GetLastError());     // リクエストの送信が失敗した場合、エラーコードを出力する
//--- 操作に関する情報
  PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
 }
//+------------------------------------------------------------------+

 
売りポジションを持つ 取引操作TRADE_ACTION_DEALの例:

#define EXPERT_MAGIC 123456   // エキスパートアドバイザのMagicNumber
//+------------------------------------------------------------------+
//| 売りポジションを持つ                                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- リクエストと結果の宣言と初期化
  MqlTradeRequest request={};
  MqlTradeResult  result={};
//--- リクエストのパラメータ
  request.action   =TRADE_ACTION_DEAL;                     // 取引操作タイプ
  request.symbol   =Symbol();                             // シンボル
  request.volume   =0.2;                                   // 0.2ロットのボリューム
  request.type     =ORDER_TYPE_SELL;                       // 注文タイプ
  request.price    =SymbolInfoDouble(Symbol(),SYMBOL_BID); // 発注価格
  request.deviation=5;                                     // 価格からの許容偏差
  request.magic    =EXPERT_MAGIC;                         // 注文のMagicNumber
//--- リクエストの送信
  if(!OrderSend(request,result))
    PrintFormat("OrderSend error %d",GetLastError());     // リクエストの送信が失敗した場合、エラーコードを出力する
//--- 操作についての情報
  PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
 }
//+------------------------------------------------------------------+

 
ポジションを決済する 取引操作TRADE_ACTION_DEALの例:

#define EXPERT_MAGIC 123456   // エキスパートアドバイザのMagicNumber
//+------------------------------------------------------------------+
//| 全てのポジションを決済                                                  |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- 結果とリクエストの宣言
  MqlTradeRequest request;
  MqlTradeResult  result;
  int total=PositionsTotal(); // 保有ポジション数  
//--- 全ての保有ポジションの取捨
  for(int i=total-1; i>=0; i--)
    {
    //--- 注文のパラメータ
    ulong  position_ticket=PositionGetTicket(i);                                     // ポジションチケット
    string position_symbol=PositionGetString(POSITION_SYMBOL);                       // シンボル
    int    digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS);             // 小数点以下の桁数
    ulong  magic=PositionGetInteger(POSITION_MAGIC);                                 // ポジションのMagicNumber
    double volume=PositionGetDouble(POSITION_VOLUME);                                 // ポジションボリューム
    ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);   // ポジションタイプ
    //--- ポジション情報の出力
    PrintFormat("#%I64u %s  %s  %.2f  %s [%I64d]",
                 position_ticket,
                 position_symbol,
                EnumToString(type),
                 volume,
                DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
                 magic);
    //--- MagicNumberが一致している場合
    if(magic==EXPERT_MAGIC)
       {
        //--- リクエストと結果の値のゼロ化
        ZeroMemory(request);
        ZeroMemory(result);
        //--- 操作パラメータの設定
        request.action   =TRADE_ACTION_DEAL;       // 取引操作タイプ
        request.position =position_ticket;         // ポジションチケット
        request.symbol   =position_symbol;         // シンボル
        request.volume   =volume;                   // ポジションボリューム
        request.deviation=5;                       // 価格からの許容偏差
        request.magic    =EXPERT_MAGIC;             // ポジションのMagicNumber
        //--- ポジションタイプによる注文タイプと価格の設定
        if(type==POSITION_TYPE_BUY)
          {
           request.price=SymbolInfoDouble(position_symbol,SYMBOL_BID);
           request.type =ORDER_TYPE_SELL;
          }
        else
          {
           request.price=SymbolInfoDouble(position_symbol,SYMBOL_ASK);
           request.type =ORDER_TYPE_BUY;
          }
        //--- 決済情報の出力
        PrintFormat("Close #%I64d %s %s",position_ticket,position_symbol,EnumToString(type));
        //--- リクエストの送信
        if(!OrderSend(request,result))
          PrintFormat("OrderSend error %d",GetLastError()); // リクエストの送信に失敗した場合、エラーコードを出力
        //--- 操作情報 
        PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
        //---
       }
    }
 }
//+------------------------------------------------------------------+

SL & TP 更新

決済逆指値及び/または決済指値のレベルを変更する取引注文です。以下の 4 つのフィールドを指定する必要があります。

  • action
  • symbol
  • sl
  • tp

保有ポジションのストップロスとテイクプロフィットの値を変更する 取引操作 TRADE_ACTION_SLTPの例:

#define EXPERT_MAGIC 123456 // エキスパートアドバイザのMagicNumber
//+------------------------------------------------------------------+
//| ポジションのストップロスとテイクプロフィットを変更する                            |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- リクエストと結果の宣言
  MqlTradeRequest request;
  MqlTradeResult  result;
  int total=PositionsTotal(); // 保有ポジション数  
//--- 全ての保有ポジションを取捨
  for(int i=0; i<total; i++)
    {
    //--- 注文パラメータ
    ulong  position_ticket=PositionGetTicket(i);// ポジションチケット
    string position_symbol=PositionGetString(POSITION_SYMBOL); // シンボル
    int    digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS); // 小数点以下の桁数
    ulong  magic=PositionGetInteger(POSITION_MAGIC); // ポジションのMagicNumber
    double volume=PositionGetDouble(POSITION_VOLUME);   // ポジションボリューム
    double sl=PositionGetDouble(POSITION_SL); // ポジションのStop Loss
    double tp=PositionGetDouble(POSITION_TP); // ポジションのTake Profit
    ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); // ポジションタイプ
    //--- ポジション情報の出力
    PrintFormat("#%I64u %s  %s  %.2f  %s  sl: %s  tp: %s  [%I64d]",
                 position_ticket,
                 position_symbol,
                EnumToString(type),
                 volume,
                DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
                DoubleToString(sl,digits),
                DoubleToString(tp,digits),
                 magic);
    //--- MagicNumberが一致し、ストップロスとテイクプロフィットが指定されていない場合
    if(magic==EXPERT_MAGIC && sl==0 && tp==0)
       {
        //--- 現在の価格レートの計算
        double price=PositionGetDouble(POSITION_PRICE_OPEN);
        double bid=SymbolInfoDouble(position_symbol,SYMBOL_BID);
        double ask=SymbolInfoDouble(position_symbol,SYMBOL_ASK);
        int    stop_level=(int)SymbolInfoInteger(position_symbol,SYMBOL_TRADE_STOPS_LEVEL);
        double price_level;
        //--- 現在の決済価格からの最小許容オフセットが指定されていない場合
        if(stop_level<=0)
           stop_level=150; // 現在の決済価格から150ポイントのオフセットを設定する
        else
           stop_level+=50; // 念の為オフセットレベルは(SYMBOL_TRADE_STOPS_LEVEL + 50)ポイントと同じにする
 
        //--- Stop LossとTake Profitの値の計算と四捨五入
        price_level=stop_level*SymbolInfoDouble(position_symbol,SYMBOL_POINT);
        if(type==POSITION_TYPE_BUY)
           {
            sl=NormalizeDouble(bid-price_level,digits);
            tp=NormalizeDouble(bid+price_level,digits);
           }
        else
           {
            sl=NormalizeDouble(ask+price_level,digits);
            tp=NormalizeDouble(ask-price_level,digits);
           }
        //--- リクエストと結果の値のゼロ化
        ZeroMemory(request);
        ZeroMemory(result);
        //--- 操作パラメータの設定
        request.action  =TRADE_ACTION_SLTP; // 取引操作タイプ
        request.position=position_ticket;   // ポジションシンボル
        request.symbol=position_symbol;     // シンボル
        request.sl      =sl;               // ポジションのStop Loss
        request.tp      =tp;               // ポジションのTake Profit
        request.magic=EXPERT_MAGIC;         // MagicNumber позиции
        //--- 変更情報の出力
        PrintFormat("Modify #%I64d %s %s",position_ticket,position_symbol,EnumToString(type));
        //--- リクエストの送信
        if(!OrderSend(request,result))
          PrintFormat("OrderSend error %d",GetLastError()); // リクエストの送信に失敗した場合、エラーコードを出力する
        //--- 操作情報 
        PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
       }
    }
 }
//+------------------------------------------------------------------+

未決注文

未決注文をするための取引注文です。以下の 11 のフィールドを指定する必要があります。

  • action
  • symbol
  • volume
  • price
  • stoplimit
  • sl
  • tp
  • type
  • type_filling
  • type_time
  • expiration

「magic」及び「comment」フィールドの指定も可能です。

未決注文を設定する 取引操作TRADE_ACTION_PENDINGの例:

#property description "未決注文設定の例"
#property script_show_inputs
#define EXPERT_MAGIC 123456                             // エキスパートアドバイザのMagicNumber
input ENUM_ORDER_TYPE orderType=ORDER_TYPE_BUY_LIMIT;   // 注文タイプ
//+------------------------------------------------------------------+
//| 未決注文の設定                                                      |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- リクエストと結果の宣言と初期化
  MqlTradeRequest request={};
  MqlTradeResult  result={};
//--- 未決注文の設定の為のパラメータ
  request.action   =TRADE_ACTION_PENDING;                             // 取引操作タイプ
  request.symbol   =Symbol();                                         // シンボル
  request.volume   =0.1;                                             // 0.1ロットのボリューム
  request.deviation=2;                                               // 価格からの許容偏差
  request.magic    =EXPERT_MAGIC;                                     // 注文のMagicNumber
  int offset = 50;                                                   // 注文設定の為の現在の価格からのオフセット(ポイント)
  double price;                                                      // 注文の発動価格
  double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT);               // ポイントサイズ
  int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);              // 小数点以下の桁数(精度)
  //--- 操作タイプのチェック
  if(orderType==ORDER_TYPE_BUY_LIMIT)
    {
     request.type     =ORDER_TYPE_BUY_LIMIT;                         // 注文タイプ
     price=SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point;       // 発注価格
     request.price    =NormalizeDouble(price,digits);                 // 正規化された発注価格
    }
  else if(orderType==ORDER_TYPE_SELL_LIMIT)
    {
     request.type     =ORDER_TYPE_SELL_LIMIT;                         // 注文タイプ
     price=SymbolInfoDouble(Symbol(),SYMBOL_BID)+offset*point;         // 発注価格
     request.price    =NormalizeDouble(price,digits);                 // 正規化された発注価格
    }
  else if(orderType==ORDER_TYPE_BUY_STOP)
    {
     request.type =ORDER_TYPE_BUY_STOP;                               // 注文タイプ
     price        =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point; // 発注価格
     request.price=NormalizeDouble(price,digits);                     // 正規化された発注価格
    }
  else if(orderType==ORDER_TYPE_SELL_STOP)
    {
     request.type     =ORDER_TYPE_SELL_STOP;                           // 注文タイプ
     price=SymbolInfoDouble(Symbol(),SYMBOL_BID)-offset*point;         // 発注価格
     request.price    =NormalizeDouble(price,digits);                 // 正規化された発注価格
    }
  else Alert("この例は未決注文の設定のみを対象にしています");   // もし未決注文ではないものが選択されている場合
//--- リクエストの送信
  if(!OrderSend(request,result))
    PrintFormat("OrderSend error %d",GetLastError());                 // もしリクエストの送信に失敗した場合、エラーコードを出力する
//--- 操作情報
  PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
 }
//+------------------------------------------------------------------+

未決注文の変更

未決注文を変更する取引注文です。以下の 7 つのフィールドを指定する必要があります

  • action
  • order
  • price
  • sl
  • tp
  • type_time
  • expiration

未決注文の価格レベルを変更する取引操作TRADE_ACTION_MODIFYの例:

#define EXPERT_MAGIC 123456 // エキスパートアドバイザのMagicNumber
//+------------------------------------------------------------------+
//| 未決注文の変更                                                      |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- リクエストと結果の宣言と初期化
  MqlTradeRequest request={};
  MqlTradeResult  result={};
  int total=OrdersTotal(); // 保有未決注文数
//--- 全ての保有未決注文を取捨
  for(int i=0; i<total; i++)
    {
    //--- 注文パラメータ
    ulong  order_ticket=OrderGetTicket(i);                             //注文チケット
    string order_symbol=Symbol();                                     // シンボル
    int    digits=(int)SymbolInfoInteger(order_symbol,SYMBOL_DIGITS); // 小数点以下の桁数
    ulong  magic=OrderGetInteger(ORDER_MAGIC);                         // 注文のMagicNumber
    double volume=OrderGetDouble(ORDER_VOLUME_CURRENT);               // 現在の注文量
    double sl=OrderGetDouble(ORDER_SL);                               // 現在の注文のStop Loss
    double tp=OrderGetDouble(ORDER_TP);                               // 現在の注文のTake Profit
    ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); // 注文タイプ
    int offset = 50;                                                   // 発注の為の現在価格からのオフセット(ポイント)
    double price;                                                     // 注文発動価格
    double point=SymbolInfoDouble(order_symbol,SYMBOL_POINT);         // ポイントサイズ
    //--- 注文情報の出力
    PrintFormat("#%I64u %s  %s  %.2f  %s  sl: %s  tp: %s  [%I64d]",
                 order_ticket,
                 order_symbol,
                EnumToString(type),
                 volume,
                DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
                DoubleToString(sl,digits),
                DoubleToString(tp,digits),
                 magic);
    //--- MagicNumberが一致し、Stop LossとTake Profitが設定されていない場合
    if(magic==EXPERT_MAGIC && sl==0 && tp==0)
       {
        request.action=TRADE_ACTION_MODIFY;                           // 取引操作タイプ
        request.order = OrderGetTicket(i);                           // 注文チケット
        request.symbol   =Symbol();                                   // シンボル
        request.deviation=5;                                         // 価格からの許容オフセット
      //--- 価格レベルの設定、タイプに合わせた注文のTake ProfitとStop Loss
        if(type==ORDER_TYPE_BUY_LIMIT)
          {
           price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point;
           request.tp = NormalizeDouble(price+offset*point,digits);
           request.sl = NormalizeDouble(price-offset*point,digits);
           request.price    =NormalizeDouble(price,digits);               // 正規化された発注価格
          }
        else if(type==ORDER_TYPE_SELL_LIMIT)
          {
          price = SymbolInfoDouble(Symbol(),SYMBOL_BID)+offset*point;
           request.tp = NormalizeDouble(price-offset*point,digits);
           request.sl = NormalizeDouble(price+offset*point,digits);
           request.price    =NormalizeDouble(price,digits);                 // 正規化された発注価格
          }
        else if(type==ORDER_TYPE_BUY_STOP)
          {
          price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point;
           request.tp = NormalizeDouble(price+offset*point,digits);
           request.sl = NormalizeDouble(price-offset*point,digits);
           request.price    =NormalizeDouble(price,digits);                 // 正規化された発注価格
          }
        else if(type==ORDER_TYPE_SELL_STOP)
          {
          price = SymbolInfoDouble(Symbol(),SYMBOL_BID)-offset*point;
           request.tp = NormalizeDouble(price-offset*point,digits);
           request.sl = NormalizeDouble(price+offset*point,digits);
           request.price    =NormalizeDouble(price,digits);                 // 正規化された発注価格
          }
        //---リクエストの送信
        if(!OrderSend(request,result))
          PrintFormat("OrderSend error %d",GetLastError()); // リクエストの送信に失敗した場合、エラーコードを出力する
        //--- 操作情報  
        PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
        //--- リクエストと結果の値のゼロ化
        ZeroMemory(request);
        ZeroMemory(result);
       }
    }
 }
//+------------------------------------------------------------------+

未決注文の削除

未決注文を削除するための取引注文です。以下の 2 つのフィールドを指定する必要があります。

  • action
  • order

未決注文の削除をする 取引操作TRADE_ACTION_REMOVEの例:

#define EXPERT_MAGIC 123456 // エキスパートアドバイザのMagicNumber
//+------------------------------------------------------------------+
//| 未決注文の削除                                                      |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- リクエストと結果の宣言と初期化
  MqlTradeRequest request={};
  MqlTradeResult  result={};
  int total=OrdersTotal(); // 保有未決注文数
//--- 全ての保有未決注文を取捨
  for(int i=total-1; i>=0; i--)
    {
    ulong  order_ticket=OrderGetTicket(i);                   // 注文チケット
    ulong  magic=OrderGetInteger(ORDER_MAGIC);               // 注文のMagicNumber
    //--- MagicNumberが一致している場合
    if(magic==EXPERT_MAGIC)
       {
        //--- リクエストと結果の値のゼロ化
        ZeroMemory(request);
        ZeroMemory(result);
        //--- 操作パラメータの設定    
        request.action=TRADE_ACTION_REMOVE;                   // 取引操作タイプ
        request.order = order_ticket;                         // 注文チケット
        //--- リクエストの送信
        if(!OrderSend(request,result))
          PrintFormat("OrderSend error %d",GetLastError()); // リクエストの送信に失敗した場合、エラーコードを出力する
        //--- 操作情報  
        PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
       }
    }
 }
//+------------------------------------------------------------------+

参照

構造体とクラス取引の関数注文プロパティ