auカブコム証券 kabuステーションAPI 先物取引用プログラム(5) WebSocketでの価格監視 ~エントリ用

スポンサーリンク

websocket_entry.py

import sys
import websocket
import _thread
import pprint
import json
import settings
import sendorder_entry
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"]
    if curPrice is None:
        settings.previous_current_value = 0.0
        return
    pprint.pprint(curPrice)

    f_curPrice = float(curPrice)
    pprint.pprint(f_curPrice)
    
    if settings.previous_current_value > 0.0:
        if settings.previous_current_value - f_curPrice >=  settings.entry_delta:
            # エントリ
            sendorder_entry.sendorder_entry()
            ws.close()
    # 現在価格を1つ前の価格として格納する
    settings.previous_current_value = f_curPrice
    pprint.pprint(curPrice)

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_entry():
    printWithTime('--- websocket_entry 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_entry --- ')

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

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

いつものWebSocketによるPUSH配信受信ブログラムです。トレーリングストップのブログラムとおなじように、1つ前の値をグローバル変数に入れておき、直近の値と比較するようにしています。

その差分が一定の値を超えたかどうかでエントリ判定としています。

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

コメント