# 導入函數庫
from jqdata import *
# 初始化函數,設定基準等等
def initialize(context):
# 設定滬深300作爲基準
set_benchmark('000002.XSHG')
# 開啓動態復權模式(真實價格)
set_option('use_real_price', True)
### 股票相關設定 ###
# 股票類每筆交易時的手續費是:買入時佣金萬分之三,賣出時佣金萬分之三加千分之一印花稅, 每筆交易佣金最低扣5塊錢
set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5),
type='stock')
g.security = get_index_stocks('000002.XSHG')
g.q = query(valuation).filter(valuation.code.in_(g.security))
g.N = 20
g.day = -1
def handle_data(context, data):
g.day += 1
if g.day % 30 == 0:
df = get_fundamentals(g.q)[['code', 'market_cap']]
df = df.sort_values('market_cap').iloc[:g.N, :]
to_hold = df['code'].values
# 現在持有的不在to_hold中的我們就清倉
for stock in context.portfolio.positions:
if stock not in to_hold:
order_target(stock, 0)
to_buy = []
for stock in to_hold:
if stock not in context.portfolio.positions:
to_buy.append(stock)
print(to_buy)
if len(to_buy) > 0:
cash_per_stock = context.portfolio.available_cash / len(to_buy)
for stock in to_buy:
order_value(stock, cash_per_stock)