class Test: def __init__(self): self.data = [] def add_data(self, *args): '''add args to self.data''' self.data.append(args) def show_data(self): '''return self.data''' return self.data botfw.setup_logger(logging.INFO) # 指定したport番号でlocalhostからのみアクセス可能なUDPのポートを開きます cmd_server = botfw.CmdServer(55555) # '$ ss -upl' でポートが確かに開いてるか確認できます # 外部から呼び出したい関数をCmdに追加 cmd_server.register_command(sum_str) # クラスメソッドを登録する場合 test = Test() cmd_server.register_command(test.add_data) # ログを表示したくない場合は log=False cmd_server.register_command(test.show_data) # 返信が必要ない場合は response=False # 定義済みコマンド cmd = botfw.Cmd(globals()) cmd_server.register_command(cmd.eval) # あらゆる処理を実行できるコマンド。主にデバッグ用
exchange = fw.Bitflyer SYMBOL = 'FX_BTC_JPY' MIN_SIZE = 0.01 # XBTUSD @bitmex # exchange = fw.Bitmex # SYMBOL = 'BTC/USD' # MIN_SIZE = 1 # BTCUSDT @binance(future) # exchange = fw.BinanceFuture # SYMBOL = 'BTC/USDT' # MIN_SIZE = 0.001 # ==================== ここから取引所共通のコード ==================== fw.setup_logger(logging.INFO) log = logging.getLogger() ex = exchange() ex.create_basics(ccxt_config) api = ex.api ws = ex.websocket om = ex.order_manager ogm = ex.order_group_manager # ポジション自動修復。 BF現物は非対応(手数料がポジションから引かれる為) # ogm.set_position_sync_config(SYMBOL, MIN_SIZE, MIN_SIZE * 100) trade = ex.create_trade(SYMBOL) orderbook = ex.create_orderbook(SYMBOL) og = ex.create_order_group(SYMBOL, 'test1')
# クライアント側のon_openで購読したいチャンネルの情報を送信 # ws.send('{"exchange": "Bitflyer", "symbol": "FX_BTC_JPY"}') # 複数チャンネルには対応していないのでチャンネルごとにwebsocketを生成してください。 import logging import json import sys from websocket_server import WebsocketServer import botfw as fw server_port, debug_port = sys.argv[1:] log = logging.getLogger() fw.setup_logger() # デバッグ用 cmd = fw.Cmd(globals()) cmd_server = fw.CmdServer(int(debug_port)) cmd_server.register_command(cmd.eval) cmd_server.register_command(cmd.exec) cmd_server.register_command(cmd.print, log=False) clients = {} # {client: ((exchange, symbol), callback)} trades = {} # {(exchange, symbol)} def on_new_client(client, server): addr = client['address'] log.info(f'{addr}: OPEN')