交作业

来源: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”,会有不存在累计收益率的股票吗?谢谢!

0
0

DeltaF

2021-08-08

棒棒的,祝学习愉快

0
0

程序员理财课 Python量化交易系统实战

打造一个自动交易平台,新手也能提升理财收益

2012 学习 · 405 问题

查看课程

相似问题

交作业

回答 1

交作业

回答 1

交作业

回答 1

交作业

回答 3