全国统一热线:400-0592-888 /137-9977-6661(微信同号)
  • 域名查询商城模板PC模板响应式模板高级模板手机模板汇款方式网站备案材料
会心火网络,点击打开向导。
  • 首页
  • 网站建设
    • 网站总报价
    • 版1088元套餐
    • 仿1688元套餐
    • 仿2088元套餐
    • 美2688起套餐
    • 美3688起套餐
    • 美6888套餐
    • 高级定制
  • 产品&服务
    • 手机建站
    • 微信开发
    • 400电话
    • 短信接口
    • 真人语音
  • 网站推广
    • 关键词推广
    • 软件推广
    • 推广客户案例
    • 百度竞价
  • 400电话
    • 400电话
  • 资讯动态
    • 行业资讯
      • 互联网传媒
      • 互联网评论
      • 互联网外闻
      • 互联网动态
    • 帮助中心
    • 建站运营
      • 建站优化
      • 建站推广
      • 建站策划
      • 建站经验
    • 公司动态
  • 案例中心
    • 集团/上市公司
    • 礼品/茶业/烟酒
    • 传媒/文化公司
    • 房地产/商业中心
    • 电子商务
    • 家电/电子/科技
    • 医疗/制药
    • 交通运输/贸易/设施
    • 建材/建筑/家居
    • 教育培训/服务
    • 酒店/餐饮/食品
    • 日用品/轻工业/服装
    • 协会/单位/政府机关
    • 金融/能源/投资
    • 其它领域
  • 客服&公司
    • 关于我们
    • 联系我们
欢迎进入会心火网络
您是需要了解:
  • 为什么做网站?
  • 互联网作用?
  • 网站制作流程?
现在位置: 首页 >资讯动态 >行业资讯 >互联网动态 > 内容
    没有信息

Pomelo搭建交易系统实战

作者:   来源:    时间:2017-08-01 11:47:41    字体:[大] [中] [小]
关键词:   
导读:

前言

Pomelo是由网易开发的一套高度自由的开源Node.js服务器框架,最初为解决游戏开发领域的高并发、实时性所设计,对外提供了大量的API和工具库,使得服务器的定制化和扩展更加方便;但Pomelo并不仅仅应用于游戏行业,本文将使用其搭建一套简易的股票/期货交易系统服务器,以进一步探秘Pomelo的特性和使用方法。

Pomelo于2012年开源推出,目前已更新至2.2.5版本,令人兴奋的是新版本升级了socket.io库和rpc,修复了一些心跳及消息推送的bug,提高了框架的整体性能和稳定性;本文无特殊说明均以最新版本为基础进行构建。

股票/期货交易系统总体设计

本文主要针对Pomelo框架及其使用进行探秘,具体的金融交易策略和量化模型为金融范畴,不在本文阐述范围之内。

整个系统应包括以下模块:

  • 交易登陆系统

  • 行情数据源SDK

  • 数据处理系统(对数据按时间周期或分时进行切片处理等)

  • 指标拟合系统(输出量化指标,如均线、量能、MACD、KDJ、WR、波浪)

  • 模型回测系统(如以年、月、周为单位回测成功比率)

  • 预警系统

  • 下单系统(完成买进卖出、平仓、止损)

针对上述模块,我们使用pomelo设计如下图架构,依照官方推荐,我们将Servers分为 Frontend-Servers 和 Backend-Servers,同时由于登陆操作较少,我们直接将登陆服务器组设置为Frontend-Servers;数据库选型为mysql,用以存储用户及交易数据,这里我们引入Nodejs的 generic-pool 创建连接池;行情源数据来自三方SDK。

初始化

使用pomelo init命令建立工程后,我们的目录结构大致如下:

app.js是入口文件,app.start() 即可启动服务器;pomelo内部采用了挂载组件的方式启动各个模块/组件,这样可以更加灵活的扩展功能;从源码可以看出,pomelo大部分模块均挂载在Pomelo变量下,同时对外提供了工厂函数 createApp,会实例化一个Application对象,Application维护了 servers 和 components等,源码如下:

                 

Pomelo对底层通讯协议(ws、socket.io等)进行了很好的封装,统一放在 connectors 下,本文使用 hybridconnector ,如果采用web客户端可选用 sioconnector 。

登陆

