瀏覽代碼

一些bug的修复。

skyfffire 3 月之前
父節點
當前提交
b9f93b6f2b
共有 4 個文件被更改,包括 42 次插入67 次删除
  1. 3 3
      checker/c_erc20_to_mexc.py
  2. 4 4
      mexc_client.py
  3. 21 15
      s_erc20_to_mexc.py
  4. 14 45
      submit_process_demo.py

+ 3 - 3
checker/c_erc20_to_mexc.py

@@ -230,14 +230,14 @@ def send_arb_msg(pct, chain_swap_data, cex_price, dex_price):
         "queryPriceUrl": query_price_endpoint,
     }
 
-    logger.info(f"正在提交套利数据到 {ARB_EXECUTOR_URL}, pct {arbitrage_data["pct"]},  openLimit {arbitrage_data["openLimit"]}, closeLimit {arbitrage_data["closeLimit"]}")
+    # logger.info(f"正在提交套利数据到 {ARB_EXECUTOR_URL}, pct {arbitrage_data["pct"]},  openLimit {arbitrage_data["openLimit"]}, closeLimit {arbitrage_data["closeLimit"]}")
 
     try:
         response = requests.post(ARB_EXECUTOR_URL, json=arbitrage_data, timeout=10)
-        logger.info(f"套利执行器响应状态码: {response.status_code}")
+        # logger.info(f"套利执行器响应状态码: {response.status_code}")
         try:
             response_data = response.json()
-            logger.info(f"套利执行器响应内容: {response_data}")
+            # logger.info(f"套利执行器响应内容: {response_data}")
         except requests.exceptions.JSONDecodeError:
             logger.error(f"套利执行器响应无法解析为JSON: {response.text}")
     except requests.exceptions.RequestException as e:

+ 4 - 4
mexc_client.py

@@ -505,11 +505,11 @@ if __name__ == '__main__':
             #    print(f"  批量下单请求期间出错: {e_batch}")
 
 
-            # 测试获取挂单示例
-            # print("\n获取 BTCUSDT 当前挂单 (如有)...")
-            # open_orders = client.trade.get_openorders(params={"symbol": "RATOUSDT"})
+            # #测试获取挂单示例
+            # print("\n获取 APETHUSDT 当前挂单 (如有)...")
+            # open_orders = client.trade.get_openorders(params={"symbol": "APETHUSDT"})
             # if isinstance(open_orders, list):
-            #     print(f"  找到 {len(open_orders)} 个 BTCUSDT 的挂单。")
+            #     print(f"  找到 {len(open_orders)} 个 APETHUSDT 的挂单。")
             #     for order in open_orders:
             #         print(f"    - 订单 ID: {order.get('orderId')}, 价格: {order.get('price')}")
 

+ 21 - 15
s_erc20_to_mexc.py

@@ -10,6 +10,7 @@ from decimal import Decimal, ROUND_DOWN
 from as_utils import add_state_flow_entry
 from checker.logger_config import get_logger
 from pprint import pformat
+from pprint import pprint
 
 mexc = MexcClient()
 
@@ -124,7 +125,7 @@ class ArbitrageProcess:
             self.current_state = self.STATE_FAILED
             return
         
-        # 精度取得, 假如是RATOUSDT这个交易对的话
+        # 精度取得, 假如是RATOUSDT这个交易对的话 
         self.coin_asset_precision = Decimal(f'1e-{exchange_info['baseAssetPrecision']}')            # 这是RATO的精度
         self.base_coin_asset_precision = Decimal(f'1e-{exchange_info['quoteAssetPrecision']}')      # 这是USDT的精度
         self.price_precision = Decimal(f'1e-{exchange_info['quotePrecision']}')                     # 这是价格的精度
@@ -141,11 +142,11 @@ class ArbitrageProcess:
         设置系统状态,并打印日志
         """
         if state in self.STATES:
-            logger.info(f"状态变更{self.current_state} -> {state}")
+            logger.info(f"状态变更 {self.current_state} -> {state}")
             logger.info('')
             self.current_state = state
         else:
-            logger.error(f"尝试设置无效状态{state}")
+            logger.error(f"尝试设置无效状态 {state}")
 
     def run_arbitrage_step(self):
         """
@@ -240,13 +241,13 @@ class ArbitrageProcess:
                 for balance in balances:
                     if balance['asset'] == self.coin:
                         if Decimal(balance['free']) < pseudo_amount_to_sell:
