概要
OandaFX用の新規成り行きの注文関数.注文量,通貨ペア量を指定して使う.
引数
- OandaのアカウントID(str型)
- api※
- 通貨ペア(***_***の形式,str型)
- 注文通貨量(買いなら***,売りなら-***の形式,int型)
※次のように定義:
api= API(access_token=*****, environment=”practiceまたはlive”)
戻り値
-
- 約定通貨量(買いなら***,売りなら-***の形式,int型)
- 約定時のレート(円,float型)
- 約定エラーフラグ(0 or 1,1ならエラー,int型)
コード
import oandapyV20.endpoints.instruments as instruments
import oandapyV20.endpoints.orders as orders
#201118 Oandaでの新規注文用関数.引数は順に通貨ペア,±取引通貨量
def MarketOrder_Oanda_ver1(accountID,api,CurrencyPair,OrderUnits):
Result_OrderUnits=0#約定通貨量を初期化する
Result_OrderPrice=9999#約定レートを初期化する
ErrorCheck = 1 #エラーチェックを初期化(エラーなら1).約定されたら0にする
iOrder = 0 # 取引回数を初期化
units_str = str(int(OrderUnits))
#print(units_str)
# 注文情報
order_data = {
"order":{
"instrument": CurrencyPair,
"units": units_str,
"type": "MARKET"
}
}
# APIに対する注文書を作成
o = orders.OrderCreate(accountID, data=order_data)
while(iOrder<3):
# 注文要求
Results=api.request(o)
Result_CurrencyPair_str=Results['orderFillTransaction']['instrument'] # 約定ペア
Result_OrderUnits_str=Results['orderFillTransaction']['units'] # 約定通貨量
Result_OrderPrice_str=Results['orderFillTransaction']['price'] # 約定レート
if FuncGeneral.is_num(Result_OrderUnits_str)==True:#返ってきたResultsの文字列が数字なら,約定成立と見做せる
Result_OrderUnits=int(Result_OrderUnits_str)#約定通貨量をint変換
Result_OrderPrice =float(Result_OrderPrice_str)
if Result_OrderUnits == OrderUnits:#注文した通貨量と,約定した通貨量が同じならループを抜ける
ErrorCheck = 0
break
iOrder=iOrder+1
return(Result_OrderUnits,Result_OrderPrice,ErrorCheck)
python用ライブラリ”oandapyV20”をインストール,インポートして使う.
指定した通貨量が約定されなかったとき,2回までリトライするようにした.効果があるかはわからないが,運用から2か月現在,今のところ,エラーフラグが1で返ってきたことは一度もない.


コメント