指数内小市值股票买入策略
- 每周第一个交易日调仓
- 剔除停牌股票
- 选取符合要求的股票进行等额投资
- 不设置止损止盈条件
## 初始化函数,设定要操作的股票、基准等等
def init(context):
run_daily(handle_bar, 'every_bar')
# 设定沪深300作为基准
set_benchmark('000300.SH')
# 设定成交量比例
set_volume_limit(0.25, 0.5)
# 股票类交易手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
set_commission(PerShare(type='stock', cost=0.0003, min_trade_cost=5.0))
# 持仓数量
g.stocknum = 3
# 交易日计时器
g.days = 0
# 调仓频率
g.refresh_rate = 5
def handle_bar(context, bar_dict):
if g.days % g.refresh_rate == 0:
# 获取持仓列表
sell_list = list(get_index_stocks('000300.SH'))
print(sell_list)
# 如果有持仓,则卖出
if len(sell_list) > 0:
for stock in sell_list:
# 按照目标金额下单
order_target_value(stock, 20000)
# 分配资金
if len(context.portfolio.positions) < g.stocknum:
Num = g.stocknum - len(context.portfolio.positions)
Cash = context.portfolio.available_cash / Num
else:
Cash = 0
# 选股,并传入context对象
stock_list = check_stocks(context)
# 买入股票
for stock in stock_list:
if len(context.portfolio.stock_account.positions) < g.stocknum:
order_value(stock, Cash)
# 天计数加一
g.days = 1
else:
g.days += 1
## 选出小市值股票
def check_stocks(context):
# 设定查询条件
q = query(valuation.symbol).filter(valuation.market_cap.between(20,30)).order_by(valuation.market_cap.asc())
# 选出低市值的股票,构成buylist
df = get_fundamentals(q)
buylist = df['valuation_symbol']
# 过滤停牌股票
buylist_filtered = filter_paused_stock(buylist)
return buylist_filtered[:g.stocknum]
# 过滤停牌股票
def filter_paused_stock(stock_list):
active_stocks = [stock for stock in stock_list if not is_paused(stock)]
return active_stocks