-                            msg = f"交易所剩余{self.coin}: {balance['free']}, 交易所准备卖出{pseudo_amount_to_sell}, 不能触发交易。"
+                            msg = f"交易所剩余{self.coin}: {balance['free']}, 交易所准备卖出 {pseudo_amount_to_sell}, 不能触发交易。"
                             logger.info(msg)
                             add_state_flow_entry(self.process_item, self.current_state, msg, "fail")
                             self._set_state(self.STATE_REJECT)
                             return
                         else:
-                            msg = f"交易所剩余{self.coin}: {balance['free']}, 交易所准备卖出{pseudo_amount_to_sell}, 余额校验通过(可以交易)。"
+                            msg = f"交易所剩余{self.coin}: {balance['free']}, 交易所准备卖出 {pseudo_amount_to_sell}, 余额校验通过(可以交易)。"
                             logger.info(msg)
                             add_state_flow_entry(self.process_item, self.current_state, msg, "success")
 
@@ -269,7 +270,7 @@ class ArbitrageProcess:
         """
         在中心化交易所卖出现货
         """
-        msg = "执行中心化交易所卖出现货..."
+        msg = "执行 中心化交易所卖出现货..."
         logger.info(msg)
         add_state_flow_entry(self.process_item, self.current_state, msg, "pending")
         try:
@@ -353,7 +354,7 @@ class ArbitrageProcess:
                     waiting_times = waiting_times - 1
 
             order_formated = pformat(order, indent=2)
-            msg = f"交易所现货卖出订单已完成, 价格{self.sell_price}, sell_value: {self.sell_value}\n order: {order_formated}"
+            msg = f"交易所现货卖出订单已完成, 价格 {self.sell_price}, sell_value: {self.sell_value}\n order: {order_formated}"
             logger.info(msg)
             add_state_flow_entry(self.process_item, self.current_state, msg, "success")
             
@@ -383,7 +384,7 @@ class ArbitrageProcess:
         """
         等待价差回归
         """
-        msg = f"等待中心化交易所价差回归,目标{self.close_limit}"
+        msg = f"等待中心化交易所价差回归,目标 {self.close_limit}"
         logger.info(msg)
         add_state_flow_entry(self.process_item, self.current_state, msg, "pending")
         try:
@@ -398,7 +399,7 @@ class ArbitrageProcess:
                     dex_vs_cex_percentage = Decimal(table_data['diff_dex_vs_cex_percentage']) * 100
 
                     if dex_vs_cex_percentage < self.close_limit:
-                        msg = f"价差已回归,目标{self.close_limit}%, 当前: {dex_vs_cex_percentage}%"
+                        msg = f"价差已回归,目标 {self.close_limit}%, 当前: {dex_vs_cex_percentage}%"
                         logger.info(msg)
                         add_state_flow_entry(self.process_item, self.current_state, msg, "success")
 
@@ -422,7 +423,7 @@ class ArbitrageProcess:
         """
         执行回购操作
         """
-        msg = f"正在回购,目标回购数量:{self.already_sold_amount}, 金额: {self.buy_value}"
+        msg = f"正在回购, 目标回购数量 {self.already_sold_amount}, 金额: {self.sell_value}"
         logger.info(msg)
         add_state_flow_entry(self.process_item, self.current_state, msg, "pending")
 
@@ -472,7 +473,7 @@ class ArbitrageProcess:
                                         self._set_state(self.STATE_FAILED)
                                         return
                                     else:
-                                        msg = f"交易所剩余{self.base_coin}: {free_balance}, 交易所准备使用{pseudo_value_to_buy}, 余额校验通过。"
+                                        msg = f"交易所剩余{self.base_coin}: {free_balance}, 交易所准备使用 {pseudo_value_to_buy}, 余额校验通过。"
                                         logger.info(msg)
                                         add_state_flow_entry(self.process_item, self.current_state, msg, "success")
                                         break
@@ -522,11 +523,16 @@ class ArbitrageProcess:
                         if order['status'] in ["FILLED", "PARTIALLY_CANCELED", "CANCELED"]:
                             # 以实际成交价值为准
                             money = Decimal(order['cummulativeQuoteQty'])
-                            self.already_bought_amount = self.already_bought_amount + Decimal(order['executedQty'])
 
-                            self.buy_value = self.buy_value + money
-                            self.buy_price = self.buy_value / self.already_bought_amount
-                            self.buy_price = self.buy_price.quantize(self.price_precision, rounding=ROUND_DOWN)
+                            # 实际成交价值大于0才计算
+                            if money > Decimal(0):
+                                order_formated = pformat(order, indent=2)
+                                logger.info(f"检测到有成交 \n {order_formated}")
+                                self.already_bought_amount = self.already_bought_amount + Decimal(order['executedQty'])
+
+                                self.buy_value = self.buy_value + money
+                                self.buy_price = self.buy_value / self.already_bought_amount
+                                self.buy_price = self.buy_price.quantize(self.price_precision, rounding=ROUND_DOWN)
 
                             exchange_buy_order = None
                         

