data = D.history_data(instruments,start_date,end_date,
fields=['close'])
# 整理数据
data = pd.pivot_table(data,values='close',index=['date'],columns=['instrument'])
T.plot(data)
def initialize(context):
context.days = 0
context.ins = instruments
def handle_data(context, data):
context.days += 1
if context.days < 100:
return
# 每60天调仓一次
if context.days % 30 != 0:
return
# 获取数据的时间窗口并计算收益率
prices = data.history(context.symbols(context.ins[0],context.ins[1],context.ins[2],context.ins[3],context.ins[4]), 'price',100, '1d').dropna()
returns = prices.pct_change().dropna()
try:
# 马科维茨组合优化
weights, _, _ = optimal_portfolio(returns.T)
# print(weights)
# 对持仓进行权重调整
for stock, weight in zip(prices.columns, weights):
if data.can_trade(stock):
order_target_percent(stock, weight[0])
except ValueError as e:
pass
data = D.history_data(instruments,start_date,end_date,
fields=['close'])
# 整理数据
data = pd.pivot_table(data,values='close',index=['date'],columns=['instrument'])
T.plot(data)
def initialize(context):
context.days = 0
context.ins = instruments
def handle_data(context, data):
context.days += 1
if context.days < 100:
return
# 每60天调仓一次
if context.days % 30 != 0:
return
# 获取数据的时间窗口并计算收益率
prices = data.history(context.symbols(context.ins[0],context.ins[1],context.ins[2],context.ins[3],context.ins[4]), 'price',100, '1d').dropna()
returns = prices.pct_change().dropna()
try:
# 马科维茨组合优化
weights, _, _ = optimal_portfolio(returns.T)
# print(weights)
# 对持仓进行权重调整
for stock, weight in zip(prices.columns, weights):
if data.can_trade(stock):
order_target_percent(stock, weight[0])
except ValueError as e:
pass