交作业
来源: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