交作业
来源:4-10 【作业】双均线策略:寻找最优参数
慕粉17780521093
2021-08-06
import data.stock as st
from data.strategy import ma_strategy as ma_stra
from data.strategy import statistical_test as ttest
# 设置全局变量
factors = [[5, 10], [5, 20], [5, 60], [5, 120], [10, 120]]
start_date = '2015-01-01'
end_date = '2021-01-01'
buff = pd.DataFrame(columns=['best_factor', 'cum_profit_pct'])
# 获取股票名队列中的股票代码
names = ['亿纬锂能', '贵州茅台', '鲁西化工', '比亚迪', '国科微', '赣锋锂业', '爱尔眼科']
stocks = []
for name in names:
stocks.append(st.get_single_stock_code(name))
# 计算不同均线参数的收益率,并获取收益率最高的周期参数
for code in stocks:
price = st.get_cvs_data(code, None, start_date, end_date) # 获取每只股票价格信息
# 获取每只股票ma策略收益率最高的参数
for factor in factors:
data_ma = ma_stra.ma_strategy(price, factor[0], factor[1])
# 将当前股票不同参数对应的最终累计收益率成对存放进入buff,列名为【'最优参数设置','累计年化收益率'】
if len(data_ma['cum_profit_pct']) != 0:
buff = buff.append(
pd.DataFrame([[factor, data_ma['cum_profit_pct'][-1]]], columns=['best_factor', 'cum_profit_pct']),
ignore_index=True)
index = buff['cum_profit_pct'].idxmax(skipna=True) # 获取buff中cum_profit_pct最大的值(最优周期参数)所在的行数(从0开始计数)
# 对该最优周期参数对应的每日收益率进行假设检验
best_ma = ma_stra.ma_strategy(price, buff.loc[index, 'best_factor'][0],
buff.loc[index, 'best_factor'][1]) # 用最优周期参数重新进行双均线策略计算收益率;
print(st.get_single_stock_name(code), '在', start_date, '至', end_date, '期间,双均线参数选取',
buff.loc[index, 'best_factor'], '时收益最佳,t,p值分别为:')
t, p = ttest.ttest(best_ma['profit_pct']) # 对最优周期参数收益率进行t检验,并获取t,p值
print('_________________________________________________________\n')输出为:
已更新至: /Users/zhongbo/PycharmProjects/pythonProject1/DelatTrader/data/price/300014.XSHE.csv
亿纬锂能 在 2015-01-01 至 2021-01-01 期间,双均线参数选取 [5, 20] 时收益最佳,t,p值分别为:
t-value: 2.3840243744826046
p-value: 0.01118322516595536
是否拒绝[H0]收益均值=0: True
_________________________________________________________
已更新至: /Users/zhongbo/PycharmProjects/pythonProject1/DelatTrader/data/price/600519.XSHG.csv
贵州茅台 在 2015-01-01 至 2021-01-01 期间,双均线参数选取 [5, 20] 时收益最佳,t,p值分别为:
t-value: 2.130388205267093
p-value: 0.01952003167865545
是否拒绝[H0]收益均值=0: True
_________________________________________________________
已更新至: /Users/zhongbo/PycharmProjects/pythonProject1/DelatTrader/data/price/000830.XSHE.csv
鲁西化工 在 2015-01-01 至 2021-01-01 期间,双均线参数选取 [5, 20] 时收益最佳,t,p值分别为:
t-value: 1.4160853342637827
p-value: 0.0818955368213446
是否拒绝[H0]收益均值=0: False
_________________________________________________________
已更新至: /Users/zhongbo/PycharmProjects/pythonProject1/DelatTrader/data/price/002594.XSHE.csv
比亚迪 在 2015-01-01 至 2021-01-01 期间,双均线参数选取 [5, 20] 时收益最佳,t,p值分别为:
t-value: 1.6835418903579953
p-value: 0.049935292840739845
是否拒绝[H0]收益均值=0: True
_________________________________________________________
已更新至: /Users/zhongbo/PycharmProjects/pythonProject1/DelatTrader/data/price/300672.XSHE.csv
国科微 在 2015-01-01 至 2021-01-01 期间,双均线参数选取 [5, 20] 时收益最佳,t,p值分别为:
t-value: 0.7509848292119392
p-value: 0.22957877265866206
是否拒绝[H0]收益均值=0: False
_________________________________________________________
已更新至: /Users/zhongbo/PycharmProjects/pythonProject1/DelatTrader/data/price/002460.XSHE.csv
赣锋锂业 在 2015-01-01 至 2021-01-01 期间,双均线参数选取 [5, 20] 时收益最佳,t,p值分别为:
t-value: 1.52883212800921
p-value: 0.06699265793731662
是否拒绝[H0]收益均值=0: False
_________________________________________________________
已更新至: /Users/zhongbo/PycharmProjects/pythonProject1/DelatTrader/data/price/300015.XSHE.csv
爱尔眼科 在 2015-01-01 至 2021-01-01 期间,双均线参数选取 [5, 20] 时收益最佳,t,p值分别为:
t-value: 1.8911462941423924
p-value: 0.032526323188679845
是否拒绝[H0]收益均值=0: True
_________________________________________________________
Process finished with exit code 0
入正文
2回答
-
慕容3139001
2023-01-11
请问为什么要这行代码“if len(data_ma['cum_profit_pct']) != 0”,会有不存在累计收益率的股票吗?谢谢!
00 -
DeltaF
2021-08-08
棒棒的,祝学习愉快
00