auカブコム証券 kabuステーションAPI 先物取引用プログラム(10) 取引銘柄監視

スポンサーリンク

websocket_exit.py

import sys
import websocket
import _thread
import pprint
import json
import settings
import settle_now
import datetime
import urllib.request
import time

def on_message(ws, message):
    printWithTime('--- RECV MSG. --- ')
    #print(message)
    content = json.loads(message)
    pprint.pprint(content)
    curPrice = content["CurrentPrice"]
    pprint.pprint(curPrice)

    if((curPrice >= settings.orderPrice + settings.lossCutMargin) \
     or (curPrice <= settings.orderPrice + settings.takeProfitMargin)):
        # 利食い or 損切り値に達した場合は即決済
        settle_now.settle_now()
        ws.close()

def on_error(ws, error):
    if len(error) != 0:
        printWithTime('--- ERROR --- ')
        print(error)

def on_close(ws):
    printWithTime('--- DISCONNECTED --- ')


def on_open(ws):
    printWithTime('--- CONNECTED --- ')

def websocket_exit():
    printWithTime('--- websocket_exit Start--- ')
    url = 'ws://localhost:' + settings.port + '/kabusapi/websocket'
    # websocket.enableTrace(True)
    ws = websocket.WebSocketApp(url,
                            on_message = on_message,
                            on_error = on_error,
                            on_close = on_close)
    ws.on_open = on_open
    ws.run_forever()

    printWithTime('--- websocket_exit --- ')

def printWithTime(message):
    print(str(datetime.datetime.now()) + ' ' + message)

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

これも、他のプログラムとほぼ同じですが、唯一のポイントは以下でしょう。

エントリの約定値「settings.orderPrice」に損切り幅「settings.lossCutMargin」足した値を超えているか、利食い幅「settings.takeProfitMargin」を引いた値を下回っているかを判定し(takeProfitMarginにはマイナス値が代入されています)、

合致する場合は、即決済処理に進んでいます。

先物取引
スポンサーリンク
システムトレードでそこそこ設ける方法

コメント