私のauカブコム証券のkabuステーションで自動売買プログラムの説明(5) エントリ注文が約定した価格を取得 (order_info.py)

スポンサーリンク

order_info.pyのソースコード

import urllib.request
import json
import pprint
import board2
import settings

def orders_info():
    url = 'http://localhost:' + settings.port + '/kabusapi/orders'
    params = { 'product': 0, }
    req = urllib.request.Request('{}?{}'.format(url, urllib.parse.urlencode(params)), method='GET')
    req.add_header('Content-Type', 'application/json')
    req.add_header('X-API-KEY', settings.token)

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

            # 注文情報を取得
            firstOrder = content[len(content)-1]
            firstOrderDetails = firstOrder['Details']
            firstDetailOrder = firstOrderDetails[len(firstOrderDetails)-1]
            settings.orderPrice = firstDetailOrder['Price']

            #注文銘柄の現在価格を調査(即決済の可能性ため)
            board2.board2()

    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
    orders_info()

これも、kabuステーションのサンプルからあまり追加はありません。

kabucom/kabusapi
kabuステーションAPI ポータル. Contribute to kabucom/kabusapi development by creating an account on GitHub.

注文情報から決済価格を取得

18行目から22行目までで、注文情報の戻り値から約定価格を取得しています。

kabuステーションAPIの「/orders」という注文約定照会APIは、注文番号を指定することができます。

しかし、私はauカブコム証券では手動の取引もしないし、別のシステムトレードプログラムを動かしてもいないので、注文番号を指定していません。
なぜならば、最新の注文がさっき出したエントリ発注注文に決まっているからです。

注文番号を指定して情報を取得すると、値が配列じゃない1つのJSONで返却されるならまだしも、auカブコム証券の注文約定照会APIは、必ず配列で戻り値を返却するので、どうせ配列から値を取り出すコーディングはしなければならず、注文番号を指定するだけ余計な手間だからです。

しかし、逆に言えば、auカブコム証券では手動の取引をしていたり、別のシステムトレードプログラムを動かしている場合は、/ordersの呼び出しに注文番号の指定は必須です。
その場合は、前のエントリ発注の戻り値から注文番号を取り出し、/ordersの引数に渡すようにしてください。

もう1回、最新の株価を取得する

流れとしては次に、数珠繋ぎ方式で利食注文の指値発注をします。

しかし、エントリ注文からこれまでの間にすでに値動きがあり、すでに利食い価格を超えている場合がありえます。

そのため、その前に24~25行目で、今一度最新株価を取得する処理を数珠繋ぎ方式で呼び出します。

コメント