MarketOrder_Oanda_ver1

概要

OandaFX用の新規成り行きの注文関数.注文量,通貨ペア量を指定して使う.

引数

  1. OandaのアカウントID(str型)
  2. api※
  3. 通貨ペア(***_***の形式,str型)
  4. 注文通貨量(買いなら***,売りなら-***の形式,int型)

※次のように定義:
api= API(access_token=*****, environment=”practiceまたはlive”)

戻り値

    1. 約定通貨量(買いなら***,売りなら-***の形式,int型)
    2. 約定時のレート(円,float型)
    3. 約定エラーフラグ(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で返ってきたことは一度もない.

コメント

タイトルとURLをコピーしました