submit_process_demo.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import requests
  2. import json
  3. import time
  4. import logging
  5. from decimal import Decimal # 使用 Decimal 来表示精确的金额和价差
  6. from checker.config import arb
  7. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  8. # --- 配置 arb_executor.py 的 HTTP 地址和端口 ---
  9. ARB_EXECUTOR_URL = arb["ARB_EXECUTOR_URL"]
  10. OPEN_LIMIT = Decimal(arb["OPEN_LIMIT"])
  11. CLOSE_LIMIT = Decimal(arb["CLOSE_LIMIT"])
  12. MEXC_TARGET_PAIR_USDT = arb["CEX_PAIR"]
  13. CEX_TRADE_AMOUNT = arb["COIN_TOKEN_TRADE_AMOUNT"]
  14. STRATEGY = arb["STRATEGY"]
  15. # --- 模拟的套利机会数据 ---
  16. # 这是一个示例,实际数据应来自你的 price_checker 逻辑
  17. def create_mock_arbitrage_data():
  18. query_price_endpoint = 'http://127.0.0.1:7777/table-data'
  19. # 构造提交给 arb_executor 的数据体
  20. data = {
  21. "pct": str(0.01),
  22. "openLimit": str(OPEN_LIMIT.quantize(Decimal('0.00001'))),
  23. "closeLimit": str(-0.2),
  24. "cexPrice": str('0.0067'),
  25. "dexPrice": str('0.0065'),
  26. "symbol": MEXC_TARGET_PAIR_USDT,
  27. "exchangeOutAmount": str(CEX_TRADE_AMOUNT), # CEX上期望卖出的目标币数量
  28. "strategy": STRATEGY,
  29. "queryPriceUrl": query_price_endpoint,
  30. }
  31. return data
  32. # --- 发送请求函数 ---
  33. def submit_arbitrage_process(arbitrage_data):
  34. """
  35. 向 arb_executor 服务提交套利处理请求。
  36. """
  37. print(f"正在提交套利数据到 {ARB_EXECUTOR_URL}")
  38. try:
  39. # 发送 POST 请求
  40. response = requests.post(ARB_EXECUTOR_URL, json=arbitrage_data)
  41. # 检查响应状态码
  42. if response.status_code == 201:
  43. print("\n请求成功! 套利流程已启动。")
  44. elif response.status_code == 200:
  45. print("\n请求接收成功,但未达到利润阈值,未启动套利流程。")
  46. elif response.status_code == 400:
  47. print("\n请求失败! 无效的请求数据。")
  48. else:
  49. print(f"\n请求失败! 状态码: {response.status_code}")
  50. # 使用 response.json() 解析响应体
  51. try:
  52. response_data = response.json()
  53. logging.info(f"\n响应数据: {response_data}")
  54. except requests.exceptions.JSONDecodeError:
  55. logging.error("无法解析响应体为 JSON。")
  56. logging.info(f"原始响应文本: {response.text}")
  57. except requests.exceptions.ConnectionError as e:
  58. print(f"\n连接错误: 无法连接到 {ARB_EXECUTOR_URL}。请确保 arb_executor.py 正在运行。")
  59. print(f"错误详情: {e}")
  60. except Exception as e:
  61. print(f"\n发送请求时发生未知错误: {e}")
  62. # --- 主执行逻辑 ---
  63. if __name__ == "__main__":
  64. print("--- 模拟 Price Checker 发现套利机会 ---")
  65. # 模拟一个达到利润阈值的套利机会
  66. arb_opportunity_met = create_mock_arbitrage_data()
  67. submit_arbitrage_process(arb_opportunity_met)
  68. print("\n模拟完成。请检查 arb_executor.py 的控制台输出和 /processing, /history 端点查看结果。")