照着敲,运行不了

来源:9-1 量化选股--量化选股概况

weixin_慕九州0384870

2024-03-16

import datetime

#初始化函数,设定操作股票,基础等等
def initialize(context):
#设定沪深300作为基准
set_benchmark(‘000300.XSHG’)
#开始动态复权模式
set_option(‘use_real_price’, True)
#设定成交额比例
set_option(‘order_volume_ratio’, 1)
#设定佣金和印花税
set_order_cost(OrderCost(open_tax=0,
close_tax=0.001, open_commission=0.0003,
close_commission=0.0003,
close_today_commission=0, min_commission=5), type=‘stock’)

#设定持仓数量
g.stocknum=20

#交易日计时器
g.days=20

#调仓频率
g.refresh_rate=100

#运行频率
run_daily(trade, 'every_bar')

#筛选逻辑
def check_stocks(context):
q=query(
indicator.code,
valuation.capitalization,
indicator.roe,
indicator.gross_profit_margin
).filter(
#总市值>50亿
valuation.capitalization>50,
#流通盘比例>95%
valuation.circulation_market_cap> valuation.market_cap*0.95,
#销售毛利率>20%
indicator.gross_profit_margin>20,
#扣非净资产收益率>20%
indicator.roe>20
).order_by(
#按照市值排序
valuation.market_cap.desc().limit(100)
)

df=get_fundamentals(q,statDate=str(context.current_dt)[:4])    
buylist=list(df['code'])
#上市天数>750(抛开3年内的次新)
buylist=delect_stock(buylist,context.current_dt,750)
buylist=filter_paused_stock(buylist)[:20]
return buylist

#过滤停牌股票
def filter_paused_stock(stock_list):
current_date=get_current_date()
return [stock for stock in stock_list if not currrent_date[stock].paused]

#排除次新(180天以上)
def delect_stock(stocks,beginDate,n=180):
#去除上市距beginDate不足N天的股票
stocklist=[]
for stock in stocks:
start_date=get_security_info(stock).start_date
if start_date < (beginData - timedelta(days = n)).date():
stocklist.append(stock)

return stocklist

#交易函数
def trade(context):
if g.days % g.refresh_rate==0:
#白马股选股
stocklist=check_stocks(context)
#获取持仓列表
sell_list=list(context.portfolio.positions.keys())
sells=list (set(sell_list).difference(set(stocklist)))

    #先卖再买
    for stock in sells:
        order_target_value(stock,0)
    #分配资金
    if len(context.portfolio.positions) <g.stocknum:
        num=g.stocknum-len(context.portfolio.positions)
        cash=context.portfolio.cash/num
    else:
        cash=0
    for stock in stocklist:
        if len(context.portfolio.positions)<g.stocknum and stock not in context.portfolio.positions:
            order_value(stock,cash)
    
    #更新天数计算器
    g.days=1
else:
    g.days+=1
写回答

1回答

meteor2022

2024-07-22

这也看不出来你的错误是啥,你得截屏聚宽的错误提示。

0
0

Python 量化交易工程师养成实战-金融高薪领域

带你走进前景可观的金融量化开发

678 学习 · 105 问题

查看课程