+ 14 - 45
submit_process_demo.py

@@ -2,7 +2,6 @@ import requests
 import json
 import time
 import logging
-from config import wallet
 from decimal import Decimal # 使用 Decimal 来表示精确的金额和价差
 
 from checker.config import arb
@@ -11,57 +10,27 @@ logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(
 
 # --- 配置 arb_executor.py 的 HTTP 地址和端口 ---
 ARB_EXECUTOR_URL = arb["ARB_EXECUTOR_URL"]
+OPEN_LIMIT = Decimal(arb["OPEN_LIMIT"])
+CLOSE_LIMIT = Decimal(arb["CLOSE_LIMIT"])
+MEXC_TARGET_PAIR_USDT = arb["CEX_PAIR"]
+CEX_TRADE_AMOUNT = arb["COIN_TOKEN_TRADE_AMOUNT"]
+STRATEGY = arb["STRATEGY"]
 
 # --- 模拟的套利机会数据 ---
 # 这是一个示例,实际数据应来自你的 price_checker 逻辑
 def create_mock_arbitrage_data():
-    from checker import ok_chain_client
-    
-    CHAIN_ID = 1
-    IN_TOKEN_ADDRESS = '0xdAC17F958D2ee523a2206206994597C13D831ec7' # USDT on Ethereum
-    IN_TOKEN_DECIMALS = 6
-    EXCHANGE_OUT_AMOUNT = Decimal(2500)
-    IN_AMOUNT_TO_QUERY = Decimal(25)
-    OUT_TOKEN_ADDRESS = '0x9eAeBd7E73D97E78c77fAB743e6FFA1b550e224c' # RXS on Ethereum
-    USER_WALLET = wallet["user_wallet"]
-    USER_EXCHANGE_WALLET = wallet["user_exchange_wallet"]
-    SLIPPAGE = 1
-    MEXC_TARGET_PAIR_USDT = 'RXS_USDT' # MEXC 现货交易对
-
-    # 询价,注意!!!这里直接把交易所地址当收款方,省去transfer的流程
-    data = ok_chain_client.swap(CHAIN_ID, 
-                                IN_AMOUNT_TO_QUERY * (10 ** IN_TOKEN_DECIMALS), 
-                                IN_TOKEN_ADDRESS, 
-                                OUT_TOKEN_ADDRESS, 
-                                SLIPPAGE, 
-                                USER_WALLET,
-                                USER_EXCHANGE_WALLET,  # 这里直接把交易所地址当收款方,省去transfer的流程!!!
-                                )
-
-    print(data)
-
-    d = data['data'][0]
-    tx = d['tx']
-    router_result = d['routerResult']
-    in_dec, out_dec = int(router_result['fromToken']['decimal']), int(router_result['toToken']['decimal'])
-    atomic_in_base, atomic_out_target = Decimal(router_result['fromTokenAmount']), Decimal(router_result['toTokenAmount'])
-    human_in_base = atomic_in_base / (10 ** in_dec)
-    human_out_target = atomic_out_target / (10 ** out_dec)
-
+    query_price_endpoint = 'http://127.0.0.1:7777/table-data'
     # 构造提交给 arb_executor 的数据体
     data = {
-        "tx": tx,
-        "profit": str(5),
-        "profitLimit": str(0),
+        "pct": str(0.01),
+        "openLimit": str(OPEN_LIMIT.quantize(Decimal('0.00001'))),
+        "closeLimit": str(-0.2),
+        "cexPrice": str('0.0067'),
+        "dexPrice": str('0.0065'),
         "symbol": MEXC_TARGET_PAIR_USDT,
-        "fromToken": IN_TOKEN_ADDRESS,
-        "fromTokenAmountHuman": str(human_in_base),
-        "fromTokenDecimal": str(in_dec),
-        "toToken": OUT_TOKEN_ADDRESS,
-        "toTokenAmountHuman": str(human_out_target),
-        "toTokenDecimal": str(out_dec),
-        "exchangeOutAmount": str(EXCHANGE_OUT_AMOUNT),
-        "strategy": "erc20_to_mexc",
+        "exchangeOutAmount": str(CEX_TRADE_AMOUNT), # CEX上期望卖出的目标币数量
+        "strategy": STRATEGY,
+        "queryPriceUrl": query_price_endpoint,
     }
     return data