最近迷上股市无法自拔,因为想提高胜率,所以在学习技术分析,一开始是使用通达信软件写写选股公式,后面打算自己弄一个选股系统(事实证明用处不大,哈哈哈)。
大概是这样实现的:首先用node写了个简单的服务,每天定时跑日k线数据。然后设计了个简单的mysql表来存储这些数据,最后自己写了一些sql来分析这些k线数据,固定了一个简单的模型。但是收益效果实在一般,还需要加强学习。这次主要是简单分享一下实现的方式,也顺便做一次技术总结,并不是劝朋友们去炒股哈。
系统结构
ig507(ig507.com)是我从网上找的一个提供免费接口的网站,普通版不收费,我觉得暂时还够用。所以就把它作为数据源了。
有一个注意点是这些接口限制单位时间的请求次数,每3s,2s才能请求一次。
请求的方式很简单,文档介绍
请求代码
const axios = require('axios');
const licence ='个人申请一个免费的licence就够用了,访问网站就能看到怎么申请。';
const getStockHistoryData = async (sid) => {
const historyUrl = `http://ig507.com/data/time/history/trade/${sid}/Day_qfq?licence=${licence}`;
const { data = [] } = await axios.get(historyUrl);
return data;
}
mysql mystock 数据库只有一个quantity_and_kline表,表设计也很简单(需要数据可以自己加字段)
CREATE TABLE `quantity_and_kline` (
`id` varchar(45) NOT NULL COMMENT '股票id',
`close` float DEFAULT NULL COMMENT '收盘价',
`open` float DEFAULT NULL COMMENT '开盘价',
`high` float DEFAULT NULL COMMENT '最高价',
`low` float DEFAULT NULL COMMENT '最低价',
`quantity` int(11) DEFAULT NULL COMMENT '成交量',
`ds` int(11) NOT NULL,
PRIMARY KEY (`id`,`ds`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
node 服务也比较简单,大概说一下服务的运行逻辑
目前来看,任务的启动还需要访问特定路由,因为我还只是部署在本地,一直开着一个服务耗内存,假设上线了,应该调整为时间条件出发,比如交易日的15:10分左右开始跑任务,这个时候数据源的数据已经更新完成了
sql 有了数据之后就通过sql来做筛选,来看看我蹩脚的sql语句(能用就行的那种)
获取最近四天,股价与成较量连续下跌,并且连续收阴线的股票,如图类型
select * from
quantity_and_kline t0,
quantity_and_kline t1,
quantity_and_kline t2,
quantity_and_kline t3
-- 关联 ,
where t0.id = t1.id
and t1.id = t2.id
and t2.id = t3.id
-- 时间
and t0.ds = 20210426
and t1.ds = 20210427
and t2.ds = 20210428
and t3.ds = 20210429
-- 缩量
and t0.quantity > t1.quantity
and t1.quantity > t2.quantity
and t2.quantity > t3.quantity
-- 股价跌
and t0.close > t1.close
and t1.close > t2.close
and t2.close > t3.close
-- 四天收阴
and t0.close < t0.open
and t1.close < t1.open
and t2.close < t2.open
and t3.close < t3.open
目前胜率挺低的,也没太多时间去验证。
另外使用这样的系统时间成本还是比较大,每天跑数据都要很久,还不如直接用通达信选股。
这次全当练手了,感兴趣的同学可以一起探讨一下。
欢迎评论,指出意见,或者说说你的想法。