浏览代码

尝试解决mexc更新问题。

skyfffire 3 月之前
父节点
当前提交
6d75a59680
共有 4 个文件被更改,包括 25 次插入15 次删除
  1. 8 6
      as.py
  2. 8 4
      s_erc20_to_mexc.py
  3. 8 4
      s_mexc_to_erc20.py
  4. 1 1
      toto.readme

+ 8 - 6
as.py

@@ -110,6 +110,8 @@ except Exception as e:
 app = Flask(__name__)
 CORS(app) # 在创建 app 实例后启用 CORS
 
+WITHDRAWAL_COOLDOWN = 180 # 秒,成功提现后冷却60秒
+
 def move_completed_process_to_history(process_id_to_move: str) -> bool:
     """
     将一个完成的 process_item 从 processing_list 移动到 history_process_list。
@@ -508,12 +510,12 @@ def balance_available_funds_periodically():
             mexc_available = Decimal(0)
 
             # 交易所餘額讀取
-            with mexc_lock:
-                balances = mexc_data['account_info']['balances']
+            new_account_info = mexc.trade.get_account_info()
+            balances = new_account_info['balances']
 
-                for balance in balances:
-                    if balance['asset'].upper() == BASE_COIN:
-                        mexc_available = Decimal(balance['free'])
+            for balance in balances:
+                if balance['asset'].upper() == BASE_COIN:
+                    mexc_available = Decimal(balance['free'])
             mexc_available = mexc_available.quantize(Decimal('1e-2'), rounding=ROUND_DOWN)
             
             # 鏈上餘額讀取
@@ -576,7 +578,7 @@ def balance_available_funds_periodically():
                     msg = f"[withdrawal]交易所提现失败\n參數: {withdrawal_params_formated}\n響應: {withdrawal_rst_formated}"
                     logger.error(msg)
                 else:
-                    msg = f"[withdrawal]交易所提现已发送\n參數: {withdrawal_params_formated}\n響應: {withdrawal_rst_formated}"
+                    msg = f"[withdrawal]交易所提现已发送, 进入 {WITHDRAWAL_COOLDOWN} 秒冷却期。\n參數: {withdrawal_params_formated}\n響應: {withdrawal_rst_formated}"
                     logger.info(msg)
             else:
                 # TODO 這是另一個方向,需要從鏈上往交易所劃轉

+ 8 - 4
s_erc20_to_mexc.py

@@ -334,10 +334,10 @@ class ArbitrageProcess:
                 exchange_sell_order_formated = pformat(exchange_sell_order, indent=2)
 
                 msg = f"交易所现货卖出订单已发送 \n params:{order_params_formated} \n rst: {exchange_sell_order_formated}"
-                if 'orderId' not in exchange_sell_order:
-                    logger.error(msg)
-                    add_state_flow_entry(self.process_item, self.current_state, msg, "fail")
+                logger.info(msg)
+                add_state_flow_entry(self.process_item, self.current_state, msg, "success")
 
+                if 'orderId' not in exchange_sell_order:
                     continue
 
                 # 查询交易所订单状态
@@ -349,6 +349,7 @@ class ArbitrageProcess:
                         "orderId": exchange_sell_order_id
                     }
                     order = mexc.trade.get_order(params)
+                    order_formated = pformat(order, indent=2)
 
                     if order['status'] in ["FILLED", "PARTIALLY_CANCELED"]:
                         # 以实际成交数量为准
@@ -359,13 +360,16 @@ class ArbitrageProcess:
                         self.sell_price = self.sell_value / self.already_sold_amount
                         self.sell_price = self.sell_price.quantize(self.price_precision, rounding=ROUND_DOWN)
 
-                        order_formated = pformat(order, indent=2)
                         msg = f"交易所现货卖出订单已完成, 价格:{self.sell_price}, money: {money}\n order: {order_formated}"
                         logger.info(msg)
                         add_state_flow_entry(self.process_item, self.current_state, msg, "success")
                         
                         break
                     else:
+                        msg = f"交易所现货卖出失败\n order: {order_formated}"
+                        logger.error(msg)
+                        add_state_flow_entry(self.process_item, self.current_state, msg, "fail")
+
                         time.sleep(1)
                         waiting_times = waiting_times - 1
             

+ 8 - 4
s_mexc_to_erc20.py

@@ -369,10 +369,10 @@ class ArbitrageProcess:
                 exchange_buy_order_formated = pformat(exchange_buy_order, indent=2)
 
                 msg = f"[{order_times}]交易所现货买入订单已发送 \n params:{order_params_formated} \n rst: {exchange_buy_order_formated}"
+                logger.info(msg)
+                add_state_flow_entry(self.process_item, self.current_state, msg, "success")
+                
                 if 'orderId' not in exchange_buy_order:
-                    logger.error(msg)
-                    add_state_flow_entry(self.process_item, self.current_state, msg, "fail")
-
                     continue
 
                 # 查询交易所订单状态
@@ -384,6 +384,7 @@ class ArbitrageProcess:
                         "orderId": exchange_buy_order_id
                     }
                     order = mexc.trade.get_order(params)
+                    order_formated = pformat(order, indent=2)
 
                     if order['status'] in ["FILLED", "PARTIALLY_CANCELED"]:
                         # 以实际成交数量为准
@@ -394,7 +395,6 @@ class ArbitrageProcess:
                         self.buy_price = self.buy_value / self.already_bought_amount
                         self.buy_price = self.buy_price.quantize(self.price_precision, rounding=ROUND_DOWN)
 
-                        order_formated = pformat(order, indent=2)
                         msg = f"交易所现货买入订单已完成, 价格:{self.buy_price}, money: {money}\n order: {order_formated}"
                         logger.info(msg)
                         add_state_flow_entry(self.process_item, self.current_state, msg, "success")
@@ -402,6 +402,10 @@ class ArbitrageProcess:
                         self.exchange_withdrawal_amount = self.already_bought_amount
                         break
                     else:
+                        msg = f"交易所现货买入订单失败\n order: {order_formated}"
+                        logger.error(msg)
+                        add_state_flow_entry(self.process_item, self.current_state, msg, "fail")
+
                         time.sleep(1)
                         waiting_times = waiting_times - 1
             

+ 1 - 1
toto.readme

@@ -84,7 +84,7 @@
 [-] 定制提现比例以及目标比例的配置
 
 其它todo
-
+[ ] [important] 抹茶余额更新有问题,有延迟
 [ ] 下单使用超价单而不是市价单(1、防止砸穿盘面控制风险;2、防止抹茶交易所撤销市价单)
 [ ] 所有策略共用web3、web3搞成wss的,可能会稳定很多
 [ ] mexc到dec方向的approve自動