这个策略可以运行,但是没有策略收益,帮忙看看是哪里错了

用户头像小微微小
2025-03-27 发布

股票策略模版

初始化函数,全局只运行一次

def init(context):

设置基准收益:沪深300指数

set_benchmark('000300.SH')

打印日志

log.info('策略开始运行,初始化函数全局只运行一次')

设置股票每笔交易的手续费为万分之二(手续费在买卖成交后扣除,不包括税费,税费在卖出成交后扣除)

set_commission(PerShare(type='stock',cost=0.0002))

设置股票交易滑点0.5%,表示买入价为实际价格乘1.005,卖出价为实际价格乘0.995

set_slippage(PriceSlippage(0.005))

设置日级最大成交比例25%,分钟级最大成交比例50%

日频运行时,下单数量超过当天真实成交量25%,则全部不成交

分钟频运行时,下单数量超过当前分钟真实成交量50%,则全部不成交

#set_volume_limit(0.25,0.5)

设置要操作的股票:同花顺

context.security = '603212.SH'

回测区间、初始资金、运行频率请在右上方设置

#每日开盘前9:00被调用一次,用于储存自定义参数、全局变量,执行盘前选股等
def before_trading(context):

获取日期

date = get_datetime().strftime('%Y-%m-%d %H:%M:%S')

打印日期

log.info('{} 盘前运行'.format(date))

开盘时运行函数

def handle_bar(context, bar_dict):

获取时间

time = get_datetime().strftime('%Y-%m-%d %H:%M:%S')

打印时间

log.info('{} 盘中运行'.format(time))

策略参数

context.trend_window = 4 # EMA计算周期
context.buy_threshold = 0.0495 # 买入阈值
context.sell_threshold = 3.6 # 卖出阈值

主处理函数

def handle_data(context, data):
stock = context.stock_code
prices = data.history_bars(stock, 250, '1d', ['close','high','low']) # 获取250天数据

计算指标

low_100 = talib.MIN(prices.low, 100)[-1] # LLV(LOW,100)
high_250 = talib.MAX(prices.high, 250)[-1] # HHV(HIGH,250)

防止除零异常

denominator = high_250 - low_100
if denominator == 0:
return

计算趋势值

raw_value = (prices.close[-1] - low_100) / denominator * 4
trend_value = talib.EMA(np.array([raw_value]), context.trend_window)[-1]

获取当前持仓

position = context.portfolio.positions[stock].quantity

交易逻辑

if trend_value < context.buy_threshold and position == 0:
# 全仓买入
order_value(stock, context.portfolio.cash)
log.info(' 买入信号触发,趋势值={:.4f}'.format(trend_value))
elif trend_value > context.sell_threshold and position > 0:
# 全仓卖出
order_target(stock, 0)
log.info(' 卖出信号触发,趋势值={:.4f}'.format(trend_value))
def after_trading(context):

获取时间

time = get_datetime().strftime('%Y-%m-%d %H:%M:%S')

打印时间

log.info('{} 盘后运行'.format(time))
log.info('一天结束')

评论