order_send

取引操作を実行するリクエストをターミナルから取引サーバに送信します。この関数はOrderSendに似ています。

order_send(
  request      // リクエスト構造体
  );

パラメータ

request

[in] 必要な取引アクションを記述するMqlTradeRequest型の構造体。名前なし必須パラメータ。リクエストの記入例と列挙内容を以下に示します。

戻り値

MqlTradeResult構造体としての実行結果。回答のrequestフィールドには、order_send()に渡される取引リクエストの構造体が含まれています。

MqlTradeRequest取引リクエスト構造体

フィールド

説明

action

取引操作の種類。値はTRADE_REQUEST_ACTIONS列挙体のうちの1つです。

magic

EAのID。取引注文の分析処理を調整できるようにします。各EAは、取引リクエストを送信するときに一意のIDを設定できます。

order

注文チケット。未決注文を変更するために必要です。

symbol

注文が行われた取引商品の名前。注文を変更する場合と決済する場合は不要。

volume

ロット単位でのリクエストされた取引量。取引の出来高は注文実行の種類によって異なります。

price

注文実行価格。「市場執行」(SYMBOL_TRADE_EXECUTION_MARKET)タイプの商品がTRADE_ACTION_DEAL型の成行注文の場合、価格は設定されません。

stoplimit

未決指値注文の価格は、価格が「price」の値に達したときに設定されます(この条件は必須です)。未決注文はその瞬間まで取引システムに渡されません。

sl

逆指値注文は、価格が好ましくない方向に動いたときに発動します。

tp

価格が好ましい方向に動いたときに指値注文が発動する価格。

deviation

リクエストされた価格からの最大許容偏差(ポイント単位)。

type

注文の種類。値はORDER_TYPE列挙体のうちの1つです。

type_filling

注文の種類。値はORDER_TYPE_FILLING値のうちの1つです。

type_time

注文有効期限の種類。値はORDER_TYPE_TIME値のうちの1つです。

expiration

未決注文の有効期限(TIME_SPECIFIED型注文)。

comment

注文コメント。

position

ポジションチケット。明確に識別するために、ポジションを変更および決済するときに入力します。通常は、ポジションを開いた注文のチケットと同じです。

position_by

反対方向のポジションのチケット。反対のポジション(同じ銘柄で反対方向に開かれているポジション)でポジションを決済するときに使用されます。

注意事項

取引リクエストは、取引サーバ上で複数の検証段階を踏みます。まず、必要なすべてのリクエストフィールドの有効性が確認されます。エラーがない場合、サーバはさらに処理するために注文を受け入れます。取引操作の実行の詳細については、OrderSend関数の説明を参照してください。

例:

import time
import MetaTrader5 as mt5
 
# MetaTrader 5パッケージについてのデータを表示する
print("MetaTrader5 package author: ", mt5.__author__)
print("MetaTrader5 package version: ", mt5.__version__)
 
# MetaTrader 5ターミナルとの接続を確立する
if not mt5.initialize():
   print("initialize() failed, error code =",mt5.last_error())
  quit()
 
# 買いリクエスト構造体を準備する
symbol = "USDJPY"
symbol_info = mt5.symbol_info(symbol)
if symbol_info is None:
  print(symbol, "not found, can not call order_check()")
  mt5.shutdown()
  quit()
 
# 銘柄が「気配値表示」似ない場合は追加する
if not symbol_info.visible:
  print(symbol, "is not visible, trying to switch on")
  if not mt5.symbol_select(symbol,True):
      print("symbol_select({}}) failed, exit",symbol)
      mt5.shutdown()
      quit()
 
lot = 0.1
point = mt5.symbol_info(symbol).point
price = mt5.symbol_info_tick(symbol).ask
deviation = 20
request = {
  "action": mt5.TRADE_ACTION_DEAL,
  "symbol": symbol,
  "volume": lot,
  "type": mt5.ORDER_TYPE_BUY,
  "price": price,
  "sl": price - 100 * point,
  "tp": price + 100 * point,
  "deviation": deviation,
  "magic": 234000,
  "comment": "python script open",
  "type_time": mt5.ORDER_TIME_GTC,
  "type_filling": mt5.ORDER_FILLING_RETURN,
}
 
