交作业
来源:4-11 双均线策略:寻找最优参数

慕粉17780521093
2021-08-07
输入正
import pandas as pd import data.stock as st import data.strategy.ma_strategy as ma # 参数1:日期参数 start_date = '2016-01-01' end_date = '2021-01-01' # 参数2:获取所有股票代码 codes = list(st.get_all_securities('stock').index) # codes=['000024.XSHE'] # 参数3:周期参数 params = [5, 10, 20, 60, 120, 250] # 存放股票代码、名称和最优参数的窗口参数以及对应的累计收益 res = [] # 匹配并计算不同周期参数对的双均线策略收益 for code in codes: data = st.get_cvs_data(code, None, start_date, end_date) buff = [] # 存放单只股票的窗口参数和对应的累计收益 for short_win in params: for long_win in params: if long_win > short_win: data_res = ma.ma_strategy(data, short_win, long_win) if len(data_res['cum_profit_pct']) != 0: buff.append([short_win, long_win, data_res['cum_profit_pct'][-1]]) # 用dataframe来存储单只股票的参数及对应累计收益 df = pd.DataFrame(buff, columns=['short_win', 'long_win', 'cum_profit_pct']) # 按累计收益降序排序,第一行收益最高 df.sort_values(by='cum_profit_pct', ascending=False, inplace=True, ignore_index=True) # print(df) # 将该股票收益最高的收益率,以及对应的参数存入res if not df.empty: res.append([code, st.get_single_stock_name(code), df['short_win'][0], df['long_win'][0], df['cum_profit_pct'][0]]) res = pd.DataFrame(res, columns=['股票代码', '股票名称', '短均线', '长均线', '累计收益']) print(res)
输出
股票代码 股票名称 短均线 长均线 累计收益
0 000001.XSHE 平安银行 10 20 0.878808
1 000002.XSHE 万科A 5 10 0.632045
2 000004.XSHE 国华网安 60 120 0.000360
3 000005.XSHE ST星源 120 250 -0.120735
4 000006.XSHE 深振业A 20 120 0.025180
5 000007.XSHE *ST全新 10 20 0.074555
6 000008.XSHE 神州高铁 5 250 -0.225289
7 000009.XSHE 中国宝安 10 120 0.266550
8 000010.XSHE 美丽生态 120 250 -0.081638
9 000011.XSHE 深物业A 5 20 1.444595
10 000012.XSHE 南玻A 5 20 0.279840
11 000014.XSHE 沙河股份 120 250 -0.154316
12 000016.XSHE 深康佳A 10 120 0.349102
13 000017.XSHE 深中华A 60 120 -0.189555
14 000018.XSHE 神城A退 5 120 -0.440542
15 000019.XSHE 深粮控股 20 120 0.097367
16 000020.XSHE 深华发A 120 250 0.041104
17 000021.XSHE 深科技 60 120 1.165259
18 000022.XSHE 深赤湾A 20 60 0.621248
19 000023.XSHE 深天地A 60 120 -0.054055
20 000025.XSHE 特力A 120 250 -0.148175
21 000026.XSHE 飞亚达 20 60 0.498781
22 000027.XSHE 深圳能源 60 120 0.009304
23 000028.XSHE 国药一致 120 250 -0.054146
24 000029.XSHE 深深房A 5 120 -0.216234
25 000030.XSHE 富奥股份 60 120 0.796940
26 000031.XSHE 大悦城 5 250 -0.155478
27 000032.XSHE 深桑达A 60 120 1.383074
28 000033.XSHE 新都退 5 120 0.000000
29 000034.XSHE 神州数码 5 10 1.129487
30 000035.XSHE 中国天楹 5 20 -0.020243
31 000036.XSHE 华联控股 10 120 0.285607
32 000037.XSHE 深南电A 10 20 2.623502
33 000038.XSHE 深大通 10 20 0.278797
34 000039.XSHE 中集集团 10 20 0.686582
35 000040.XSHE 东旭蓝天 10 20 -0.071977
36 000042.XSHE 中洲控股 5 60 -0.173137
37 000043.XSHE 中航善达 5 20 1.056848
38 000045.XSHE 深纺织A 120 250 -0.279975
39 000046.XSHE 泛海控股 10 20 -0.146458
40 000048.XSHE 京基智农 5 10 0.124720
41 000049.XSHE 德赛电池 5 20 0.476313
42 000050.XSHE 深天马A 120 250 -0.116892
43 000055.XSHE 方大集团 10 20 0.369630
44 000056.XSHE 皇庭国际 60 250 -0.228437
45 000058.XSHE 深赛格 5 10 -0.088041
46 000059.XSHE 华锦股份 5 20 0.507233
47 000060.XSHE 中金岭南 20 60 -0.028813
48 000061.XSHE 农产品 20 120 0.443802
49 000062.XSHE 深圳华强 120 250 -0.188833
50 000063.XSHE 中兴通讯 60 120 2.490996
51 000065.XSHE 北方国际 5 20 0.905172
52 000066.XSHE 中国长城 10 20 1.077278
53 000068.XSHE 华控赛格 60 120 -0.005351
54 000069.XSHE 华侨城A 20 250 0.188573
55 000070.XSHE 特发信息 5 10 0.309951
56 000078.XSHE 海王生物 10 60 0.180446
…………
4146 688608.XSHG 恒玄科技 5 10 NaN
4147 688699.XSHG 明微电子 5 10 NaN
4148 688777.XSHG 中控技术 5 10 -0.001402
4149 688788.XSHG 科思科技 5 20 0.013390
4150 688981.XSHG 中芯国际 5 20 -0.038237
4151 689009.XSHG 九号公司 5 10 0.274107
Process finished with exit code 0
文
3回答
-
慕容3139001
2023-01-11
请问,为什么要有这行代码“if not df.empty”,会有空的df吗?df怎么会为空呢?谢谢
00 -
慕容3139001
2023-01-11
你是买了巨宽的会员吗?不然怎么能够获取这么多数据的啊?
00 -
DeltaF
2021-08-09
优秀,祝学习愉快
00