import multiprocessing import os import signal import time import bitbank alive = True def main(): global alive procs = [*bitbank.init()] while alive: for i in range(len(procs)): procs[i].tick() time.sleep(0.5) def on_exit(sig, x): global alive alive = False proc = multiprocessing.Process(target = main) proc.start() signal.signal(signal.SIGTERM, on_exit) signal.pause() proc.join() # while True: # print("start tick") # # # ---- get assets # assets = pri.get_asset()["assets"] # onhand = {} # locked = {} # for i in range(len(assets)): # coin = assets[i]["asset"] # onhand[coin] = float(assets[i]["onhand_amount"]) # locked[coin] = float(assets[i]["locked_amount"]) # # # ---- get current price # candles = pub.get_candlestick("btc_jpy", "1min", now.strftime("%Y%m%d"))["candlestick"][0]["ohlcv"]; # latest_candle = candles[len(candles)-1] # begin = int(latest_candle[0]) # high = int(latest_candle[1]) # low = int(latest_candle[2]) # end = int(latest_candle[3]) # # # ---- cancel existing orderes # prev_orders = pri.get_active_orders("btc_jpy")["orders"] # cancel_orders = [] # for i in range(len(prev_orders)): # id = prev_orders[i]["order_id"] # status = prev_orders[i]["status"] # side = prev_orders[i]["side"] # price = int(prev_orders[i]["price"]) # # if status == "UNFILLED": # diff = abs(end-price)/end # if side == "buy": # if diff < -0.0005: # cancel_orders.append(str(id)) # elif side == "sell": # if diff > 0.003: # cancel_orders.append(str(id)) # # if len(cancel_orders) > 0: # pri.cancel_orders("btc_jpy", cancel_orders) # print("cancelled", len(cancel_orders), "orders") # if len(prev_orders)-len(cancel_orders) > 8: # print("skip making an order because there are too many orderes") # time.sleep(30) # continue # # # ---- get transactions # trans = pub.get_transactions("btc_jpy")["transactions"] # buy_min = low # sell_max = high # for i in range(len(trans)): # exec_at = datetime.datetime.fromtimestamp(trans[i]["executed_at"]/1000) # side = trans[i]["side"] # price = int(trans[i]["price"]) # if now-exec_at < datetime.timedelta(minutes=1): # if side == "buy": # buy_min = min(buy_min, price) # elif side == "sell": # sell_max = max(sell_max, price) # # # ---- make an order # buy_coe = 0.5 # ben_coe = 0.8 # # diff = (end-begin)/end # if diff > 0.002: # buy_coe -= clamp(100*diff/end, 0, 1)*0.2 # elif diff < -0.002: # buy_coe += clamp(100*diff, 0, 1)*0.2 # # print("buy-min:", buy_min, "| sell-max:", sell_max, "| diff:", sell_max-buy_min) # diff = sell_max-buy_min # avg = (sell_max+buy_min)/2 # # buy_price = avg - diff*buy_coe*ben_coe # sell_price = avg + diff*(1-buy_coe)*ben_coe # # buy_jpy = max((onhand["jpy"]-locked["jpy"])*0.1, (onhand["btc"]-locked["btc"])*end*0.1) # buy_btc = buy_jpy/buy_price # sell_jpy = buy_btc*sell_price # sell_btc = buy_btc # # try: # pri.order("btc_jpy", str(buy_price), str(buy_btc), "buy", "limit", True) # print("[buy] btc:", buy_btc, "| jpy:", -buy_jpy, "| price:", buy_price) # except Exception as e: # print(e) # # try: # pri.order("btc_jpy", str(sell_price), str(sell_btc), "sell", "limit", True) # print("[sel] btc:", -sell_btc, "| jpy:", sell_jpy, "| price:", sell_price) # except Exception as e: # print(e) # # time.sleep(10)