|
|
@@ -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}"
|
|
|
|