|
@@ -9,12 +9,7 @@ import logging
|
|
|
from enum import Enum
|
|
from enum import Enum
|
|
|
from datetime import datetime
|
|
from datetime import datetime
|
|
|
import os
|
|
import os
|
|
|
-
|
|
|
|
|
-"""
|
|
|
|
|
-ind 0
|
|
|
|
|
-pub c787afe5ff5d02fb3b0180c86ea4bbf9bfdd1bcab3d96e395d52502532fe05cfc43807e062b16814
|
|
|
|
|
-pri f3625c4662ab0b338e405f61b7555e90aeda8fa28dd607588c9e275dc6f326ddcbd9341e18ca2950
|
|
|
|
|
-"""
|
|
|
|
|
|
|
+import lighter
|
|
|
|
|
|
|
|
|
|
|
|
|
# 配置日志
|
|
# 配置日志
|
|
@@ -28,8 +23,8 @@ logger = logging.getLogger("strategy")
|
|
|
class StrategyState(Enum):
|
|
class StrategyState(Enum):
|
|
|
"""策略状态枚举"""
|
|
"""策略状态枚举"""
|
|
|
WAITING_INIT = 1 # 等待初始化
|
|
WAITING_INIT = 1 # 等待初始化
|
|
|
- IDLE_MONITORING = 2 # 空闲状态监听差价
|
|
|
|
|
- EXECUTING_TRADE = 3 # 差价达成触发交易
|
|
|
|
|
|
|
+ IDLE_MONITORING = 2 # 空闲状态监听价差
|
|
|
|
|
+ EXECUTING_TRADE = 3 # 价差达成触发交易
|
|
|
WAITING_CONVERGENCE = 4 # 交易完成等待价差收敛
|
|
WAITING_CONVERGENCE = 4 # 交易完成等待价差收敛
|
|
|
CLOSING_POSITION = 5 # 收敛完成进行平仓
|
|
CLOSING_POSITION = 5 # 收敛完成进行平仓
|
|
|
POSITION_CLOSED = 6 # 平仓完成
|
|
POSITION_CLOSED = 6 # 平仓完成
|
|
@@ -44,10 +39,20 @@ class TradingStrategy:
|
|
|
self.current_position = None # 当前持仓信息
|
|
self.current_position = None # 当前持仓信息
|
|
|
self.entry_price_bps = 5 # 入场时的价差
|
|
self.entry_price_bps = 5 # 入场时的价差
|
|
|
self.target_symbol = "DOGE" # 目标交易对
|
|
self.target_symbol = "DOGE" # 目标交易对
|
|
|
|
|
+
|
|
|
|
|
+ self.account_index = 281474976643718
|
|
|
|
|
+ self.api_client = lighter.ApiClient()
|
|
|
|
|
+ self.account_api = lighter.AccountApi(self.api_client)
|
|
|
|
|
+ self.signer_client = lighter.SignerClient(
|
|
|
|
|
+ url='https://mainnet.zklighter.elliot.ai',
|
|
|
|
|
+ private_key='0xf3625c4662ab0b338e405f61b7555e90aeda8fa28dd607588c9e275dc6f326ddcbd9341e18ca2950',
|
|
|
|
|
+ account_index=self.account_index,
|
|
|
|
|
+ api_key_index=0
|
|
|
|
|
+ )
|
|
|
|
|
|
|
|
logger.info("策略初始化完成,当前状态: WAITING_INIT")
|
|
logger.info("策略初始化完成,当前状态: WAITING_INIT")
|
|
|
|
|
|
|
|
- def do_strategy(self, market_data):
|
|
|
|
|
|
|
+ async def do_strategy(self, market_data):
|
|
|
"""
|
|
"""
|
|
|
执行策略逻辑
|
|
执行策略逻辑
|
|
|
|
|
|
|
@@ -69,23 +74,23 @@ class TradingStrategy:
|
|
|
|
|
|
|
|
# 如果是DOGE交易对,打印实时行情
|
|
# 如果是DOGE交易对,打印实时行情
|
|
|
if symbol == self.target_symbol:
|
|
if symbol == self.target_symbol:
|
|
|
- self._print_market_data(market_data)
|
|
|
|
|
|
|
+ await self._print_market_data(market_data)
|
|
|
|
|
|
|
|
# 根据当前状态执行相应逻辑
|
|
# 根据当前状态执行相应逻辑
|
|
|
if self.state == StrategyState.WAITING_INIT:
|
|
if self.state == StrategyState.WAITING_INIT:
|
|
|
- self._handle_waiting_init()
|
|
|
|
|
|
|
+ await self._handle_waiting_init()
|
|
|
elif self.state == StrategyState.IDLE_MONITORING:
|
|
elif self.state == StrategyState.IDLE_MONITORING:
|
|
|
- self._handle_idle_monitoring(market_data)
|
|
|
|
|
|
|
+ await self._handle_idle_monitoring(market_data)
|
|
|
elif self.state == StrategyState.EXECUTING_TRADE:
|
|
elif self.state == StrategyState.EXECUTING_TRADE:
|
|
|
- self._handle_executing_trade(market_data)
|
|
|
|
|
|
|
+ await self._handle_executing_trade(market_data)
|
|
|
elif self.state == StrategyState.WAITING_CONVERGENCE:
|
|
elif self.state == StrategyState.WAITING_CONVERGENCE:
|
|
|
- self._handle_waiting_convergence(market_data)
|
|
|
|
|
|
|
+ await self._handle_waiting_convergence(market_data)
|
|
|
elif self.state == StrategyState.CLOSING_POSITION:
|
|
elif self.state == StrategyState.CLOSING_POSITION:
|
|
|
- self._handle_closing_position(market_data)
|
|
|
|
|
|
|
+ await self._handle_closing_position(market_data)
|
|
|
elif self.state == StrategyState.POSITION_CLOSED:
|
|
elif self.state == StrategyState.POSITION_CLOSED:
|
|
|
- self._handle_position_closed()
|
|
|
|
|
|
|
+ await self._handle_position_closed()
|
|
|
|
|
|
|
|
- def _print_market_data(self, market_data):
|
|
|
|
|
|
|
+ async def _print_market_data(self, market_data):
|
|
|
"""打印市场数据"""
|
|
"""打印市场数据"""
|
|
|
symbol = market_data.get('symbol')
|
|
symbol = market_data.get('symbol')
|
|
|
# binance_mark = market_data.get('binance_mark_price')
|
|
# binance_mark = market_data.get('binance_mark_price')
|
|
@@ -108,34 +113,36 @@ class TradingStrategy:
|
|
|
price_diff_str = f"{price_diff_bps}bps" if price_diff_bps is not None else "N/A"
|
|
price_diff_str = f"{price_diff_bps}bps" if price_diff_bps is not None else "N/A"
|
|
|
|
|
|
|
|
logger.info(f"[{symbol}] Binance: 最新价={binance_price} | Lighter: 最新价={lighter_price} | 价差={price_diff_str}")
|
|
logger.info(f"[{symbol}] Binance: 最新价={binance_price} | Lighter: 最新价={lighter_price} | 价差={price_diff_str}")
|
|
|
|
|
+ account = await self.account_api.account(by="index", value=f"{self.account_index}")
|
|
|
|
|
+ logger.info(f"账户状态: {account}")
|
|
|
|
|
|
|
|
- def _handle_waiting_init(self):
|
|
|
|
|
|
|
+ async def _handle_waiting_init(self):
|
|
|
"""处理等待初始化状态"""
|
|
"""处理等待初始化状态"""
|
|
|
# 初始化完成后转到空闲监听状态
|
|
# 初始化完成后转到空闲监听状态
|
|
|
self.state = StrategyState.IDLE_MONITORING
|
|
self.state = StrategyState.IDLE_MONITORING
|
|
|
logger.info("状态转换: WAITING_INIT -> IDLE_MONITORING")
|
|
logger.info("状态转换: WAITING_INIT -> IDLE_MONITORING")
|
|
|
|
|
|
|
|
- def _handle_idle_monitoring(self, market_data):
|
|
|
|
|
|
|
+ async def _handle_idle_monitoring(self, market_data):
|
|
|
"""处理空闲监听状态 - 监控价差"""
|
|
"""处理空闲监听状态 - 监控价差"""
|
|
|
# TODO: 实现价差监控逻辑
|
|
# TODO: 实现价差监控逻辑
|
|
|
pass
|
|
pass
|
|
|
|
|
|
|
|
- def _handle_executing_trade(self, market_data):
|
|
|
|
|
|
|
+ async def _handle_executing_trade(self, market_data):
|
|
|
"""处理执行交易状态"""
|
|
"""处理执行交易状态"""
|
|
|
# TODO: 实现交易执行逻辑
|
|
# TODO: 实现交易执行逻辑
|
|
|
pass
|
|
pass
|
|
|
|
|
|
|
|
- def _handle_waiting_convergence(self, market_data):
|
|
|
|
|
|
|
+ async def _handle_waiting_convergence(self, market_data):
|
|
|
"""处理等待收敛状态"""
|
|
"""处理等待收敛状态"""
|
|
|
# TODO: 实现等待价差收敛逻辑
|
|
# TODO: 实现等待价差收敛逻辑
|
|
|
pass
|
|
pass
|
|
|
|
|
|
|
|
- def _handle_closing_position(self, market_data):
|
|
|
|
|
|
|
+ async def _handle_closing_position(self, market_data):
|
|
|
"""处理平仓状态"""
|
|
"""处理平仓状态"""
|
|
|
# TODO: 实现平仓逻辑
|
|
# TODO: 实现平仓逻辑
|
|
|
pass
|
|
pass
|
|
|
|
|
|
|
|
- def _handle_position_closed(self):
|
|
|
|
|
|
|
+ async def _handle_position_closed(self):
|
|
|
"""处理平仓完成状态"""
|
|
"""处理平仓完成状态"""
|
|
|
# 平仓完成后回到空闲监听状态
|
|
# 平仓完成后回到空闲监听状态
|
|
|
self.state = StrategyState.IDLE_MONITORING
|
|
self.state = StrategyState.IDLE_MONITORING
|