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カブコム証券のサーバで処理が完了するのを待つ必要があるみたい
このブログを書く中で、素早く損切りするために、その待つ処理を省いたらエラーになりました。
より、詳細な情報がはっきりしましたら、プログラムのロジックも変えて、ブログの説明も書き直したいと思います。
コメント