# 取引リクエストを送信する
result = mt5.order_send(request)
# 実行結果を確認する
print("1. order_send(): by {} {} lots at {} with deviation={} points".format(symbol,lot,price,deviation));
if result.retcode != mt5.TRADE_RETCODE_DONE:
  print("2. order_send failed, retcode={}".format(result.retcode))
   # 結果をディクショナリとしてリクエストし、要素ごとに表示する
   result_dict=result._asdict()
   for field in result_dict.keys():
      print("   {}={}".format(field,result_dict[field]))
      # これが取引リクエスト構造体の場合は要素ごとに表示する
      if field=="request":
           traderequest_dict=result_dict[field]._asdict()
          for tradereq_filed in traderequest_dict:
              print("       traderequest: {}={}".format(tradereq_filed,traderequest_dict[tradereq_filed]))
  print("shutdown() and quit")
  mt5.shutdown()
  quit()
 
print("2. order_send done, ", result)
print("   opened position with POSITION_TICKET={}".format(result.order))
print("   sleep 2 seconds before closing position #{}".format(result.order))
time.sleep(2)
# 決済リクエストを作成する
position_id=result.order
price=mt5.symbol_info_tick(symbol).bid
deviation=20
request={
  "action": mt5.TRADE_ACTION_DEAL,
  "symbol": symbol,
  "volume": lot,
  "type": mt5.ORDER_TYPE_SELL,
  "position": position_id,
  "price": price,
  "deviation": deviation,
  "magic": 234000,
  "comment": "python script close",
  "type_time": mt5.ORDER_TIME_GTC,
  "type_filling": mt5.ORDER_FILLING_RETURN,
}
# 取引リクエストを送信する
result=mt5.order_send(request)
# 実行結果を確認する
print("3. close position #{}: sell {} {} lots at {} with deviation={} points".format(position_id,symbol,lot,price,deviation));
if result.retcode != mt5.TRADE_RETCODE_DONE:
  print("4. order_send failed, retcode={}".format(result.retcode))
  print("   result",result)
else:
  print("4. position #{} closed, {}".format(position_id,result))
   # 結果をディクショナリとしてリクエストし、要素ごとに表示する
   result_dict=result._asdict()
   for field in result_dict.keys():
      print("   {}={}".format(field,result_dict[field]))
      # これが取引リクエスト構造体の場合は要素ごとに表示する
      if field=="request":
           traderequest_dict=result_dict[field]._asdict()
          for tradereq_filed in traderequest_dict:
              print("       traderequest: {}={}".format(tradereq_filed,traderequest_dict[tradereq_filed]))
 
# MetaTrader 5ターミナルへの接続をシャットダウンする
mt5.shutdown()
 
Result
MetaTrader5 package author:  MetaQuotes Software Corp.
MetaTrader5 package version:  5.0.29
1. order_send(): by USDJPY 0.1 lots at 108.023 with deviation=20 points
2. order_send done,  OrderSendResult(retcode=10009, deal=535084512, order=557416535, volume=0.1, price=108.023, ...
  opened position with POSITION_TICKET=557416535
  sleep 2 seconds before closing position #557416535
3. close position #557416535: sell USDJPY 0.1 lots at 108.018 with deviation=20 points
4. position #557416535 closed, OrderSendResult(retcode=10009, deal=535084631, order=557416654, volume=0.1, price=...
  retcode=10009
  deal=535084631
  order=557416654
  volume=0.1
  price=108.015
  bid=108.015
  ask=108.02
  comment=Request executed
  request_id=55
  retcode_external=0
  request=TradeRequest(action=1, magic=234000, order=0, symbol='USDJPY', volume=0.1, price=108.018, stoplimit=0.0, ...
      traderequest: action=1
      traderequest: magic=234000
      traderequest: order=0
      traderequest: symbol=USDJPY
      traderequest: volume=0.1
      traderequest: price=108.018
      traderequest: stoplimit=0.0
      traderequest: sl=0.0
      traderequest: tp=0.0
      traderequest: deviation=20
      traderequest: type=1
      traderequest: type_filling=2
      traderequest: type_time=0
      traderequest: expiration=0
      traderequest: comment=python script close
      traderequest: position=557416535
      traderequest: position_by=0

参照

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