def sell_less_batch(coin_name, time_type, latest_price, lever_rate=20): global processing, less2more processing = True jRet = json.loads( okFuture.future_position_4fix(coin_name + "_usd", time_type, "1")) flag = True ret = u'没有做空订单' while len(jRet["holding"]) > 0: cancel_uncompleted_order(coin_name, time_type) if flag: amount = jRet["holding"][0]["sell_available"] order_data = gen_orders_data(latest_price, amount, 4, 5) ret = okFuture.future_batchTrade(coin_name + "_usd", time_type, order_data, lever_rate) flag = False else: sell_available = jRet["holding"][0]["sell_available"] ret = okFuture.future_trade(coin_name + "_usd", time_type, '', sell_available, 4, 1, lever_rate) if 'true' in ret: time.sleep(5) jRet = json.loads( okFuture.future_position_4fix(coin_name + "_usd", time_type, "1")) sell_less_suc() if less2more == 1: if buyin_more(coin_name, time_type, latest_price): info = u'发出反手做多信号!!!买入价格:' + str(latest_price) with codecs.open(file_transaction, 'a+', 'utf-8') as f: f.writelines(info + '\n') else: less2more = 0 email_msg = "做空%s批量卖出成交, 时间: %s, 成交结果: %s" \ % (coin_name, timestamp2string(time.time()), ret) thread.start_new_thread(send_email, (email_msg, )) processing = False return True
if order_type == 1: more = 1 elif order_type == 2: less = 1 elif order_type == 3: more = 0 elif order_type == 4: less = 0 elif status == -1: del_list.append(old_order_id) elif int(ts) > int(order_info['create_date'] / 1000) + 3: okFuture.future_cancel(coin.name + "_usd", time_type, old_order_id) if order_type == 1: order_id = buyin_more(okFuture, coin.name, time_type, buy_price) if order_id: order_id_queue.append(order_id) elif order_type == 2: order_id = buyin_less(okFuture, coin.name, time_type, sell_price) if order_id: order_id_queue.append(order_id) elif order_type == 3: order_id = sell_more_price(okFuture, coin.name, time_type, sell_price) if order_id: order_id_queue.append(order_id) elif order_type == 4: order_id = sell_less_price(okFuture, coin.name, time_type, buy_price)
def on_message(ws, message): message = bytes.decode(inflate(message), 'utf-8') # data decompress if 'pong' in message or 'addChannel' in message: return global latest_price, last_avg_price, buy_price, more, less, deque_3s, deque_10s, deque_min, buy_sell_ratio, \ deque_5m, ind_3s, ind_10s, ind_1min, ind_5m, write_lines, last_minute_ts, last_second_ts, order_id_queue, now_time jmessage = json.loads(message) ts = time.time() now_time = timestamp2string(ts) for each_message in jmessage: for jdata in each_message['data']: latest_price = float(jdata[1]) exe_second(ts) exe_minute(ts) deal_entity = DealEntity(jdata[0], float(jdata[1]), round(float(jdata[2]), 3), ts, jdata[4]) handle_deque(deque_3s, deal_entity, ts, ind_3s) handle_deque(deque_10s, deal_entity, ts, ind_10s) handle_deque(deque_min, deal_entity, ts, ind_1min) handle_deque(deque_5m, deal_entity, ts, ind_5m) avg_3s_price = ind_3s.cal_avg_price() avg_10s_price = ind_10s.cal_avg_price() avg_min_price = ind_1min.cal_avg_price() avg_5m_price = ind_5m.cal_avg_price() price_10s_change = cal_rate(avg_3s_price, avg_10s_price) price_1m_change = cal_rate(avg_3s_price, avg_min_price) price_5m_change = cal_rate(avg_3s_price, avg_5m_price) # 单边上涨行情持有做多单,达到卖出条件 if more == 1: if price_1m_change <= -0.2 or price_5m_change <= 0: if sell_more_batch(coin.name, time_type, latest_price): more = 0 thread.start_new_thread(ensure_sell_more, ( coin.name, time_type, )) # 单边下跌行情持有做空单,达到卖出条件 elif less == 1: if price_1m_change >= 0.2 or price_5m_change >= 0: if sell_less_batch(coin.name, time_type, latest_price): less = 0 thread.start_new_thread(ensure_sell_less, ( coin.name, time_type, )) # 单边上涨行情 if price_1m_change >= incr_1m_rate and price_5m_change >= incr_5m_rate: # 撤单开空、平多单 cancel_uncompleted_order(coin.name, time_type, 2) cancel_uncompleted_order(coin.name, time_type, 3) # 撤单平空单 cancel_uncompleted_order(coin.name, time_type, 4) # 空单全部卖出 if sell_less_batch(coin.name, time_type, latest_price): thread.start_new_thread(ensure_sell_less, ( coin.name, time_type, )) # 做多买入 if buyin_more(coin.name, time_type, latest_price): more = 1 thread.start_new_thread( ensure_buyin_more, (coin.name, time_type, latest_price)) # 单边下跌行情 elif price_1m_change < -incr_1m_rate and price_5m_change < -incr_5m_rate: # 撤单开多,平空单 cancel_uncompleted_order(coin.name, time_type, 1) cancel_uncompleted_order(coin.name, time_type, 4) # 撤单平多单 cancel_uncompleted_order(coin.name, time_type, 3) # 多单全部卖出 if sell_more_batch(coin.name, time_type, latest_price): thread.start_new_thread(ensure_sell_more, ( coin.name, time_type, )) # 做空买入 if buyin_less(coin.name, time_type, latest_price): less = 1 thread.start_new_thread( ensure_buyin_less, (coin.name, time_type, latest_price)) if -0.05 < price_1m_change < 0.05 and -0.02 < price_10s_change < 0.02 and ind_1min.vol < 6000 and ind_10s.vol < 1000: more_order_id, less_order_id = buyin_moreandless( coin.name, time_type, latest_price, 20, buy_sell_ratio) if more_order_id: order_id_queue.append(more_order_id) print('more order_id: %s' % more_order_id) if less_order_id: order_id_queue.append(less_order_id) print('less order_id: %s' % less_order_id)
def on_message(ws, message): if 'pong' in message or 'addChannel' in message: return global more, less, buy_price, write_lines jmessage = json.loads(message) coin_name = jmessage[0]['channel'].split('_')[3] data = jmessage[0]['data'] index = float(data['futureIndex']) timestamp = int(data['timestamp']) now_time = timestamp2string(timestamp) index_entity = IndexEntity(coin_name, index, timestamp) coin_info = "coin: %s, index: %.2f, time: %s" % (coin_name, index, now_time) if coin_name == 'btc': handle_deque(btc_deque_1s, index_entity, btc_ind_1s) handle_deque(btc_deque_1min, index_entity, btc_ind_1min) handle_deque(btc_deque_5min, index_entity, btc_ind_5min) elif coin_name == 'eth': handle_deque(eth_deque_1s, index_entity, eth_ind_1s) handle_deque(eth_deque_1min, index_entity, eth_ind_1min) handle_deque(eth_deque_5min, index_entity, eth_ind_5min) elif coin_name == 'ltc': handle_deque(ltc_deque_1s, index_entity, ltc_ind_1s) handle_deque(ltc_deque_1min, index_entity, ltc_ind_1min) handle_deque(ltc_deque_5min, index_entity, ltc_ind_5min) btc_avg_1s_price = btc_ind_1s.cal_avg_price() btc_avg_min_price = btc_ind_1min.cal_avg_price() btc_avg_5m_price = btc_ind_5min.cal_avg_price() eth_avg_1s_price = eth_ind_1s.cal_avg_price() eth_avg_min_price = eth_ind_1min.cal_avg_price() eth_avg_5m_price = eth_ind_5min.cal_avg_price() ltc_avg_1s_price = ltc_ind_1s.cal_avg_price() ltc_avg_min_price = ltc_ind_1min.cal_avg_price() ltc_avg_5m_price = ltc_ind_5min.cal_avg_price() btc_1m_change = cal_rate(btc_avg_1s_price, btc_avg_min_price) btc_5m_change = cal_rate(btc_avg_1s_price, btc_avg_5m_price) eth_1m_change = cal_rate(eth_avg_1s_price, eth_avg_min_price) eth_5m_change = cal_rate(eth_avg_1s_price, eth_avg_5m_price) ltc_1m_change = cal_rate(ltc_avg_1s_price, ltc_avg_min_price) ltc_5m_change = cal_rate(ltc_avg_1s_price, ltc_avg_5m_price) weighted_1min_rate = btc_1m_change * btc_weight + eth_1m_change * eth_weight + ltc_1m_change * ltc_weight weighted_5min_rate = btc_5m_change * btc_weight + eth_5m_change * eth_weight + ltc_5m_change * ltc_weight if more == 1 and not processing: if weighted_5min_rate <= 0: thread.start_new_thread(sell_more_batch, (coin.name, time_type, latest_price,)) elif less == 1 and not processing: if weighted_5min_rate >= 0: thread.start_new_thread(sell_less_batch, (coin.name, time_type, latest_price,)) elif weighted_1min_rate >= incr_1m_rate and weighted_5min_rate >= incr_5m_rate \ and btc_5m_change >= incr_1m_rate and eth_5m_change >= incr_1m_rate and ltc_5m_change >= incr_1m_rate: if buyin_more(coin.name, time_type, latest_price): more = 1 thread.start_new_thread(ensure_buyin_more, (coin.name, time_type, latest_price,)) buy_price = latest_price info = u'发出做多信号!!!买入价格:' + str(buy_price) + u', ' + now_time with codecs.open(file_transaction, 'a+', 'utf-8') as f: f.writelines(info + '\n') elif weighted_1min_rate <= -incr_1m_rate and weighted_5min_rate <= -incr_5m_rate \ and btc_5m_change < -incr_1m_rate and eth_5m_change < -incr_1m_rate and ltc_5m_change < -incr_1m_rate: if buyin_less(coin.name, time_type, latest_price): less = 1 thread.start_new_thread(ensure_buyin_less, (coin.name, time_type, latest_price,)) buy_price = latest_price info = u'发出做空信号!!!买入价格:' + str(buy_price) + u', ' + now_time with codecs.open(file_transaction, 'a+', 'utf-8') as f: f.writelines(info + '\n') btc_rate_info = u'btc 1min_rate: %.2f%%, 5min_rate: %.2f%%' % (btc_1m_change, btc_5m_change) eth_rate_info = u'eth 1min_rate: %.2f%%, 5min_rate: %.2f%%' % (eth_1m_change, eth_5m_change) ltc_rate_info = u'ltc 1min_rate: %.2f%%, 5min_rate: %.2f%%' % (ltc_1m_change, ltc_5m_change) weighted_rate_info = u'weighted 1min_rate: %.3f%%, 5min_rate: %.3f%%' % (weighted_1min_rate, weighted_5min_rate) print(coin_info) print(btc_rate_info) print(eth_rate_info) print(ltc_rate_info) print(weighted_rate_info) write_info = coin_info + '\n' + btc_rate_info + '\n' + eth_rate_info + '\n' + ltc_rate_info + '\n' \ + weighted_rate_info + '\r\n' write_lines.append(write_info) if len(write_lines) >= 10: with codecs.open(file_deal, 'a+', 'UTF-8') as f: f.writelines(write_lines) write_lines = []
def on_message(ws, message): message = bytes.decode(inflate(message), 'utf-8') # data decompress if 'pong' in message or 'addChannel' in message: return global latest_price, last_avg_price, buy_price, more, less, deque_3s, deque_10s, deque_min, \ deque_5m, ind_3s, ind_10s, ind_1min, ind_5m, write_lines, macd_5min, last_5min_macd_ts jmessage = json.loads(message) ts = time.time() now_time = timestamp2string(ts) if int(ts) - int(last_5min_macd_ts / 1000) >= 300: last_5min_macd_ts = int(ts) macd_5min, diff_5min, dea_5min, last_5min_macd_ts = get_macd_val( okFuture, coin.name + "_usd", time_type, "5min", 300) print(macd_5min, diff_5min, dea_5min, timestamp2string(last_5min_macd_ts)) if more == 0 and less == 0: ret = json.loads( okFuture.future_position_4fix(coin.name + "_usd", "quarter", "1")) print(ret) if len(ret["holding"]) > 0: buy_available = ret["holding"][0]["buy_available"] sell_available = ret["holding"][0]["sell_available"] if buy_available > 0: thread.start_new_thread(ensure_sell_more, ( coin.name, time_type, )) if sell_available > 0: thread.start_new_thread(ensure_sell_less, ( coin.name, time_type, )) else: print("确认未持仓") for each_message in jmessage: for jdata in each_message['data']: latest_price = float(jdata[1]) deal_entity = DealEntity(jdata[0], float(jdata[1]), round(float(jdata[2]), 3), ts, jdata[4]) handle_deque(deque_3s, deal_entity, ts, ind_3s) handle_deque(deque_10s, deal_entity, ts, ind_10s) handle_deque(deque_min, deal_entity, ts, ind_1min) handle_deque(deque_5m, deal_entity, ts, ind_5m) avg_3s_price = ind_3s.cal_avg_price() avg_10s_price = ind_10s.cal_avg_price() avg_min_price = ind_1min.cal_avg_price() avg_5m_price = ind_5m.cal_avg_price() price_10s_change = cal_rate(avg_3s_price, avg_10s_price) price_1m_change = cal_rate(avg_3s_price, avg_min_price) price_5m_change = cal_rate(avg_3s_price, avg_5m_price) if more == 1: if price_1m_change <= -0.2 or price_5m_change <= 0: if sell_more_batch(coin.name, time_type, latest_price): more = 0 thread.start_new_thread(ensure_sell_more, ( coin.name, time_type, )) elif less == 1: if price_1m_change >= 0.2 or price_5m_change >= 0: if sell_less_batch(coin.name, time_type, latest_price): less = 0 thread.start_new_thread(ensure_sell_less, ( coin.name, time_type, )) elif check_vol(): if price_1m_change >= incr_1m_rate and price_5m_change >= incr_5m_rate: if ind_3s.bid_vol >= vol_3s_bal * ind_3s.ask_vol and ind_1min.bid_vol >= vol_1m_bal * ind_1min.ask_vol: if buyin_more(okFuture, coin.name, time_type, latest_price): more = 1 thread.start_new_thread(ensure_buyin_more, ( okFuture, coin.name, time_type, latest_price, )) buy_price = latest_price info = u'发出做多信号!!!买入价格:' + str( buy_price) + u', ' + now_time with codecs.open(file_transaction, 'a+', 'utf-8') as f: f.writelines(info + '\n') elif price_5m_change <= -incr_5m_rate and price_1m_change <= -incr_1m_rate: if ind_3s.ask_vol >= vol_3s_bal * ind_3s.bid_vol and ind_1min.ask_vol >= vol_1m_bal * ind_1min.bid_vol: if buyin_less(okFuture, coin.name, time_type, latest_price): less = 1 thread.start_new_thread(ensure_buyin_less, ( okFuture, coin.name, time_type, latest_price, )) buy_price = latest_price info = u'发出做空信号!!!买入价格:' + str( buy_price) + u', ' + now_time with codecs.open(file_transaction, 'a+', 'utf-8') as f: f.writelines(info + '\n') price_info = deal_entity.type + u' now_price: %.4f, 3s_price: %.4f, 10s_price: %.4f, 1m_price: %.4f, ' \ u'5min_price: %.4f' \ % (latest_price, avg_3s_price, avg_10s_price, avg_min_price, avg_5m_price) vol_info = u'cur_vol: %.3f, 3s vol: %.3f, 10s vol: %.3f, 1min vol: %.3f, ask_vol: %.3f, bid_vol: %.3f, 3s_ask_vol: %.3f, 3s_bid_vol: %.3f' \ % (deal_entity.amount, ind_3s.vol, ind_10s.vol, ind_1min.vol, ind_1min.ask_vol, ind_1min.bid_vol, ind_3s.ask_vol, ind_3s.bid_vol) rate_info = u'10s_rate: %.2f%%, 1min_rate: %.2f%%, 5min_rate: %.2f%%, 5min_macd: %.6f' \ % (price_10s_change, price_1m_change, price_5m_change, macd_5min) write_info = price_info + u', ' + vol_info + u', ' + rate_info + u', ' + now_time + '\r\n' write_lines.append(write_info) if len(write_lines) >= 100: with codecs.open(file_deal, 'a+', 'UTF-8') as f: f.writelines(write_lines) write_lines = [] print(price_info + '\r\n' + vol_info + '\r\n' + rate_info + u', ' + now_time)
def on_message(ws, message): message = bytes.decode(inflate(message), 'utf-8') # data decompress if 'pong' in message or 'addChannel' in message: return global latest_price, last_avg_price, buy_price, more, less, deque_3s, deque_10s, deque_min, moreless, lessmore, \ lessless, moremore, deque_5m, ind_3s, ind_10s, ind_1min, ind_5m, write_lines, last_5min_macd, last_5min_macd_ts, highest, \ lowest, vol_24h, new_macd, last_1min_ts, random_times jmessage = json.loads(message) ts = time.time() now_time = timestamp2string(ts) if int(ts) - int(last_1min_ts) >= 5: coin_list = ["etc", "btc", "eth", "eos", "ltc", "xrp"] weight_list = [0.15, 0.35, 0.15, 0.15, 0.1, 0.1] last_1min_ts = int(ts) rate_list = coin_avg_price_change(coin_list, 1) all_coins_1min_price_change = float( np.sum([ rate_list[i] * weight_list[i] for i in range(len(coin_list)) ])) avg_info = '' for i in range(len(coin_list)): avg_info += coin_list[i] + ': ' + str(rate_list[i]) + ' ' avg_info += 'avg: %.3f, time: %s\r\n' % (all_coins_1min_price_change, timestamp2string(ts)) print(avg_info) write_lines.append(avg_info) if all_coins_1min_price_change < -0.6 and lessless == 0 and moremore == 0: for i in range(random_times): if random.random() >= 0.9: avg_3s_price = ind_3s.cal_avg_price() avg_10s_price = ind_10s.cal_avg_price() avg_min_price = ind_1min.cal_avg_price() avg_5m_price = ind_5m.cal_avg_price() price_10s_change = cal_rate(avg_3s_price, avg_10s_price) price_1m_change = cal_rate(avg_3s_price, avg_min_price) price_5m_change = cal_rate(avg_3s_price, avg_5m_price) if ind_1min.ask_vol > 2 * ind_1min.bid_vol and ind_10s.ask_vol > 5 * ind_10s.bid_vol \ and price_10s_change < 0 and price_1m_change < -0.1 and price_5m_change < -0.3 \ and ind_1min.vol > 8 * vol_24h: if buyin_less(okFuture, coin.name, time_type, latest_price - 0.01): lessless = 1 thread.start_new_thread(ensure_buyin_less, ( okFuture, coin.name, time_type, latest_price, )) buy_price = latest_price - 0.01 info = u'发出做空信号!!!买入价格:' + str( buy_price) + u', ' + now_time with codecs.open(file_transaction, 'a+', 'utf-8') as f: f.writelines(info + '\n') break random_times *= 2 elif all_coins_1min_price_change > 0.6 and lessless == 0 and moremore == 0: for i in range(random_times): if random.random() >= 0.9: avg_3s_price = ind_3s.cal_avg_price() avg_10s_price = ind_10s.cal_avg_price() avg_min_price = ind_1min.cal_avg_price() avg_5m_price = ind_5m.cal_avg_price() price_5m_change = cal_rate(avg_3s_price, avg_5m_price) price_10s_change = cal_rate(avg_3s_price, avg_10s_price) price_1m_change = cal_rate(avg_3s_price, avg_min_price) if ind_5m.ask_vol < ind_5m.bid_vol and ind_3m.ask_vol < ind_3m.bid_vol \ and 2 * ind_1min.ask_vol < ind_1min.bid_vol and 5 * ind_10s.ask_vol < ind_10s.bid_vol \ and price_10s_change > 0 and price_1m_change > 0.1 and price_5m_change > 0.3 \ and ind_1min > 8 * vol_24h: if buyin_more(okFuture, coin.name, time_type, latest_price + 0.01): moremore = 1 thread.start_new_thread(ensure_buyin_more, ( okFuture, coin.name, time_type, latest_price, )) buy_price = latest_price + 0.01 info = u'发出做多信号!!!买入价格:' + str( buy_price) + u', ' + now_time with codecs.open(file_transaction, 'a+', 'utf-8') as f: f.writelines(info + '\n') break random_times *= 2 else: random_times = 1 if int(ts) - int(last_5min_macd_ts) >= 180: last_5min_macd_ts = int(ts) ticker = futureAPI.get_specific_ticker(coin.get_future_instrument_id()) vol_24h = int( int(ticker['volume_24h']) * 10 / 24 / 60 / float(ticker['last'])) symbol = coin.name + "_usd" contract_type = "quarter" df = get_future_Nval(okFuture, symbol, contract_type, "15min", 200, 16) highest = list(df['highest'])[-1] lowest = list(df['lowest'])[-1] df = get_macd(okFuture, coin.name + "_usd", "quarter", "5min", 300) diff = list(df['diff']) dea = list(df['dea']) new_macd = 2 * (diff[-1] - dea[-1]) if more == 0 and less == 0 and lessmore == 0 and moreless == 0 and lessless == 0 and moremore == 0: ret = json.loads( okFuture.future_position_4fix(coin.name + "_usd", "quarter", "1")) print(ret) if len(ret["holding"]) > 0: buy_available = ret["holding"][0]["buy_available"] sell_available = ret["holding"][0]["sell_available"] if buy_available > 0: thread.start_new_thread(ensure_sell_more, ( okFuture, coin.name, time_type, )) if sell_available > 0: thread.start_new_thread(ensure_sell_less, ( okFuture, coin.name, time_type, )) else: print("确认未持仓") for each_message in jmessage: for jdata in each_message['data']: latest_price = float(jdata[1]) deal_entity = DealEntity(jdata[0], float(jdata[1]), round(float(jdata[2]), 3), ts, jdata[4]) handle_deque(deque_3s, deal_entity, ts, ind_3s) handle_deque(deque_10s, deal_entity, ts, ind_10s) handle_deque(deque_min, deal_entity, ts, ind_1min) handle_deque(deque_3m, deal_entity, ts, ind_3m) handle_deque(deque_5m, deal_entity, ts, ind_5m) avg_3s_price = ind_3s.cal_avg_price() avg_10s_price = ind_10s.cal_avg_price() avg_min_price = ind_1min.cal_avg_price() avg_5m_price = ind_5m.cal_avg_price() price_10s_change = cal_rate(avg_3s_price, avg_10s_price) price_1m_change = cal_rate(avg_3s_price, avg_min_price) price_5m_change = cal_rate(avg_3s_price, avg_5m_price) if lessless == 1: if price_5m_change > 0 and new_macd > 0: if sell_less_batch(okFuture, coin.name, time_type, latest_price): lessless = 0 thread.start_new_thread(ensure_sell_less, ( okFuture, coin.name, time_type, )) info = u'做空止盈,盈利%.3f, time: %s' % ( buy_price - latest_price, now_time) with codecs.open(file_transaction, 'a+', 'utf-8') as f: f.writelines(info + '\n') elif price_5m_change > 0 and latest_price > buy_price - 0.02: if sell_less_batch(okFuture, coin.name, time_type, latest_price): lessless = 0 thread.start_new_thread(ensure_sell_less, ( okFuture, coin.name, time_type, )) info = u'做空止损,盈利%.3f, time: %s' % ( buy_price - latest_price, now_time) with codecs.open(file_transaction, 'a+', 'utf-8') as f: f.writelines(info + '\n') elif moremore == 1: if price_5m_change < 0 and new_macd < 0: if sell_more_batch(okFuture, coin.name, time_type, latest_price): moremore = 0 thread.start_new_thread(ensure_sell_more, ( okFuture, coin.name, time_type, )) info = u'做多止盈,盈利%.3f, time: %s' % (latest_price - buy_price, now_time) with codecs.open(file_transaction, 'a+', 'utf-8') as f: f.writelines(info + '\n') elif price_5m_change < 0 and latest_price < buy_price + 0.02: if sell_more_batch(okFuture, coin.name, time_type, latest_price): moremore = 0 thread.start_new_thread(ensure_sell_more, ( okFuture, coin.name, time_type, )) info = u'做多止损,盈利%.3f, time: %s' % (latest_price - buy_price, now_time) with codecs.open(file_transaction, 'a+', 'utf-8') as f: f.writelines(info + '\n') price_info = deal_entity.type + u' now_price: %.4f, highest: %.4f, lowest: %.4f, 3s_price: %.4f, 10s_price: %.4f, 1m_price: %.4f, ' \ u'5min_price: %.4f' \ % (latest_price, highest, lowest, avg_3s_price, avg_10s_price, avg_min_price, avg_5m_price) vol_info = u'cur_vol: %.3f, 3s vol: %.3f, 10s vol: %.3f, 1min vol: %.3f, ask_vol: %.3f, bid_vol: %.3f, ' \ u'3s_ask_vol: %.3f, 3s_bid_vol: %.3f, 24h_vol: %.3f, 3min vol: %.3f, 3min_ask_vol: %.3f, 3min_bid_vol: %.3f' \ % (deal_entity.amount, ind_3s.vol, ind_10s.vol, ind_1min.vol, ind_1min.ask_vol, ind_1min.bid_vol, ind_3s.ask_vol, ind_3s.bid_vol, vol_24h, ind_3m.vol, ind_3m.ask_vol, ind_3m.bid_vol) rate_info = u'10s_rate: %.2f%%, 1min_rate: %.2f%%, 5min_rate: %.2f%%, 5min_macd: %.6f' \ % (price_10s_change, price_1m_change, price_5m_change, new_macd) write_info = price_info + u', ' + vol_info + u', ' + rate_info + u', ' + now_time + '\r\n' write_lines.append(write_info) if len(write_lines) >= 100: with codecs.open(file_deal, 'a+', 'UTF-8') as f: f.writelines(write_lines) write_lines = [] print(price_info + '\r\n' + vol_info + '\r\n' + rate_info + u', ' + now_time)
def on_message(ws, message): if 'pong' in message or 'addChannel' in message: return print(message) global latest_price, last_avg_price, buy_price, last_last_price, more, less, deque_3s, deque_10s, deque_min, \ deque_5m, ind_3s, ind_10s, ind_1min, ind_5m, write_lines, less2more, more2less jmessage = json.loads(message) ts = time.time() now_time = timestamp2string(ts) for each_message in jmessage: for jdata in each_message['data']: latest_price = float(jdata[1]) deal_entity = DealEntity(jdata[0], float(jdata[1]), round(float(jdata[2]), 3), ts, jdata[4]) handle_deque(deque_3s, deal_entity, ts, ind_3s) handle_deque(deque_10s, deal_entity, ts, ind_10s) handle_deque(deque_min, deal_entity, ts, ind_1min) handle_deque(deque_5m, deal_entity, ts, ind_5m) avg_3s_price = ind_3s.cal_avg_price() avg_10s_price = ind_10s.cal_avg_price() avg_min_price = ind_1min.cal_avg_price() avg_5m_price = ind_5m.cal_avg_price() price_10s_change = cal_rate(avg_3s_price, avg_10s_price) price_1m_change = cal_rate(avg_3s_price, avg_min_price) price_5m_change = cal_rate(avg_3s_price, avg_5m_price) if more == 1 and not processing: if avg_3s_price <= 1.001 * avg_5m_price or price_1m_change <= -incr_1m_rate: # 反手做空 if price_1m_change <= -incr_1m_rate: more2less = 1 sell_more_batch(coin.name, time_type, latest_price) elif less == 1 and not processing: if avg_3s_price >= 0.999 * avg_5m_price or price_1m_change >= incr_1m_rate: # 反手做多 if price_1m_change >= incr_1m_rate: less2more = 1 sell_less_batch(coin.name, time_type, latest_price) elif more2less == 1 and not processing: if price_1m_change >= 0: sell_less_batch(coin.name, time_type, latest_price) elif less2more == 1 and not processing: if price_1m_change <= 0: sell_more_batch(coin.name, time_type, latest_price) elif check_vol(): if latest_price > avg_3s_price > avg_10s_price > last_avg_price > last_last_price \ and incr_1m_rate <= price_1m_change < price_5m_change and incr_5m_rate <= price_5m_change < 1.5 \ and 0.05 <= price_10s_change <= 0.2\ and ind_1min.bid_vol > float(2 * ind_1min.ask_vol) \ and ind_3s.bid_vol > float(5 * ind_3s.ask_vol): if buyin_more(coin.name, time_type, latest_price): more = 1 thread.start_new_thread(ensure_buyin_more, ( coin.name, time_type, latest_price, )) buy_price = latest_price info = u'发出做多信号!!!买入价格:' + str( buy_price) + u', ' + now_time with codecs.open(file_transaction, 'a+', 'utf-8') as f: f.writelines(info + '\n') elif latest_price < avg_3s_price < avg_10s_price < last_avg_price < last_last_price \ and -1.5 < price_5m_change <= -incr_5m_rate and price_5m_change < price_1m_change <= -incr_1m_rate \ and -0.2 <= price_10s_change <= -0.05 \ and ind_1min.ask_vol > float(4 * ind_1min.bid_vol) and ind_3s.ask_vol > float(5 * ind_3s.bid_vol): if buyin_less(coin.name, time_type, latest_price): less = 1 thread.start_new_thread(ensure_buyin_less, ( coin.name, time_type, latest_price, )) buy_price = latest_price info = u'发出做空信号!!!买入价格:' + str( buy_price) + u', ' + now_time with codecs.open(file_transaction, 'a+', 'utf-8') as f: f.writelines(info + '\n') if last_avg_price != avg_10s_price: last_last_price = last_avg_price last_avg_price = avg_10s_price price_info = deal_entity.type + u' now_price: %.4f, 3s_price: %.4f, 10s_price: %.4f, 1m_price: %.4f, ' \ u'5min_price: %.4f' \ % (latest_price, avg_3s_price, avg_10s_price, avg_min_price, avg_5m_price) vol_info = u'cur_vol: %.3f, 3s vol: %.3f, 10s vol: %.3f, 1min vol: %.3f, ask_vol: %.3f, bid_vol: %.3f, 3s_ask_vol: %.3f, 3s_bid_vol: %.3f' \ % (deal_entity.amount, ind_3s.vol, ind_10s.vol, ind_1min.vol, ind_1min.ask_vol, ind_1min.bid_vol, ind_3s.ask_vol, ind_3s.bid_vol) rate_info = u'10s_rate: %.2f%%, 1min_rate: %.2f%%, 5min_rate: %.2f%%' \ % (price_10s_change, price_1m_change, price_5m_change) write_info = price_info + u', ' + vol_info + u', ' + rate_info + u', ' + now_time + '\r\n' write_lines.append(write_info) if len(write_lines) >= 100: with codecs.open(file_deal, 'a+', 'UTF-8') as f: f.writelines(write_lines) write_lines = [] print(price_info + '\r\n' + vol_info + '\r\n' + rate_info + u', ' + now_time)