本文将登陆服作为独立的一组服前端务器设计,为简单起见,clients向登陆服发送相关信息(name、password等)后,登陆服会进行校验,校验成功后会返回给clients一个token和connectors的ip及port,此时clients便可以使用token与交易系统通讯了。

由于login-server为Frontend-server,我们只需要创建handler作为对外接口。

In Login:


                 

In connectors:

                


在connector中会绑定用户的uid到session中,pushAll会将其同步给其他服务器,在用户断开时会触发closed事件,onUserDisconnected函数会通知其他服务器踢出该用户。

多进程路由选择

Pomelo native支持多进程分布式部署,clients的消息可以通过路由的方式选择connector,本文根据用户的id进行负载均衡,Pomelo本身支持自定义。

                  


DataServer & IndicatorServer

这两组server对clients透明,因此只需要建立remote跟交易系统进行rpc通信,DataServer主要负责解析行情数据,并格式化为符合我们需求的数据格式; IndicatorServer则负责将原始数据组装为分析用的各种指标,并向外提供接口。

现阶段很多三方SDK直接提供基础的数据指标,如MA、KDJ、VOL、CCI、WR等,因此本文将DataServer和IndicatorServer合并为一组server,统称为DataServer,负责为交易系统提供数据支持。

我们截取部分数据为例,DataServer统一将源数据格式化为如下格式:

"2017-03-01": { "OPEN": 32, "CLOSE": 33, "HIGH": 34, "LOW": 30, "MA5": 31.4, "MA10": 31.3, "MA30": 30.8, "MA60": 30.3, "KDJ":[65, 60, 41.7], "WR":[32, 33, 17] },

