本帖最后由 技术008 于 2021-8-25 13:07 编辑
代码如下:
[Python] 复制代码 [mw_shl_code=python,true]import numpy as npimport matplotlib.pyplot as plt
from PythonApi import *
def init(context):
# 标的品种
context.s1 = context.run_info.base_book_id
# 估值倍数
context.gz = {'40':[],'60':[],'80':[]}
context.close = []
context.date = []
# before_trading此函数会在每天基准合约的策略交易开始前被调用,当天只会被调用一次。--(选择实现)
def before_trading(context):
pass
# 你选择的品种的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新。--(必须实现)
def handle_bar(context):
close = history_bars(context.s1,1,'1d','CLOSE')
context.close.append(close[-1])
context.date.append(context.now)
get_fin = get_finance(context.s1,33,5,0,0)
month = get_fin[-1].date_val.month
if month == 3:
for i in context.gz.keys():
context.gz[i].append(get_fin[-1].values*float(i)+get_fin[-2].values*float(i)-get_fin[0].values*float(i))
if month == 6:
for i in context.gz.keys():
context.gz[i].append(get_fin[-1].values*float(i)+get_fin[-3].values*float(i)-get_fin[0].values*float(i))
if month == 9:
for i in context.gz.keys():
context.gz[i].append(get_fin[-1].values*float(i)+get_fin[-4].values*float(i)-get_fin[0].values*float(i))
if month == 12:
for i in context.gz.keys():
context.gz[i].append(get_fin[-1].values*float(i))
# exit函数会在测评结束或者停止策略运行时会被调用。---(选择实现)
def exit(context):
test_report_none()
plt_show(context)
def plt_show(context):
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
fig = plt.figure(figsize=(20,8))
X = context.date
Y = [context.close]
labels = ['close']
for i in context.gz.keys():
Y.append(context.gz[i])
labels.append(i+'倍动态PE估值')
for i in range(len(Y)):
plt.plot(X,Y[i],label=labels[i])
#plt.xticks(X,color='blue',rotation=45)
plt.title(context.s1)
plt.xlabel('日期')
plt.ylabel('价格',rotation=90)
plt.legend(loc='best')
plt.show() [/mw_shl_code]
|