照着敲,运行不了
来源: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
这也看不出来你的错误是啥,你得截屏聚宽的错误提示。
00
相似问题