传送门
本系列原创博文传送门:
正文
今天开始我们讲一下股票交易策略。
所谓的策略,按我的理解,就是一套交易规则。
什么时候买入,什么时候卖出。
买入只有一个时机,就是出现买点。
卖出有三个时机,一个是出现卖点,一个是出现止盈点,还有一个是止损点。
好的策略还会考虑趋势,先判断当前是什么趋势,是多,还是空,还是横盘震荡。
下面有一个策略:
如果过去 10 年,每个月初进行一次判断,如果上个月沪深 300 指数涨了,按均分买入 上个月下跌最大的 100 只股票(就是每只股票买 0.01 乘总财富) ,然后在当月月底卖出, 这样持续地每个月操作,这样的策略的收益是怎样的?不用考虑手续费。如果上个月沪 深 300 指数跌了,则在本月无操作。
我们看这个策略,有买点、卖点,有趋势,没有止盈和止损。但有考虑风险分摊。
接下来我们就来实现这个策略。
我们先梳理一下实现思路和步骤:
1、获取沪深300指数的10年的月线数据;
2、获取股市10年的月线数据;
3、开始遍历月份;
4、判断是否持有股票;
5、如有,则计算涨幅利润,汇总收益;
6、判断上一个月的指数涨幅是否为正;
7、如否,则跳过,看下一个月的数据;
8、如是,选出涨幅最小(负数)的一百只股票,进行持股;
先用代码实现第一步。
这第一步其实还包含了好几个小步骤。
如何获取呢?
我们在tushare.pro上看到了指数月线行情的接口,发现里面有个参数我们要找到,就是沪深300指数的ts_code
这样我们就又回去看指数基本信息接口,研究了下,编写以下代码:
#coding=utf-8
from common import db
from common import ts
import tushare
ts.set_ts_token()
pro = tushare.pro_api()
data = ''
try:
data = pro.index_basic(market='SSE') #上交所
bool_array = data.name.str.contains('沪深300') #筛选
print(data[bool_array]) #筛选
except Exception as e:
print(e)
打印数据如下:
ts_code name market ... base_date base_point list_date
146 000300.SH 沪深300 SSE ... 20041231 1000.0 20050408
170 000828.SH 沪深300高贝塔 SSE ... 20041231 1000.0 20120806
171 000829.SH 沪深300低贝塔(SH) SSE ... 20041231 1000.0 20120806
179 000843.SH 沪深300动态(SH) SSE ... 20041231 1000.0 20130107
180 000844.SH 沪深300稳定(SH) SSE ... 20041231 1000.0 20130107
202 000913.SH 沪深300医药 SSE ... 20041231 1000.0 20070702
203 000914.SH 沪深300金融 SSE ... 20041231 1000.0 20070702
204 000915.SH 沪深300信息(SH) SSE ... 20041231 1000.0 20070702
205 000916.SH 沪深300电信(SH) SSE ... 20041231 1000.0 20070702
206 000918.SH 沪深300成长 SSE ... 20041231 1000.0 20080121
207 000920.SH 沪深300R成长(SH) SSE ... 20041231 1000.0 20080121
208 000921.SH 沪深300R价值(SH) SSE ... 20041231 1000.0 20080121
第一个就是,ts_code=000300.SH
然后根据它获取10年的月线。
今天是2019-12-18,那么十年前,就是2009-12-18,按月初来计算
start_date='20091201'
end_date='20191130'
编写代码,如下:
#coding=utf-8
from common import db
from common import ts
import tushare
ts.set_ts_token()
pro = tushare.pro_api()
data = ''
try:
index_ts_code = '000300.SH'
start_date = '20091201'
end_date = '20191130'
df = pro.index_monthly(ts_code=index_ts_code, start_date=start_date, end_date=end_date,
fields='ts_code,trade_date,change')
print(df)
except Exception as e:
print(e)
打印内容如下:
ts_code trade_date change
0 000300.SH 20191129 -58.0813
1 000300.SH 20191031 72.2237
2 000300.SH 20190930 14.9419
3 000300.SH 20190830 -35.7726
4 000300.SH 20190731 9.7716
5 000300.SH 20190628 195.7980
6 000300.SH 20190531 -283.4217
7 000300.SH 20190430 40.8698
8 000300.SH 20190329 202.9709
9 000300.SH 20190228 467.7372
10 000300.SH 20190131 190.9795
11 000300.SH 20181228 -162.0364
12 000300.SH 20181130 18.8666
13 000300.SH 20181031 -285.0415
14 000300.SH 20180928 104.3613
15 000300.SH 20180831 -183.1532
16 000300.SH 20180731 6.6723
17 000300.SH 20180629 -291.3914
18 000300.SH 20180531 45.4994
19 000300.SH 20180427 -141.6212
20 000300.SH 20180330 -125.1438
21 000300.SH 20180228 -252.2571
22 000300.SH 20180131 245.0437
23 000300.SH 20171229 24.7556
24 000300.SH 20171130 -0.6186
25 000300.SH 20171031 170.2166
26 000300.SH 20170929 14.4085
27 000300.SH 20170831 84.2196
28 000300.SH 20170731 71.0755
29 000300.SH 20170630 173.9132
.. ... ... ...
90 000300.SH 20120531 5.8800
91 000300.SH 20120427 171.2600
92 000300.SH 20120330 -179.2400
93 000300.SH 20120229 169.8800
94 000300.SH 20120131 118.5200
95 000300.SH 20111230 -175.7800
96 000300.SH 20111130 -173.7900
97 000300.SH 20111031 113.9600
98 000300.SH 20110930 -265.4300
99 000300.SH 20110831 -125.3000
100 000300.SH 20110729 -72.0100
101 000300.SH 20110630 42.5300
102 000300.SH 20110531 -191.1600
103 000300.SH 20110429 -30.5700
104 000300.SH 20110331 -16.2700
105 000300.SH 20110228 163.0500
106 000300.SH 20110131 -51.7500
107 000300.SH 20101231 -8.7300
108 000300.SH 20101130 -242.9900
109 000300.SH 20101029 444.4100
110 000300.SH 20100930 32.3800
111 000300.SH 20100831 34.3400
112 000300.SH 20100730 305.7800
113 000300.SH 20100630 -210.1900
114 000300.SH 20100531 -294.1100
115 000300.SH 20100430 -278.2400
116 000300.SH 20100331 63.9400
117 000300.SH 20100226 77.5100
118 000300.SH 20100129 -371.5200
119 000300.SH 20091231 64.0100
[120 rows x 3 columns]
这样就完成第二步了。
这一篇先到这里。