从零开始用Python实现股票量化交易之小白笔记(8)

19 篇文章 4 订阅
12 篇文章 3 订阅

传送门

本系列原创博文传送门:

从零开始用Python实现股票量化交易之小白笔记(1)

从零开始用Python实现股票量化交易之小白笔记(2)

从零开始用Python实现股票量化交易之小白笔记(3)

从零开始用Python实现股票量化交易之小白笔记(4)

从零开始用Python实现股票量化交易之小白笔记(5)

从零开始用Python实现股票量化交易之小白笔记(6)

从零开始用Python实现股票量化交易之小白笔记(7)

从零开始用Python实现股票量化交易之小白笔记(8)

从零开始用Python实现股票量化交易之小白笔记(9)

 

正文

 

今天开始我们讲一下股票交易策略。

所谓的策略,按我的理解,就是一套交易规则。

什么时候买入,什么时候卖出。

买入只有一个时机,就是出现买点。

卖出有三个时机,一个是出现卖点,一个是出现止盈点,还有一个是止损点。

好的策略还会考虑趋势,先判断当前是什么趋势,是多,还是空,还是横盘震荡。

下面有一个策略:

如果过去 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]

 

这样就完成第二步了。

这一篇先到这里。

 

 

 

 

 

 

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值