整体思路就是
- 先把获取数据搞定
- 然后看下怎么做策略(我不用来直接做交易策略,先从分析入手,用这个工具来做自动监控,告诉我什么时候可以进场,至于交易的部分,我先手动来)
- 把自动化观测先建立起来,再看下一步
开始。
Python最适合初学用 最近几天补了一下python,看起来如果想做量化交易,python初期还是最好的工具,因为其简单易入手且库种类丰富(不需要自己写,直接调用)。这里,量化交易我一直理解为和高频交易是两回事,量化不等于高频,所以对时间延迟的要求不必特别高;如果要求很高的话,那么之后可以自己去做代码优化,有更好的实现方式。python的优势在于可以快速搭建mvp,快速验证,但代码效率不一定是最高。
学习的时候选一个适合自己的学习思路的课程 简单插一句,在学习python的过程里,我主要使用了b站,先是找了一个b站最多人浏览的python教程,是国人设置的课程,我看了一两节之后就放弃了,因为刚讲完helloworld就开始讲转置符,唤起了我记忆深处对谭浩强的恐惧。于是我换了一个来自油管搬运的mosh的课程,愉快的学到了最后。
这里我想说,根据我自身的真实感受,中国的教育思路是3d打印式的,比如要讲一栋房子是什么建起来的,中国的思路是,从第一层砖讲起,一层一层往上堆叠,到了离地10cm的地方碰上了管道,就开始讲管道,总之等这个3d的房子打印完,所有东西都会遇到一遍,到时候肯定都会给你讲一遍,你就知道了。国外的课程思路是,讲一栋房子怎样建成,先讲房屋的框架,讲结构是怎么先搭建起来,然后要铺水管走电线,最后做外层。我本人比较适合第二种思路,有助于理解这件事到底是什么。这里建议,如果学习一件事感到痛苦,记得要去换一个其他教学思路的教材,非常有可能不是你不适合学,是当前的教学思路不适合你。
开始尝试写一下 然后说回python,经过几天的学习,基本的python代码知识已经掌握,于是要开始实践了。
诚然实践里肯定还有很多问题,需要一点点磕出来。但是得先有个做这件事的思路框架才能指导行动。
所以定一个小规划。大概分为几个部分。
- 先实现一个小目标,用python来获取股票数据,其下又要有一些稍微具体点的定义
- 保存为csv文件;
- 每一个股票,保存为一个独立的csv文件;
- 每日定时自动运行(或手动),拉取最新的(昨日)的股票数据,并以增量方式存在其自身的文件内
- 拉取的股票代码,由一个单独的文件来维护,可随时增减;增的话,从第二天开始会新建一个其文件来做数据的存储,减的话,其原来的文件不会被删除,但是以后不会再有新数据增量;
这里打算,第一期先不做实时的动作,因为我把我的量化定义为非实时的策略操作,也就是说,我不用这个工具去做短期的进出,而是使用它作为我中长期进出的策略判断 写一个流程:
读取要拉取的股票代码文件,存在codes里,可自行维护
for code in codes:
按当前code补全url,获取股票数据信息,存在code_info里
把code_info写在文件中,文件名为code.csv
如果文件有了,就覆盖更新
如果文件没有,就创建新文件代码是:
import csv
from utility import *
with open('file_path/stock.csv') as code_file: #open stock code file
code_csv = csv.reader(code_file) # read stock code file, get content of this file
headers = next(code_csv) # indicate where header is
for code in code_file: # get current row value
print(code)
code = code.replace("\n",'') #去掉转义符,如需
code_info = pd.DataFrame(get_stock_info(code,'20210101','20220527')) #get current code's info
write_csv(code_info,code)# 写入各自的csv文件
code_file.close()
utility.py:
import pandas as pd
#read stock code,从自己维护的股票代码文件中读取
def get_stock_info(stock_code,start_date,end_date):
url = f'http://quotes.money.163.com/service/chddata.html?code={stock_code}&start={start_date}&end={end_date}'
rf = pd.read_csv(url, encoding='gb2312')
return rf
#write,写入code各自的csv文件中,如果没有就新建
def write_csv(content,code): #content is dataframe
content.to_csv(f'file_path/{code}.csv',index=False,header=True) #if存在,进行覆盖;if 不存在,新建
output:
就会按股票代码名称来创建各自的文件。
stock.csv是我自己维护的要观察的股票代码列表。
最后每个单独文件里就是这样:
遗留的问题,和下一步优化有:
- 文件做不到增量添加,每次都是全量覆盖重写,需要改进一下;
- 明天加几个初步的分析指标,在每次获取完数据后直接计算出来写进去;
- 尝试一下多个数据源,163的比较初级,再看下别的,总结一下到时候列出来;
- 搞一个数据库来存,然后搞一个定时任务来跑;
- 自家电脑也不太行,不知道有没有便宜的云服务器和数据库可以用;
基本上数据的部分就可以当做是ok,除非遇到需要清洗的到时候再看怎么处理。下一步就要补补业务知识了。边学边推进吧。
今天先到这。
要是有也在学习的同好,可以加个好友,互通有无。 |
|