94 lines
3.4 KiB
Python
94 lines
3.4 KiB
Python
|
from config.strategy_state import state
|
|||
|
from jq_channel import exchange
|
|||
|
from kit.logger import Logger
|
|||
|
from config.strategy_config import strategy_config
|
|||
|
|
|||
|
|
|||
|
class trade_strategy:
|
|||
|
|
|||
|
def __init__(self, strategy_name, strategy_template_id, config_save, log, channel: exchange):
|
|||
|
# -------必要参数-------
|
|||
|
self.log = Logger(log) # 日志记录器
|
|||
|
self.strategy_config = strategy_config(strategy_name,
|
|||
|
strategy_template_id,
|
|||
|
config_save,
|
|||
|
self.log)
|
|||
|
|
|||
|
self.state = state() # 策略状态管理器,跟踪策略运行状态
|
|||
|
self.channel = channel
|
|||
|
|
|||
|
# 添加持仓监控和管理器
|
|||
|
|
|||
|
def init_strategy(self) -> None:
|
|||
|
"""
|
|||
|
策略初始化函数
|
|||
|
配置交易环境参数,包括防未来数据、基准、滑点、订单成本以及日志输出等级。
|
|||
|
参数:
|
|||
|
context: 聚宽平台传入的交易上下文对象
|
|||
|
"""
|
|||
|
# 启用防未来数据以确保历史回测的严谨性
|
|||
|
self.log.info("初始化策略TradingStrategy配置...")
|
|||
|
|
|||
|
set_option('avoid_future_data', True)
|
|||
|
# 设置策略基准为上证指数
|
|||
|
#set_benchmark(self.strategy_config.config["benchmark_stock"])
|
|||
|
set_benchmark("000001.XSHG")
|
|||
|
# 使用真实市场价格,模拟实际交易
|
|||
|
set_option('use_real_price', True)
|
|||
|
# 设置固定滑点,确保价格偏差不大
|
|||
|
set_slippage(FixedSlippage(3 / 10000))
|
|||
|
# 设置订单成本,包括印花税和佣金
|
|||
|
set_order_cost(OrderCost(
|
|||
|
open_tax=0,
|
|||
|
close_tax=0.001, # 卖出时0.1%的印花税
|
|||
|
open_commission=2.5 / 10000,
|
|||
|
close_commission=2.5 / 10000,
|
|||
|
close_today_commission=0,
|
|||
|
min_commission=5 # 最低佣金为5元
|
|||
|
), type='stock')
|
|||
|
# 设置日志输出等级(中文日志输出)
|
|||
|
self.log.logger.set_level('order', 'error')
|
|||
|
self.log.logger.set_level('system', 'error')
|
|||
|
self.log.logger.set_level('strategy', 'debug')
|
|||
|
|
|||
|
def set_target_list(self, target_list):
|
|||
|
self.target_list = target_list.copy()
|
|||
|
|
|||
|
def get_target_list(self):
|
|||
|
"""获取本次调仓候选股票列表"""
|
|||
|
return self.target_list
|
|||
|
|
|||
|
def get_configs(self) -> dict:
|
|||
|
"""
|
|||
|
获取策略配置
|
|||
|
:return: strategy_config 对象
|
|||
|
"""
|
|||
|
return self.strategy_config.get_all_configs()
|
|||
|
|
|||
|
def get_strategy_config(self) -> strategy_config:
|
|||
|
"""
|
|||
|
获取策略配置字典
|
|||
|
:return: 包含所有配置参数的字典
|
|||
|
"""
|
|||
|
return self.strategy_config
|
|||
|
|
|||
|
def close_position(self, context, stock: str):
|
|||
|
"""
|
|||
|
平仓操作:尽可能将指定股票仓位全部卖出
|
|||
|
参数:
|
|||
|
position: 持仓对象
|
|||
|
返回:
|
|||
|
若下单后订单全部成交返回 True,否则返回 False
|
|||
|
"""
|
|||
|
self.channel.close_positions(context, stock)
|
|||
|
|
|||
|
def open_position(self, security: str, value: float) -> bool:
|
|||
|
"""
|
|||
|
开仓操作:尝试买入指定股票
|
|||
|
参数:
|
|||
|
security: 股票代码
|
|||
|
value: 分配给该股票的资金
|
|||
|
返回:
|
|||
|
若下单成功(部分或全部成交)返回 True,否则返回 False
|
|||
|
"""
|
|||
|
return self.channel.open_position(security, value)
|