2015
wFilter
介绍
wFilter是一个实时对网络报文进行关键字过虑,告警,拦截的一个项目。
可以理解为一个Mini GFW,也是一个Mini的Full-stack项目。
原理主要是基于DPDK的针对网络二层帧的实时深度解析,字符串多模同时匹配(Aho-Corasick算法)。
优点是集成了DPDK大页内存管理(hugepage),应用处理报文无拷贝(uio),CPU独占(core affinity)和Aho-Corasick算法的字符串一次便利,多模同时匹配特性。实时性高,性能高。
Aho-Corasick: https://www.youtube.com/watch?v=d24CyiU1JFk
架构和部署
wFilter项目实际包括三部分。
报文过滤器 wFilter:
底层(数据面) ,负责报文转发和关键字过虑告警。可以根据压力调节CPU独占情况。管理后端 wFilter-back:
中间层(控制面),以MongoDB为中心,存储配置信息和实时告警日志。对下使用syslog-ng对接过滤器日志,对上试用RESTful API提供配置和日志的CRUD服务。管理前端 wFilter-front:
上层(表现层),提供Web形式的管理页面,使用MEAN架构(MongoDB, ExpressJS, AngularJS, Node.js),提供无刷新SPA(single page application) UI体验。
架构优点是部署灵活,接口标准,可以扩展至Web,桌面,移动APP。
报文过滤器需要部署在X86 Linux服务器上,CPU硬件支持DPDK,支持双网卡。与管理前端后端和统一部署在一台服务器(single deploy)。也可以分布式部署到两台,三台甚至更多服务器上(multiple deploy)。
举一个例子,用户有N个报文过滤器分布部署,数据后端可以根据压力情况部署N/2个,即每两个过滤器共享一个数据库。前端可以只有一个页面整体展示数据。未来如果需要对数据做MapReduce,可以扩展中间件层。
2014
XIAOSHAOZI
介绍
XIAOSHAOZI是一个Bitcoin自动交易框架,可以实现高频自动交易功能。程序通过设置的参数通过高频追踪当前市场价格来判断走势,进行自动的买入卖出。
程序提供了JSON配置文件,抽象了API,算法接口。并拥有简单的前台方便管理。
结构
├── EncryDigestUtil.java
├── README.md
├── api -> API接口适配集合
│ ├── EncryDigestUtil.class
│ ├── api_btcchina.go
│ ├── api_chbtc.go
│ ├── api_fxbtc.go
│ ├── api_huobi_v1.go
│ ├── api_huobi_v2.go
│ ├── api_okcoin.go
├── chbtc_donge.json
├── chbtc_kongting.json
├── config.go -> 配置文件处理
├── ema.go -> 算法接口,目前只有移动平均线:)
├── huobi.json
├── huobi_23jh.json
├── main.go -> 主程序,前后台
├── okcoin.json
├── run.sh
├── simu_23jh.json
└── simu_huobi.json -> JSON均为配置文件,未提供
配置
主程序读取配置文件启动启动,API接口,模拟运行,算法参数等均在此配置。
{
"Id": 1, /* 暂未使用 */
"Type": 0, /* API接口编号,见API编号说明 */
"Port": "0.0.0.0:8888", /* 管理前台Web地址 */
"Email": "hello", /* 模拟接口使用 */
"Password": "world",
"AccessKey": "132c0bbd-2fb8c51d-b5b2e537-6a0a2", /* 官方接口使用密钥适配 */
"SecurtKey": "03ba516d-a76e1ce6-a788b38c-e73e7",
"Quick": 500, /* 快线速度 */
"Slow": 1200, /* 慢线速度 */
"QuickInit": 0, /* 快线初始值 */
"SlowInit": 0, /* 慢线初始值 */
"Delta": 1, /* 突破偏移量 */
"Diff": 10, /* 挂单超量 */
"Pulse": 15, /* 间隔,单位秒 */
"Simulator": false, /* 模拟功能开关 */
"Cash": 0, /* 模拟功能初始现金 */
"Coin": 0 /* 模拟功能初始币数 */
}
API
框架利用Golang interface特性,抽象了交易API接口,根据配置文件适配了主流的国内交易所API:
0. 火币网(api_huobi_v1.go): 非官方接口,利用http request模拟用户登录,交易操作的接口,是在官方接口失效情况下的备份。
火币网(api_huobi_v2.go): 适配火币网官方的Restful API。
2. Okcoin(api_okcoin.go): 适配Okcoin官方的Restful API。
3. 比特币中国(api_btcchina.go): 适配比特币中国官方的Restful API。
1. 中国比特币(api_chbtc.go): 适配中国比特币的API,接口中因为有一个算法问题,实际调用了官方提供的Java接口(EncryDigestUtil.class)。
4. FXBTC(api_fxbtc.go): FXBTC是早期的比特币交易所,现在已经倒闭。
算法
只适配了移动平均线,简称均线。设置一条快线,一条慢线,进行追逐。当快线突破慢线时,进行交易。默认15s进行一次市场价格查询,保证实时性。
向上突破,说明短期见涨,进行买入。向下突破,说明短期见跌,进行卖出止损。
这个是最简单的算法,也容易理解。
管理
管理采用Web接口来监控运行状态,可以随时调整参数。比如
http://0.0.0.0:8888/?quick_step=1000
即可将快线参数调整为1000.
部署
程序可以部署在各种VPS上,编译后程序不依赖Golang环境,这也是Golang的一个优点。
我推荐是通过树莓派在家中部署,一为网速快,避免差价操作失败。二为安全,类似于银行密码的东西就不要放在云上了。
通过花生壳或者2233等服务映射到外网端口,通过手机浏览器进行实时监控和管理。
写在最后
量化交易程序并不能一夜暴富。实践后才知道,实际市场中并没有万能的算法,当然也并不是复杂的算法就会盈利,简单算法就会赔钱。市场的趋势符合算法才能盈利,而市场本身的趋势是无法预测的。短期的趋势符合参数才能有所收益,是否能坚持一种风格交易,完全是人性的问题。当然请保持学习的态度和娱乐精神:)