"2017-03-02": { "OPEN": 32.7, "CLOSE": 33.2,"HIGH": 34.8, "LOW": 31.5, "MA5": 32.7, "MA10": 31.5, "MA30": 30.4, "MA60": 30,"KDJ":[67, 61.4, 43.5], "WR":[30, 26, 16],

"2017-03-03": { "OPEN": 33.1, "CLOSE": 34.9, "HIGH": 35.8, "LOW": 32.3, "MA5": 33.8, "MA10": 32.1, "MA30": 31, "MA60": 30.7, "KDJ":[76, 63, 58], "WR":[19, 15, 12]}

DataServer数据分为Push和Pull模式,当天开盘及竞价的实时数据采用Push模式,历史数据采用被动Pull模式。

Push模式中我们使用pomelo-schedule做定时处理,其关键代码如下:


                

Push模式会在每个工作日9:00~15:00,将采集好的数据信息通过rpc直接调用LoopbackServer的receiveData远程函数,data参数即我们上面提到的格式化之后数据。

Pull模式直接提供remote rpc供LookbackServer远程调用拉取数据,Pull函数可以根据日期和不同的指标参数进行分段数据获取。

例如,获取2017年3月1日至今的MA5、kdj、wr、mtm、cci数据(具体指标含义请自行查阅相关文献):

                

LookbackServer & ExchangeServer

本节将介绍最重要的两个server,分别负责数据分析和订单系统。LookbackServer分析数据后会筛选出符合某策略的股票池,同时满足多种目标策略的股票将被选择为种子票,然后根据资金策略确定种子票的资金配置,并通过rpc通知ExchangeServer进行下单或获利了结,ExchangeServer也会通过rpc告知用户账户相关情况,以便及时报警。

我们以一组简单的策略为例(不使用未来函数),介绍servers之间的调用,

承接上节DataServer,LookbackServer中会接受DataServer的Push数据。

                

上述注册的rpc函数receiveData完成了关键的策略选股,如出现种子股并且回测成功,会调用Exchange服的远程rpc函数buy进行下单,本文下单的资金策略主要根据大盘指标ADL和ADR进行的,而不是通过个股的情况判断,感兴趣的同学可以研究下该指标,这里不赘述;下面一段代码描述了本文的一个wr选取黑马股简单策略(注:该策略未叠加未来函数,实盘有风险,盈亏自负)。

                

该指标解析,抓取波段黑马:

  1. 当前股价突破前30日最高价,向上突破;

  2. 选取均线多头排列,5日线 > 47日线 > 63日线 > 131日线 > 271日线;

  3. KDJ黄金交叉;

  4. 最重要的一点wr三线同时入线:即进入强势区间0~20;

  5. CCI并无出现超买情况;

  6. 量能并没失控:大于5日和63日均量;

  7. 价值投资:市盈率不能大于50,这样风险相对较小。

再次注明:该策略只能用于牛市和震荡市,熊市切勿使用!

举一档具体股票实例说明:

该票在箭头所示当天涨停,很多人认为该票前期涨幅已经过大,已经累积60%涨幅,主观判断今天是卖出点,而依据本文策略,刚好发出买入信号,下图是该股未来几天的走势:

如果按照策略买入,又可收获50%,感兴趣的同学可以自行加入艾略特波浪理论的未来函数,那样可以计算出,箭头处刚好是第三主升浪起点。

总结

本文通过搭建一套交易系统服务器框架对pomelo的使用进行了探秘,并简单阐述了一些量化交易的设计流程。

相关阅读:
  • 从农夫山泉卖咖啡来谈如何做好多元化公司网站建设 [05-14]
  • 可以提高网站设计品质的5个技巧 [03-01]
  • 外贸企业有必要做营销型网站吗?[02-26]
  • 移动网站如何引起用户阅读兴趣?[08-09]
  • 网站建设前期准备阶段如何布局企业网站栏目?[06-30]
  • IE6中的BUG解决办法[04-20]
  • 怎么做UI设计方案[03-12]
  • 2018年电商网站平台开发新趋势[03-07]
  • 2018年该怎么样选择自己的移动端关键词[02-28]
  • 怎样从网站目录和页面优化入手做好网站运营[02-07]
  • 网站设计是否应该有一个通用的设计系统?[01-30]
  • 每个网站设计师都应该知道的20个基本的CSS技巧[01-30]
  • 自助建站应该注意的几点[01-25]
  • 李彦宏登上美国时代周刊、央妈禁止虚拟货币交易、马化腾再登亚洲首富[01-22]
  • 怎样用网站来提高企业知名度与业务量[01-17]
  • 外包UI设计人才好吗[01-17]
  • 数据可视化设计的五个重要要素[01-03]
  • 微商城爆款突然没有销量怎么办?[12-27]
  • APP商城系统如何引流?[12-27]
  • 经典营销小故事[12-25]
  • 资讯排行
  • 头条
  • 推荐
  • 热门
  • 支付宝为什么要做蚂蚁森林?
  • 新媒体从业者,你最该思考的8个问题
  • 人工智能会让.ai域名成为下一个.com吗?
  • Meta标签优化方法
  • SEO、ASO和WEO他们有什么区别
  • 全球首富比尔·盖茨是费德勒的“脑残粉”
  • 新手如何学习SEO?资深站长给出的解决方案!
  • SEO七大常见误区知多少
  • 电商网站建设从哪些方面提高用户体验度
  • 如何把内容做成「爆款」
  • 2017年SEO优化16条算法调解法则
  • 如何优化获得好的移动网站关键词排名
  • 做SEO不得不知的优化技巧
  • 人工智能会让.ai域名成为下一个.com吗?
  • Meta标签优化方法
  • 新媒体从业者,你最该思考的8个问题
  • 做SEO不得不知的优化技巧
  • SEO七大常见误区知多少
  • SEO、ASO和WEO他们有什么区别
  • 支付宝为什么要做蚂蚁森林?
  • 电商网站建设从哪些方面提高用户体验度
  • 被忽视的隐私条款!APP为何敢用你的信息安全“开玩笑”
  • 如何优化获得好的移动网站关键词排名
  • 图文排行
  • 头条
  • 推荐
  • 热门
没有信息
没有信息
如何使您的网站设计面向未来?
如何使您的网站设计面向未来?
企业网站设计的内容特点有哪些?
企业网站设计的内容特点有哪些?
  • 全国免费服务电话
    400-0592-888
  • 林经理(微信同号)
    137-9977-6661
  • 让我们联系您:

版权所有 Copyright © 2003 - 2014 www.hxhuo.com All Rights Reserv ed   会心火信息 专家-厦门会 心 信息科技 有限公司 闽ICP备10202970号-23 

本站系统:站点中国(会心火建站)云网站管理系统 CMS V3.2 professional query 6,Gzip enabled.total
返回顶部