私のauカブコム証券のkabuステーションで自動売買プログラムの説明(10) 利食い指値注文キャンセル(cancelorder.py)

スポンサーリンク

cancelorder.pyのソースコード

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

def cancelorder():
    obj = { 'OrderID': settings.orderID, 'Password': settings.password }
    json_data = json.dumps(obj).encode('utf8')

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

    try:
        print('###cancelorder')
        with urllib.request.urlopen(req) as res:
            print(res.status, res.reason)
            for header in res.getheaders():
                print(header)
            print()
            content = json.loads(res.read())
            pprint.pprint(content)

            #損切り成行注文へ
            settle_now.settle_now()


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

kabuステーションAPIでは、同じ1つのポジションに2つの返済注文は出せない

損切り成行注文を発注する前に、グローバル変数格納用モジュール(settig.py)から、利食い指値注文の注文番号を取得し、利食い指値注文をキャンセルしています。

これは、kabuステーションAPIの仕様で、同じ信用取引注文に同時に2つの返済注文を発注するとエラーになるからです。

その後で、数珠繋ぎ方式で損切り成行注文を発注しています。

損切り成行注文発注は、利食い成行注文発注と全く同じ

損切り成行注文発注は、価格を指定しない返済注文であるため、内容は利食い成行注文と全く同じになります。注文を発注するタイミングが違うだけです。

したがって、利食い成行注文発注で使用したsettle_now.pyを使いまわします。

一旦全部説明終わりました

あとは、グローバル変数モジュール(setting.py)の説明をしようかと思っていますが、本体の説明はこれで終わりです。

まあまあ、簡単だったのではないでしょうか。

何か質問等ありましたら、遠慮なくコメントしてください。

追記 : キャンセル後、損切り注文発注前にauカブコム証券のサーバで処理が完了するのを待つ必要があるみたい

このブログを書く中で、素早く損切りするために、その待つ処理を省いたらエラーになりました。
より、詳細な情報がはっきりしましたら、プログラムのロジックも変えて、ブログの説明も書き直したいと思います。

コメント