Selaa lähdekoodia

使用公平价格平仓

skyfffire 3 kuukautta sitten
vanhempi
commit
ed4ae7b754
3 muutettua tiedostoa jossa 19 lisäystä ja 25 poistoa
  1. 3 3
      checker/c_erc20_to_mexc.py
  2. 12 21
      s_erc20_to_mexc.py
  3. 4 1
      toto.readme

+ 3 - 3
checker/c_erc20_to_mexc.py

@@ -137,7 +137,7 @@ def get_mexc_spot_price_target_usdt_bid(pair_symbol):
             # 计算平均卖出价格
             # sell_price 代表 1 TARGET_ASSET = X USDT
             sell_price = trade_value / accumulated_volume 
-            sell_price = sell_price.quantize(decimal.Decimal('1e-10'), rounding=decimal.ROUND_DOWN)
+            sell_price = sell_price.quantize(decimal.Decimal('1e-18'), rounding=decimal.ROUND_DOWN)
 
             # trade_value 代表卖出 accumulated_volume 个 TARGET_ASSET 能得到的 USDT 总量
             return {
@@ -336,8 +336,8 @@ def update_data_for_plotly_and_table():
 
         with data_lock:
             historical_data_points.append(current_point)
-            latest_values_for_table["dex_price"] = f"{dex_price:.8f}" if dex_price else "N/A"
-            latest_values_for_table["cex_price"] = f"{cex_price:.8f}" if cex_price else "N/A"
+            latest_values_for_table["dex_price"] = f"{dex_price:.18f}" if dex_price else "N/A"
+            latest_values_for_table["cex_price"] = f"{cex_price:.18f}" if cex_price else "N/A"
             latest_values_for_table["diff_dex_vs_cex_percentage"] = diff_erc20_vs_mexc_pct
             latest_values_for_table["profit_value_for_table"] = f"{actual_profit_usdt:.2f} {BASE_CURRENCY_SYMBOL}" if actual_profit_usdt is not None else "N/A" # 新增
             latest_values_for_table["dex_error"] = erc20_err

+ 12 - 21
s_erc20_to_mexc.py

@@ -431,32 +431,23 @@ class ArbitrageProcess:
             exchange_buy_order = None
             order_error_times = 0
             order_price = Decimal(0)
-            bid1_price = Decimal(0)
+            dex_price = Decimal(0)
             self.already_bought_amount = Decimal(0)
 
             while order_error_times < 10:
                 time.sleep(0.5)
 
                 try:
-                    # 挂单价格获取
-                    params = {
-                        "symbol": self.symbol.replace('_', ''),
-                        "limit": 1
-                    }
-                    depth = mexc.market.get_depth(params)
+                    table_data = self.get_local_data_no_params(self.query_price_url)
+
                     # 数据合法性
-                    if 'bids' not in depth or not depth['bids'] or 'asks' not in depth or not depth['asks']:
+                    if table_data is None or 'diff_dex_vs_cex_percentage' not in table_data:
                         continue
 
-                    bid1 = depth['bids'][0]
-                    bid1_price = Decimal(bid1[0])
-                    bid1_volume = Decimal(bid1[1])
-
-                    ask1 = depth['asks'][0]
-                    ask1_price = Decimal(ask1[0])
-                    ask1_volume = Decimal(ask1[1])
+                    dex_price = Decimal(table_data['dex_price'])
+                    dex_price = dex_price.quantize(self.price_precision, rounding=ROUND_DOWN)
 
-                    ready_order_price = ask1_price # + self.price_precision
+                    ready_order_price = dex_price # + self.price_precision
 
                     # 准备购入的价值, 如果小于2u就不要提交了
                     pseudo_value_to_buy = ready_order_price * (self.already_sold_amount - self.already_bought_amount)
@@ -481,7 +472,7 @@ class ArbitrageProcess:
                                         self._set_state(self.STATE_FAILED)
                                         return
                                     else:
-                                        msg = f"交易所剩余{self.base_coin}: {free_balance}, 准备使用 {pseudo_value_to_buy}, 买一{bid1_price}, 挂单价格{ready_order_price},  余额校验通过。"
+                                        msg = f"交易所剩余{self.base_coin}: {free_balance}, 准备使用 {pseudo_value_to_buy}, 买一{dex_price}, 挂单价格{ready_order_price},  余额校验通过。"
                                         logger.info(msg)
                                         add_state_flow_entry(self.process_item, self.current_state, msg, "success")
                                         break
@@ -545,7 +536,7 @@ class ArbitrageProcess:
                             exchange_buy_order = None
                         
                         # 如果没有成交或取消则判断是否达到取消条件了, 这里面不能置空
-                        elif order_price < bid1_price:
+                        elif order_price != dex_price:
                             params = {
                                 "symbol": self.symbol.replace('_', ''),
                                 "orderId": self.exchange_buy_order_id
@@ -553,7 +544,7 @@ class ArbitrageProcess:
                             _deleteed_order = mexc.trade.delete_order(params)
                             deleteed_order_formated = pformat(_deleteed_order, indent=2)
 
-                            msg = f"【WARNING】价格变化, 重新挂单, order price {order_price}, bid1_price {bid1_price} bid1_amount {bid1_volume} \n order: {deleteed_order_formated}"
+                            msg = f"【WARNING】价格变化, 重新挂单, order price {order_price}, dex_price {dex_price} \n order: {deleteed_order_formated}"
                             logger.warning(msg)
                             add_state_flow_entry(self.process_item, self.current_state, msg, "success")
                 except Exception as e:
@@ -569,8 +560,8 @@ class ArbitrageProcess:
 
             if diff > 0:
                 # 如果有未买回的部分, 将其与最后一次的市价相乘, 作为 "浮动亏损" 或 "未平仓成本" 单独记录
-                unrealized_cost = diff * bid1_price # 使用最后一次获取到的市价 bid1_price 更合适
-                msg = f"套利流程完成, 但有 {diff} 的数量未回补。已实现利润: {realized_profit}, 未平仓成本估算: {unrealized_cost} (基于价格 {bid1_price})"
+                unrealized_cost = diff * dex_price # 使用最后一次获取到的市价 dex_price 更合适
+                msg = f"套利流程完成, 但有 {diff} 的数量未回补。已实现利润: {realized_profit}, 未平仓成本估算: {unrealized_cost} (基于价格 {dex_price})"
             else:
                 msg = f"套利流程完成, 全部回补。最终利润: {realized_profit}, 总卖值: {self.sell_value}, 总买值: {self.buy_value}"
 

+ 4 - 1
toto.readme

@@ -15,7 +15,10 @@
         [-] 统计部分
 
 2025-08-01
-[ ] 买入时加一跳
+[-] 买入时加一跳
+
+2025-08-04
+[ ] 不用等价差回归,直接挂dex的价格买入就行,dex变了就重新挂
 
 待定
 [ ]