def initialize(context):
run_daily(period,time='every_bar')
# 代码:设定好要交易的股票数量stocksnum
g.stocksnum = 10
g.circulate = 10
g.haspass = 0
def period(context):
print(g.haspass)
if 0 == g.haspass % g.circulate :
#获得实时数据
current_data = get_current_data()
#获得所有股票代码
scu = get_all_securities(date= context.current_dt).index.tolist()
# 代码:找出市值排名最小的前stocksnum只股票作为要买入的股票
q=query(valuation.code,valuation.circulating_market_cap
# 筛选
).filter(valuation.code.in_(scu)
# 排序 按市值从小到大排列
).order_by(valuation.market_cap.asc()
# 数量 上限100条数据
).limit(100)
k = get_fundamentals(q)
w = []
count = 0
for code in list(k['code']):
#排除停牌,ST,已经涨停的股票
if current_data[code].paused == False & current_data[code].is_st == False & (current_data[code].last_price < current_data[code].high_limit) :
print(code)
w.append(code)
count = count + 1
#只取10条
if count == g.stocksnum:
break
# 代码:若已持有的股票的市值已经不够小而不在要买入的股票中,则卖出这些股票。
#已经持有的股票
allin = context.portfolio.positions
#可用现金
availableCash = context.portfolio.available_cash
print(availableCash)
# 代码:买入要买入的股票,买入金额为可用资金的stocksnum分之一
if 0 == len(allin):
for code in w:
order_value(code,availableCash/g.stocksnum)
else:
for key,value in allin.items():
if key not in w:
order_target(key,0)
g.haspass = g.haspass + 1
2023-02-07