买垃圾股就是A股最好的投资策略 不信我们看看。 我只买market cap最小的100支股票。 每月轮换。
用了最新的api 剔除停牌的股票fix 了一些bug
源代码
def init(context):
context.limit = 100
scheduler.run_monthly(rebalance, monthday=1)
def handle_bar(context, bar_dict):
pass
def before_trading(context):
fundamental_df = get_fundamentals(
query(
fundamentals.eod_derivative_indicator.market_cap
).order_by(
fundamentals.eod_derivative_indicator.market_cap.asc()
).limit(
context.limit
)
)
context.funamental_df = fundamental_df
context.stocks = fundamental_df.columns.values
update_universe(fundamental_df.columns.values)
def rebalance(context, bar_dict):
stocks = set(context.stocks)
holdings = set(get_holdings(context))
to_buy = stocks - holdings
to_sell = holdings - stocks
for stock in to_sell:
if bar_dict[stock].is_trading:
order_target_percent(stock , 0)
if len(to_buy) == 0:
return
to_buy = get_trading_stocks(to_buy, context, bar_dict)
cash = context.portfolio.cash
average_value = 0.95 * cash / len(to_buy)
for stock in to_buy:
if bar_dict[stock].is_trading:
order_target_value(stock, average_value)
def get_trading_stocks(to_buy, context, bar_dict):
trading_stocks = []
for stock in to_buy:
if bar_dict[stock].is_trading:
trading_stocks.append(stock)
return trading_stocks
def get_holdings(context):
positions = context.portfolio.positions
holdings = []
for position in positions:
if positions[position].quantity > 0:
holdings.append(position)
return holdings