def market_get_data(self,market_pair): data=market_pair.get_history_data() try: market_pair.get_opportunity(data) except Exception as e : logger.fatal(self.coin_type+":"+e) pass
def sell(self, askPirce,average_line,coin_type, amount=config.min_tx_volume): #对数据库进行更新操作 # 创建session对象: session = DBSession() #查询有没有买单的 #时间 update_date=time.strftime('%Y-%m-%d %H:%M:%S') order_result = session.query(Order).filter(Order.type == 0).filter(Order.coin_type == coin_type). \ filter(Order.end_date < update_date).filter(Order.time_type == self.time_type). \ filter(Order.strategy_type == self.strategy_type) count=order_result.count() if(count>0): #说明有成交的买单,那么就可以进行卖出操作了 #更新数据库 order=order_result.one() order.sell_price = askPirce order.buy_price=float(order.buy_price) order.profit_rate = askPirce/order.buy_price -1 order.sell_fee = (askPirce * amount)*0.001 order.profit = (float(order.sell_price)-float(order.buy_price))*(float(order.amount))- \ (float(order.buy_fee) + float(order.sell_fee)) order.type = 1 order.ask_order_id = "test_ask_004" # 添加到session: message="%s:%s执行下单操作成功,卖价为%.8f,数量为%.2f"%(self.coin_type,self.time_type,askPirce,amount) logger.warn(message) if(order.profit_rate>self.stop_loss and order.profit_rate<0): #亏损在0-1%中间就不要动 # 关闭session: session.close() return #亏损超过1%,卖出 # 提交即保存到数据库: if(config.market_game_start == 1): for pair_map in config.binance_game_coin_pairs: if(pair_map["symbol"] == self.coin_type): #实体竞技 try: balance_data_list=self.binance.get_account()["balances"] asset=self.coin_type.replace("BTC","") for value_map in balance_data_list: if(value_map["asset"]==asset): free=value_map["free"] free=float(free) amount=min(free,amount) break result=self.binance.order_limit_sell(symbol=self.coin_type, quantity=amount, price=askPirce ) order.ask_order_id = result["orderId"] message="下单 %s"%(order.ask_order_id) logger.warn(message) except Exception as e: traceback.print_exc() logger.fatal(e) session.commit() # 关闭session: session.close()
def main(self): logger.debug("main") self.get_binance() self.create_bean() try : self.loop() except Exception as e: logger.fatal("宕机了。。。。。。。。。") logger.fatal(e) main()
def get_history_data(self): try: data = self.binance.get_klines(symbol=self.coin_type, interval=self.time_type) except Exception as e: traceback.print_exc() message = self.coin_type + ": fall down" logger.fatal(message) data = self.get_history_data() return data
def main(self): logger.debug("main") self.base_init() self.create_bean() try: self.loop() except Exception as e: logger.fatal("宕机了。。。。。。。。。") traceback.print_exc() logger.fatal(e) self.loop()
def gamePlay(self, buy_flag, Price, amount, new_order, session): if (config.market_game_start): if config.market_game_start: #检测 订单列表 状态 self.check_order_list() #实体竞技 if buy_flag: try: balance_data_list = self.binance.get_account()["balances"] eth_asset = balance_data_list[2] free = float(eth_asset["free"]) locked = float(eth_asset["locked"]) if free < config.eth_left_size: return two_str1 = str(amount)[-2:] bool_flag = re.match("00", two_str1) if (bool_flag): can_buy_amount = round(0.5 / Price, 0) #0.5个eth else: can_buy_amount = round(0.5 / Price, 2) #0.5个eth if (free > 0.5 and can_buy_amount > 0): result = self.binance.order_limit_buy( symbol=self.coin_type, quantity=can_buy_amount, price=Price) new_order.amount = can_buy_amount new_order.bid_order_id = result["orderId"] message = "下单 %s" % (new_order.bid_order_id) logger.warn(message) logger.warn(str(result)) session.commit() message = str(result) logger.warn(message) ServerJiao.send_server_warn(message) else: logger.warn(self.coin_type + "金额不足") except Exception as e: traceback.print_exc() message = self.coin_type + ":" + str(e) logger.fatal(message) ServerJiao.send_server_warn(message) else: # 提交即保存到数据库: try: balance_data_list = self.binance.get_account()["balances"] eth_asset = balance_data_list[2] eth_free = float(eth_asset["free"]) eth_locked = float(eth_asset["locked"]) asset = self.coin_type.replace("ETH", "") for value_map in balance_data_list: if (value_map["asset"] == asset): free = value_map["free"] locked = value_map["locked"] free = float(free) locked = float(locked) break two_str1 = str(amount)[-2:] bool_flag = re.match("00", two_str1) if (bool_flag): amount = np.math.floor(free) #0.5个eth else: free = free * 100 free = np.math.floor(free) #0.5个eth amount = free / 100 if (amount > 0 and amount * Price > 0.01): result = self.binance.order_limit_sell( symbol=self.coin_type, quantity=amount, price=Price) new_order.ask_order_id = result["orderId"] message = self.coin_type + ":下单 %s" % ( new_order.ask_order_id) logger.warn(message) logger.warn(str(result)) new_order.amount = amount new_order.type = 1 session.commit() message = self.coin_type + "___下单卖出____" + str(result) logger.warn(message) ServerJiao.send_server_warn(message) #根据eth lock 数量 取消买单 if eth_locked > 0: cancel_result = self.binance.cancel_order( symbol=new_order.coin_type, orderId=new_order.bid_order_id) message = self.coin_type + "___取消下单____" + str( cancel_result) logger.warn(message) ServerJiao.send_server_warn(message) else: message = "eth 没有 lock 记录" ServerJiao.send_server_warn(message) else: new_order.type = 4 session.commit() logger.warn(self.coin_type + ":没有足够数量") except Exception as e: traceback.print_exc() message = self.coin_type + ":" + str(e) logger.fatal(message) ServerJiao.send_server_warn(message)