第67章 获取金融数据(2/2)
林晨开始计算最基础的几个技术指标。他先写了一个移动平均线函数:
defcalcute_a(df,dow=5):
df[fa{dow}]=df[close].rollg(dow=dow).an
returndf
然后是相对强弱指数(RSI):
defcalcute_rsi(df,dow=14):
delta=df[close].diff
ga=(delta.where(delta>0,(dow=dow).an
loss=(-delta.where(delta<0,(dow=dow).an
rs=ga/loss
df[rsi]=100-(100/(1+rs))
returndf
一个下午,林晨沉浸在代码和数学公式里。他计算了MACD、布林带、动量指标……每完成一个指标函数,他就运行测试,看着数据框里新增的列,有种创造者的成就感。
傍晚六点,当林晨终于完成第一批10只股票的特征工程时,窗外已是华灯初上。他靠在椅背上,看着屏幕上那些密密麻麻的数字和曲线,忽然笑了。
“原来这就是量化分析的基础”。他喃喃道,“把市场变成数字,把数字变成特征,把特征喂给模型……”
这个过程的繁琐超出了他的预期,但每一步的完成都让他更接近目标。更重要的是,通过亲手处理这些数据,他开始真正理解金融市场的数据结构——不再是股民眼中的K线图,而是程序员眼中的多维矩阵。
手机震动,是母亲发来的微信:“晨晨,吃饭了吗?别老盯着电脑”。
林晨回复:“吃了,妈。在学新东西,挺好的”。
他关掉电脑,走到窗前。对面楼里家家户户亮着灯,有人家在做饭,有孩子在写作业,有夫妻在看电视——这是最普通的鹏城夜晚。而在这千万扇窗户中的一扇后面,一个失业的35岁程序员,正在尝试用代码解读市场的秘密。
林晨忽然想起多年前刚学编程时,老师说过的话:“程序员的超能力,是把复杂世界抽象成逻辑”。
他现在做的正是这件事:把波诡云谲的金融市场,抽象成一行行数据、一个个特征、一条条规则。
晚饭时,苏婉问起进展。林晨用最通俗的方式解释:“就像你要做一桌好菜,我先去把各种食材买齐,洗干净,切好,准备好调料。现在食材准备阶段完成了一小部分”。
“那什么时候能炒菜”?苏婉问。
“还得研究菜谱呢”。林晨笑道,“就是交易策略”。
晚上九点,林晨重新坐回电脑前。他没有继续写代码,而是打开了一个空白文档,开始整理今天的学习笔记:
1.数据源:thare(部分付费)+akshare(免费但需处理反爬)
2.存储方案:MySQL数据库,已设计基础表结构
3.数据处理:pandas数据清洗,初步完成缺失值、异常值处理
4.特征工程:已实现10个基础技术指标函数
5.待解决问题:数据更新机制、分钟级高频数据获取、财务数据整合……
写到这里,林晨停顿了一下,在文档末尾加了一行字:
“数据质量决定模型上限。宁可慢,不可乱”。
这是他今天最大的感悟。在跨境电商公司工作时,他也处理过大量数据,但那些是用户行为数据、商品销售数据,错了顶多影响推荐效果。而金融数据不同——每一行数字背后,都是真金白银的波动。
睡前,林晨最后检查了一次数据库。300只股票的基础数据安静地躺在表格里,等待被分析和挖掘。他忽然有种奇怪的感觉:这些冰冷的数据,似乎有了温度。
手机又震动了,这次是堂哥林枫发来的语音:“晨晨,浩浩今天打电话回来,说工厂最近订单少了,可能要裁员。他问我该怎么办,我也不知道怎么建议……你说呢”?
林晨看着这条消息,沉默了很久。
窗外,鹏城的夜空难得能看到几颗星星。这座永远忙碌的城市里,无数人正在为生计奔波——在工厂流水线上,在写字楼格子间里,在送外卖的路上,在开网约车的深夜。
而此刻,林晨坐在书桌前,面前是闪烁着代码的屏幕,身后是熟睡的妻子,手机里是堂哥关于侄儿前途的询问。
他忽然明白了自己为什么要做这个投资系统。
不仅仅是为了赚钱,不仅仅是为了证明自己,更是为了在不确定的时代里,找到一种确定性的方法——一种用逻辑对抗随机,用数据理解世界,用技术创造可能的方法。
“明天再研究下基本面的数据获取”。林晨设定好闹钟,关掉台灯,“财报数据、行业数据、宏观数据……都得整合进来”。
黑暗中,他闭上眼睛,脑海里不是股票代码和K线图,而是更广阔的图景:一个能够理解市场语言、洞察经济脉搏、辅助投资决策的智能系统。
这条路很长,但他已经迈出了第一步。
而且,他隐约感觉到,自己走对了方向。