更新日時:2025-11-04
ファイルは全て同じフォルダ内(Scriptsフォルダ内)に配置すること
Meta Trader5 の[アルゴリズム取引]を有効にすること
AutoTrading.py
# モジュール インポート
import MetaTrader5_Client as mt5c
#-- <設定>
# while()の無限ループ N秒間スリープ
sleep_sec = 1
#-- </設定>
#-- OnTick
def OnTick():
#print ("OnTick()" , mt5c.time.strftime("%Y-%m-%dT%H:%M:%S", mt5c.time.localtime()), "; symbol_tick=", client.get_symbol_tick('time'))
#pass
return None
#-- 新規注文
def OnOrderNew():
#print ("OnOrderNew()")
#-- <新規エントリー>
if client.Setting['use_newOrder'] == True:
# <新規buyエントリー>
if client.Setting['use_newOrderBuy'] == True:
if (client.Position['buy']['cnt'] == 0): # buyポジションがない場合
# 新規買い注文 実行
res = client.new_order_send("buy")
print ("新規注文 買い 結果:", res['result'], ";", res)
# </新規buyエントリー>
# <新規sellエントリー>
if client.Setting['use_newOrderSell'] == True:
if (client.Position['sell']['cnt'] == 0): # sellポジションがない場合
# 新規売り注文 実行
res = client.new_order_send("sell")
print ("新規注文 売り 結果:", res['result'], ";", res)
# </新規sellエントリー>
#-- </新規エントリー>
#-- 追加注文
def OnOrderNanpin():
#print ("OnOederNanpin()")
#-- <追加エントリー>
if client.Setting['use_nanpinOrder'] == True:
# <追加buyエントリー>
if client.Setting['use_nanpinOrderBuy'] == True:
if (client.is_nanpin_order('buy') == True):
# 追加買い注文 実行
res = client.nanpin_order_send("buy")
print ("追加注文 買い 結果:", res['result'], ";", res)
# </追加buyエントリー>
# <追加sellエントリー>
if client.Setting['use_nanpinOrderSell'] == True:
if (client.is_nanpin_order('sell') == True):
# 追加売り注文 実行
res = client.nanpin_order_send("sell")
print ("追加注文 売り 結果:", res['result'], "; ", res)
# </追加sellエントリー>
#-- </追加エントリー>
#-- 決済注文
def OnOrderClose():
#print ("OnOederClose()")
#-- <決済>
if client.Setting['use_close'] == True:
# <buy決済>
if client.Setting['use_closeBuy'] == True:
if (client.is_close_order('buy') == True):
# 買い決済 実行
res = client.close_order('buy')
print ("決済 買い 結果:", res['result'], "; ", res)
# </buy決済>
# <sell決済>
if client.Setting['use_closeSell'] == True:
if (client.is_close_order('sell') == True):
# 売り決済 実行
res = client.close_order('sell')
print ("決済 売り 結果:", res['result'], "; ", res)
# </sell決済>
#-- </決済>
# インスタンスの生成
client = mt5c.Order()
# 初期化
client.initialize()
# 自動取引チェック
if (client.check_auto_trade() == False):
exit()
#-- <無限ループ:ここから>
while True:
# <設定ファイル リロード>
client.load_configs()
# <ポジションの確認>
client.get_positions()
#-- 相場変動
if (client.is_tick() == True):
OnTick()
#-- 新規注文
if (client.is_order_new() == True):
OnOrderNew()
#-- 追加注文
if (client.is_order_nanpin() == True):
OnOrderNanpin()
#-- 決済注文
if (client.is_order_close() == True):
OnOrderClose()
if (sleep_sec > 0):
client.sleep(sleep_sec, False)
#-- </無限ループ:ここまで>
# 継承クラスのインスタンス破棄
del(client)
MetaTrader5_Client.py
import MetaTrader5 as mt5
import pandas as pd
import time
import datetime
import pyautogui
import importlib
import os
#---------------
# MetaTrader5 接続・切断クラス
#---------------
class MT5_Client:
# 初期設定
_init = {}
# MetaTrader5のメソッド
_mt5 = None
# MT5 初期設定 完了判定
_is_initialized = False
#---------------
# コンストラクタ
# コンストラクタで初期化処理を実行
#---------------
def __init__(self, _init = None):
self._mt5 = mt5
#---------------
# デストラクタ
# デストラクタで終了処理を実行
#---------------
def __del__(self):
if self._is_initialized:
self.shutdown()
#---------------
# 初期化
#---------------
def initialize(self):
if (self._mt5 and not self._mt5.initialize()):
print ("initialize() failed, error code =", self._mt5.last_error())
self._is_initialized = False
else:
self._is_initialized = True
#---------------
# MT5 接続を閉じる
#---------------
def shutdown(self):
if self._is_initialized:
self._mt5.shutdown()
#---------------
# 自動売買(アルゴリズム取引) 確認
#---------------
def check_auto_trade(self):
if (self.is_auto_trade() == True):
return True
else:
messages = ['MT5の自動売買が無効になっています', '[アリゴリズム取引]を有効にしてください']
print (':'.join(messages))
print (pyautogui)
if (pyautogui is not None):
pyautogui.alert('\r\n'.join(messages))
return False
#---------------
# 自動売買(アルゴリズム取引)の有効確認
#---------------
def is_auto_trade(self):
#return (True if (self._mt5.terminal_info().trade_allowed == True) else False)
if (self._mt5.terminal_info().trade_allowed == True):
return True
else:
return False
#---------------
# Sleep (N秒間スリープ)
# @param int _sec 秒数
#---------------
def sleep(self, _sec = 5, _view = False):
if (_sec > 0):
#-- N秒間スリープ
if (_view == True):
print("Sleep開始 (", _sec, "秒)")
time.sleep(_sec)
if (_view == True):
print("Sleep終了")
#---------------
# ターミナルの設定とステータスに関する情報を表示
#---------------
def terminal_info(self):
terminal_info = self._mt5.terminal_info()
if terminal_info is not None:
# ターミナルデータを「そのまま」表示する
print(terminal_info)
# データをリスト形式で表示する
print("Show terminal_info()._asdict():")
terminal_info_dict = self._mt5.terminal_info()._asdict()
for prop in terminal_info_dict:
print(" {}={}".format(prop, terminal_info_dict[prop]))
print()
# ディクショナリをDataFrameに変換して出力する
df=pd.DataFrame(list(terminal_info_dict.items()),columns=['property','value'])
print("terminal_info() as dataframe:")
print(df)
return None
#---------------
# MT5_Client 継承クラス
#---------------
class Order(MT5_Client):
#-- 設定情報
Config = {
'use_newOrder': False
,'use_newOrderBuy': False
,'use_newOrderSell': False
,'use_nanpinOrder': False
,'use_nanpinOrderBuy': False
,'use_nanpinOrderSell': False
,'use_close': False
,'use_closeBuy': False
,'use_closeSell': False
,'symbol': "" #取引対象の通貨ペア
,'first_lot_buy': 0.01 #初期ロット (買い)
,'first_lot_sell': 0.01 #初期ロット (売り)
,'nanpin_range_buy': 0 #ナンピン幅 (買い:ポイント)
,'nanpin_range_sell': 0 #ナンピン幅 (売り:ポイント)
,'martin_rate_buy': 1.5 #マーチン倍率 (買い)
,'martin_rate_sell': 1.5 #マーチン倍率 (売り)
,'profit_target': 0 #利益目標
,'magic_number': 0 #マジックナンバー
,'slippage': 10 #スリッページ
,'interval_sec_tick': 0 #相場変動 インターバル(秒)
,'interval_sec_order_new': 10 #新規注文 インターバル(秒)
,'interval_sec_order_nanpin': 10 #追加注文 インターバル(秒)
,'interval_sec_order_close': 10 #決済 インターバル(秒)
}
Setting = {}
#-- 価格の最小単位
point = 0
#-- 取得したポジション情報
positions = []
#-- ポジション
PositionDefault = {
'cnt': 0
,
'buy': {
'cnt': 0
,'profit': 0
,'lot': 0
,'first_lot': 0
,'last_lot': 0
,'price': 0
}
,
'sell': {
'cnt': 0
,'profit': 0
,'lot': 0
,'first_lot': 0
,'last_lot': 0
,'price': 0
}
}
Position = {
'cnt': 0
,
'buy': {}
,
'sell': {}
}
# 取得したsymbolのtick情報
_symbol_tick = {}
# インターバル制御 更新時間
_Uptime = {
# 相場変動 インターバル更新時間
'interval_tick': 0
# 新規注文 インターバル更新時間
,'interval_order_new': 0
# 追加注文 インターバル更新時間
,'interval_order_nanpin': 0
# 決済 インターバル更新時間
,'interval_order_close': 0
# 設定ファイル 更新時間
,'configs': 0
# 相場変動 更新時間 (取得したsymbolのtick情報更新時間)
,'tick': 0
}
#---------------
# コンストラクタ
#---------------
def __init__(self, _init = None):
# 規定クラスのコンストラクタ呼び出し
super().__init__(_init)
# 設定
self.Setting = self.Config
#---------------
# デストラクタ
#---------------
def __del__(self):
# 規定クラスのデストラクタ呼び出し
super().__del__()
#---------------
# 初期化
#---------------
def initialize(self):
super().initialize()
# 設定ファイル 読み込み
self.load_configs()
#---------------
# 設定ファイル 読み込み
#---------------
def load_configs(self):
import MetaTrader5_Configs
importlib.reload(MetaTrader5_Configs)
if (os.path.isfile((os.path.dirname(__file__) + '\\MetaTrader5_Configs.py'))):
filetime = (os.path.getmtime(os.path.dirname(__file__) + '\\MetaTrader5_Configs.py'))
if (self._Uptime['configs'] != filetime):
self._Uptime['configs'] = filetime
for k, v in MetaTrader5_Configs.__dict__.items():
if (k in self.Config):
self.Setting[k] = v
print ("設定ファイル読み込み:", datetime.datetime.fromtimestamp(self._Uptime['configs']).strftime('%Y年%m月%d日 %H:%M:%S'))
# 価格の最小単位 セット
self.set_point()
#---------------
# 相場変動 インターバル制御
#
# @return bool True=変動あり False=変動なし
#---------------
def interval_time_tick(self, _sec = 0):
ret = False
_time = time.time()
if (self._interval_time_tick + self.Setting['interval_sec_tick'] < _time):
self._interval_time_tick = _time
ret = True
return ret
#---------------
# 新規注文 インターバル制御
#
# @return bool True=実行可能 False=実行不可能
#---------------
def is_order_new(self):
ret = False
_time = time.time()
if (self._Uptime['interval_order_new'] + self.Setting['interval_sec_order_new'] < _time):
self._Uptime['interval_order_new'] = _time
ret = True
return ret
#---------------
# 追加注文 インターバル制御
#
# @return bool True=実行可能 False=実行不可能
#---------------
def is_order_nanpin(self):
ret = False
_time = time.time()
if (self._Uptime['interval_order_nanpin'] + self.Setting['interval_sec_order_nanpin'] < _time):
self._Uptime['interval_order_nanpin'] = _time
ret = True
return ret
#---------------
# 決済注文 インターバル制御
#
# @return bool True=実行可能 False=実行不可能
#---------------
def is_order_close(self):
ret = False
_time = time.time()
if (self._Uptime['interval_order_close'] + self.Setting['interval_sec_order_close'] < _time):
self._Uptime['interval_order_close'] = _time
ret = True
return ret
#---------------
# symbolのtick情報を取得・代入
# _symbol_tick に格納する
#
# @return bool True=更新あり False=更新なし
#---------------
def symbol_tick(self):
ret = False
# symbolのtick情報を取得
symbol_info = self.symbol_info_tick()._asdict()
if (symbol_info and self._Uptime['tick'] != symbol_info.get('time')):
self._symbol_tick = symbol_info
self._Uptime['tick'] = symbol_info.get('time')
ret = True
return ret
#---------------
# symbolのtick情報 更新有無
#
# @return bool True=更新あり False=更新なし
#---------------
def is_tick(self):
return self.symbol_tick()
#---------------
# 取得済のsymbolのtick情報(配列の要素)を返す
#---------------
def get_symbol_tick(self, _name):
return self._symbol_tick.get(_name)
#---------------
# 通貨ペアのティック取得
#---------------
def symbol_info_tick(self):
return self._mt5.symbol_info_tick(self.Setting['symbol'])
#---------------
# 価格の最小単位をプロパティにセットする
#---------------
def set_point(self):
self.point = self._mt5.symbol_info(self.Setting['symbol']).point
#---------------
# ポジション 取得
#---------------
def get_positions(self):
# 初期化
for k1 in self.PositionDefault:
if (isinstance(self.PositionDefault[k1], dict) == True):
for k2 in self.PositionDefault[k1]:
self.Position[k1][k2] = self.PositionDefault[k1][k2]
else:
self.Position[k1] = self.PositionDefault[k1]
self.positions = self._mt5.positions_get(group='*'+self.Setting['symbol']+'*')
positions_len = len(self.positions)
if (positions_len > 0): # 全てのポジションを確認
for i in range(positions_len):
order_type = self.positions[i][5] # buyかsellか取得
profit = self.positions[i][15] # ポジションの含み損益を取得
if (order_type == 0): # buyポジションの場合
self.Position['buy']['cnt'] += 1 # buyポジションのカウント
self.Position['buy']['profit'] += profit # buyポジションの含み損益に加算
self.Position['buy']['lot'] = self.positions[i][9] # 最新のbuyポジションのlot数を取得
self.Position['buy']['price'] = self.positions[i][10] # 最新のbuyポジションの取得価格を取得
if (self.Position['buy']['first_lot'] == 0):
self.Position['buy']['first_lot'] = self.positions[i][9]
else:
self.Position['buy']['last_lot'] = self.positions[i][9]
elif (order_type == 1): # sellポジションの場合
self.Position['sell']['cnt'] += 1 # sellポジションのカウント
self.Position['sell']['profit'] += profit # sellポジションの含み損益に加算
self.Position['sell']['lot'] = self.positions[i][9] # 最新のsellポジションのlot数を取得
self.Position['sell']['price'] = self.positions[i][10] # 最新のsellポジションの取得価格を取得
if (self.Position['sell']['first_lot'] == 0):
self.Position['sell']['first_lot'] = self.positions[i][9]
else:
self.Position['sell']['last_lot'] = self.positions[i][9]
self.Position['cnt'] = self.Position['buy']['cnt'] + self.Position['sell']['cnt']
#print (self.Position)
#---------------
# ポジション情報を取得
#---------------
def positions_get(self):
return self._mt5.positions_get(group='*'+self.Setting['symbol']+'*')
#---------------
# 新規注文
#
# @param string _type "buy":買い "sell":売り
# @return dict
#---------------
def new_order_send(self, _type):
Ret = {'result':False, 'volume':0}
# 指定した金融商品の最後のティックを取得
symbol_tick = self._mt5.symbol_info_tick(self.Setting['symbol'])
# type, price, lot
type = None
price: float = 0
lot: float = 0
if (_type == "buy"):
type = self._mt5.ORDER_TYPE_BUY
price = symbol_tick.ask
lot = self.Setting['first_lot_buy']
elif (_type == "sell"):
type = self._mt5.ORDER_TYPE_SELL
price = symbol_tick.bid
lot = self.Setting['first_lot_sell']
# リクエストデータ生成
request = {
'symbol': self.Setting['symbol'] # 通貨ペア(取引対象)
,'action': self._mt5.TRADE_ACTION_DEAL # 成行注文
,'type': type # タイプ
,'volume': lot # ロット数
,'price': price # 注文価格
,'deviation': self.Setting['slippage'] # スリッページ
,'comment': 'first_buy' # 注文コメント
,'magic': self.Setting['magic_number'] # マジックナンバー
,'type_time': self._mt5.ORDER_TIME_GTC # 注文有効期限
,'type_filling': self._mt5.ORDER_FILLING_IOC # 注文タイプ
}
# 新規注文 実行
response = self._mt5.order_send(request)
# 結果
if response.retcode:
Response = response._asdict()
#Ret = result
# 結果 注文成功
if Response.get('retcode') == self._mt5.TRADE_RETCODE_DONE:
Ret['result'] = True
Ret['volume'] = Response.get('volume')
return Ret
#---------------
# 追加注文 可否判定
#
# @param string _type "buy":買い "sell":売り
# @return bool
#---------------
def is_nanpin_order(self, _type):
ret = False
# 指定した金融商品の最後のティックを取得
symbol_tick = self._mt5.symbol_info_tick(self.Setting['symbol'])
# type
if (_type == "buy"):
if (self.Position['buy']['cnt'] > 0 and symbol_tick.ask < self.Position['buy']['price'] - self.Setting['nanpin_range_buy'] * self.point):
ret = True
elif (_type == "sell"):
if (self.Position['sell']['cnt'] > 0 and symbol_tick.bid > self.Position['sell']['price'] + self.Setting['nanpin_range_sell'] * self.point):
ret = True
return ret
#---------------
# 追加注文
#
# @param string _type "buy":買い "sell":売り
# @param float _lot
# @return dict
#---------------
def nanpin_order_send(self, _type):
Ret = {'result':False, 'volume':0}
# 指定した金融商品の最後のティックを取得
symbol_tick = self._mt5.symbol_info_tick(self.Setting['symbol'])
# type, price, lot
type = None
price: float = 0
lot: float = 0
# 買い
if (_type == "buy"):
# タイプ
type = self._mt5.ORDER_TYPE_BUY
# 価格
price = symbol_tick.ask
# ロット数
lot = self.lot_martin(self.Position['buy']['first_lot'], self.Position['buy']['last_lot'], self.Setting['martin_rate_buy'], self.Position['buy']['cnt'])
# 売り
elif (_type == "sell"):
# タイプ
type = self._mt5.ORDER_TYPE_SELL
# 価格
price = symbol_tick.bid
# ロット数
lot = self.lot_martin(self.Position['sell']['first_lot'], self.Position['sell']['last_lot'], self.Setting['martin_rate_sell'], self.Position['sell']['cnt'])
# リクエストデータ生成
request = {
'symbol': self.Setting['symbol'] # 通貨ペア(取引対象)
,'action': self._mt5.TRADE_ACTION_DEAL # 成行注文
,'type': type # タイプ
,'volume': lot # ロット数
,'price': price # 注文価格
,'deviation': self.Setting['slippage'] # スリッページ
,'comment': 'nanpin_buy' # 注文コメント
,'magic': self.Setting['magic_number'] # マジックナンバー
,'type_time': self._mt5.ORDER_TIME_GTC # 注文有効期限
,'type_filling': self._mt5.ORDER_FILLING_IOC # 注文タイプ
}
if (lot > 0):
# 追加注文 実行
response = self._mt5.order_send(request)
if response.retcode:
Response = response._asdict()
# 結果 注文成功
if Response.get('retcode') == self._mt5.TRADE_RETCODE_DONE:
Ret['result'] = True
Ret['volume'] = Response.get('volume')
return Ret
#---------------
# 決済 可否判定
#
# @param string _type "buy":買い "sell":売り
# @return bool
#---------------
def is_close_order(self, _type):
ret = False
# 指定した金融商品の最後のティックを取得
symbol_tick = self._mt5.symbol_info_tick(self.Setting['symbol'])
# type, price
type = None
price: float = 0
if (_type == "buy"):
if (self.Position['buy']['cnt'] > 0 and self.Position['buy']['profit'] > self.Setting['profit_target'] * self.Position['buy']['cnt']):
ret = True
elif (_type == "sell"):
if (self.Position['sell']['cnt'] > 0 and self.Position['sell']['profit'] > self.Setting['profit_target'] * self.Position['sell']['cnt']):
ret = True
return ret
#---------------
# 一括決済
#
# @param string _type "buy":買い "sell":売り
# @return dict
#---------------
def close_order(self, _type):
Ret = {'result':False, 'success':0, 'failure':0, 'total':0}
if (self.Position['cnt'] > 0 and self.Position[_type]['cnt'] > 0):
# type
type = None
if (_type == "buy"):
type = self._mt5.ORDER_TYPE_BUY
elif (_type == "sell"):
type = self._mt5.ORDER_TYPE_SELL
for i in range(len(self.positions)):
ticket = self.positions[i][0] # チケットナンバーを取得
order_type = self.positions[i][5] # buyかsellか取得
lot = self.positions[i][9] # lot数を取得
if (type == order_type): # ポジションをクローズ
Ret['total'] += 1
Res = self.close_order_send(_type, lot, ticket)
if (Res.get('result') == True):
Ret['success'] += 1
else:
Ret['failure'] += 1
if (Ret['total'] == (Ret['success'] + Ret['failure'])):
Ret['result'] = True;
return Ret
#---------------
# 決済
#
# @param string _type "buy":買い "sell":売り
# @param float _lot
# @param int _ticket
# @return dict
#---------------
def close_order_send(self, _type, _lot, _ticket):
Ret = {'result':False, 'volume':0}
# 指定した金融商品の最後のティックを取得
symbol_tick = self._mt5.symbol_info_tick(self.Setting['symbol'])
# type, price
type = None
price: float = 0
if (_type == "buy"):
type = self._mt5.ORDER_TYPE_SELL
price = symbol_tick.bid
elif (_type == "sell"):
type = self._mt5.ORDER_TYPE_BUY
price = symbol_tick.ask
# リクエストデータ生成
request = {
'symbol': self.Setting['symbol'] # 通貨ペア(取引対象)
,'action': self._mt5.TRADE_ACTION_DEAL # 成行注文
,'type': type # タイプ
,'volume': _lot # ロット数
,'price': price # 注文価格
,'deviation': self.Setting['slippage'] # スリッページ
,'type_time': self._mt5.ORDER_TIME_GTC # 注文有効期限
,'type_filling': self._mt5.ORDER_FILLING_IOC # 注文タイプ
,'position':_ticket # チケットナンバー
}
# 決済 実行
response = self._mt5.order_send(request)
# 結果
if response.retcode:
Response = response._asdict()
# 結果 注文成功
if Response.get('retcode') == self._mt5.TRADE_RETCODE_DONE:
Ret['result'] = True
Ret['volume'] = Response.get('volume')
return Ret
#---------------
# ロット (マーチン倍率) 乗算
#
# @param float _first_lot
# @param float _last_lot
# @param float _martin
# @param int _pos_cnt
# @return float
#---------------
def lot_martin(self, _first_lot = 0, _last_lot = 0, _martin = 0, _pos_cnt = 0):
ret = 0
if (_first_lot > 0) == False:
return ret
if (_pos_cnt > 0):
ret = self.lot_martin_pow(_first_lot, _martin, _pos_cnt)
if (_last_lot > ret):
ret = _last_lot * _martin
ret = round(ret, 2)
else:
ret = _first_lot
return ret
#---------------
# ロットにマーチン倍率を累乗
#
# @param float _first_lot
# @param float _martin
# @param int _pos_cnt
# @return float
#---------------
def lot_martin_pow(self, _lot = 0, _martin = 0, _cnt = 0):
ret = _lot
if _cnt > 0:
for i in range(_cnt):
ret *= _martin
return ret
MetaTrader5_Configs.py
####################
# 設定情報
####################
#-- 新規注文
# 新規注文 True|False (True=新規注文する False=新規注文しない)
use_newOrder = True
# 新規買い注文 True|False (True=新規買い注文する False=新規買い注文しない)
use_newOrderBuy = True
# 新規売り注文 True|False (True=新規売り注文する False=新規売り注文しない)
use_newOrderSell = True
#-- 追加注文
# 追加注文 True|False (True=追加注文する False=追加注文しない)
use_nanpinOrder = True
# 追加買い注文 True|False (True=追加買い注文する False=追加買い注文しない)
use_nanpinOrderBuy = True
# 追加売り注文 True|False (True=追加売り注文する False=追加売り注文しない)
use_nanpinOrderSell = True
#-- 決済
# 決済 True|False (True=決済する False=決済しない)
use_close = True
# 買い決済 True|False (True=買い決済する False=買い決済しない)
use_closeBuy = True
# 売り決済す True|False (True=売り決済する False=売り決済しない)
use_closeSell = True
# マジックナンバー (int)
magic_number = 1000
# 取引対象の通貨ペア (string)
symbol = 'GOLD'
#symbol = 'BTCUSD'
# 初期ロット (買い) (float)
first_lot_buy = 0.01
# 初期ロット (売り) (float)
first_lot_sell = 0.01
# ナンピン幅 (買い:ポイント) (int)
#nanpin_range_buy = 5000
nanpin_range_buy = 100
# ナンピン幅 (売り:ポイント) (int)
#nanpin_range_sell = 5000
nanpin_range_sell = 100
# マーチン倍率 (買い) (float)
martin_rate_buy = 1.1
# マーチン倍率 (売り) (float)
martin_rate_sell = 1.1
# 利益目標 (日本円) (int)
profit_target = 100
# 相場変動 インターバル (秒) (int)
interval_sec_tick = 0
# 新規注文 インターバル (秒) (int)
interval_sec_order_new = 10
# 追加注文 インターバル (秒) (int)
interval_sec_order_nanpin = 5
# 決済注文 インターバル (秒) (int)
interval_sec_order_close = 2