私のauカブコム証券のkabuステーションで自動売買プログラムの説明(4) エントリ成行注文発注 (sendorder_entry.py)

スポンサーリンク

sendorder_entry.pyのソースコード

import urllib.request
import json
import pprint
import order_info
import time
import settings

def sendorder_entry():
    obj = { 'Password': settings.password,
            'Symbol': settings.symbol,
            'Exchange': 1,
            'SecurityType': 1,
            'Side': settings.side,
            'CashMargin': 2,
            'MarginTradeType': 1,
            'DelivType': 0,
            'AccountType': 4,
            'Qty': settings.qty,
            'ClosePositionOrder': 0,
            'Price': 0,
            'ExpireDay': 0,
            'FrontOrderType': 10}
    json_data = json.dumps(obj).encode('utf-8')

    url = 'http://localhost:' + settings.port + '/kabusapi/sendorder'
    req = urllib.request.Request(url, json_data, method='POST')
    req.add_header('Content-Type', 'application/json')
    req.add_header('X-API-KEY', settings.token)

    try:
        print('###sendorder_entry')
        with urllib.request.urlopen(req) as res:

            #約定するまで1分待つ
            time.sleep(settings.intervalAfterOrder)

            # 約定した価格を調査する
            order_info.orders_info()

    except urllib.error.HTTPError as e:
        print(e)
        content = json.loads(e.read())
        pprint.pprint(content)
    except Exception as e:
        print(e)

if __name__ == "__main__":
    import sys
    sendorder_entry()

エントリ注文を成行(‘FrontOrderType’: 10)で発注しています。ほぼkabuステーションのサンプルぼそのままです。

https://github.com/kabucom/kabusapi/blob/master/sample/Python/kabusapi_sendorder_cash_sell.py

発注後、数珠繋ぎ方式で約定価格を調査する処理を呼びだしています。

ポイントは、41行目で1分待っているところでしょうか(settings.intervalAfterOrderに60秒を設定しています)。

これは、auカブコム証券のシステムで、成行とはいえ発注から即決済されることはなく、間髪入れずに約定価格を取得しようとしても取れないからです。

発注数が少ない場合は約定まで1分もかからないかもしれませんが、私の現在の設定の利食い幅、損切り幅ともに、1分間以内でその値に達することはそうないので、1分間でよしとしています。

コメント