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にはマイナス値が代入されています)、
合致する場合は、即決済処理に進んでいます。
コメント