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

スポンサーリンク

sendorder_takeprofit.pyのソースコード

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

def sendorder_takeprofit():
    # 利食い指値注文
    obj = { 'Password': settings.password,
            'Symbol': settings.symbol,
            'Exchange': 1,
            'SecurityType': 1,
            'Side': '2',
            'CashMargin': 3,
            'MarginTradeType': 1,
            'DelivType': 2,
            'AccountType': 4,
            'Qty': settings.qty,
            'ClosePositionOrder': 0,
            'Price': settings.orderPrice - settings.margin,
            'ExpireDay': 0,
            'FrontOrderType': 20}
    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_takeprofit')
        with urllib.request.urlopen(req) as res:
            content = json.loads(res.read())

            #利食い指値注文の注文IDを保存
            settings.orderID = content['OrderId']

            #損切り用値監視
            websocket.websocketA1()
            
    except urllib.error.HTTPError as e:
        print('###kabusapi_sendorder2:HTTPError')
        print(e)
        content = json.loads(e.read())
        pprint.pprint(content)
    except Exception as e:
        print('###kabusapi_sendorder2:Exception')
        print(e)
        
if __name__ == "__main__":
    import sys
    sendorder_takeprofit()

21行目で、グローバル変数格納用モジュール(setting.py)から、エントリ約定価格から、売りエントリなので利食い幅を引いて利食い価格の指値として、34行目で指値発注をしています。

そして、この利食い指値注文の注文IDだけは、キャンセル注文で絶対に必要になるのでsetting.pyに保存します。

その後で、数珠繋ぎ方式で、損切り用値監視モジュールを呼び出します。

コメント