首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

量化交易(一)

who

量化交易

what

什么是量化交易?

打个比方,一个菜农,早上从批发市场用10元/公斤的价格批发100公斤白菜,然后拿到城里的某个小区销售,在这之前,他根据最近一周内的观察分析,知道这个小区供需存在差异,预测利润能够控制在15%~20%之间,那么这趟生意就能赚到150到200元之间;同样的方法,他又通过观察分析,得到另外一种蔬菜也能赚到这个利润,所以他同时购买了多种能够获得高利润的蔬菜;

他所用的方法就是:观察每天小区门口卖菜人供应的蔬菜品种数量与单价,再收集买菜人的需求信息,然后在第二天批发菜是获得批发价的信息,对比之后确定是否批发;

所谓的量化交易就是通过互联网技术,获得这些信息,然后通过电脑自动匹配的方法进行买卖,在这期间因为少了人为因素的不确定性以及对时间成本的考虑,从而获得更大的收益。

how

如何进行量化交易?

量化交易的基础就是:信息的获取,所以,在使用量化交易之前,我们要先知道如何获得信息。

获取信息的方法一:爬虫

1:打开iTerm

2.输入

geminstallrest-client

如下图:

然后command+T打开一个新的终端窗口,输入

irb

然后输入:

require'rest-client'

response = RestClient.get "http://http://www.weather.com.cn/weather1d/101010100.shtml"

response.body

如下图:

这样我们就完成了第一步:获得网站上的信息,我们获得的信息是“北京的天气”;

但是你会发现,我们获得的信息中有很多不是我们需要的,我们只想看到气温,所以,我们要对获得的信息进行处理;

require'nokogiri'

doc = Nokogiri::HTML.parse(response.body)

doc.css(".today .tem").map{|x|x.text }# 得到类似["\n3°C\n","\n-1°C\n","\n"] 的结果

如下图:

最高温度3度,最低温度-1度;

我们把这种根据“网页地址”获取信息的方式叫做“爬虫”,有点像“抄作业”,但这样会存在几个问题,万一他把地址变了或者页面上的内容变了,你都无法及时同步,效率上会打折扣,所以,为了解决此问题,我们可以再来尝试第二种方法:API

什么是API?

我理解的API就是,我告诉你我这提供A,你想要A的话留下你的地址,我给你“传送”过去,我会告诉你我是空运还是陆运,以及在这中间我们需要注意什么,等等。

在信息的世界里,提供信息的叫做“服务端”,接受信息的叫做“客户端”,我们平常使用的浏览器、App等都可以看作是“客户”呼叫“服务”的工具,这些工具唯一不同的就是,大家发出的指令略有不同,但有基本相同,你如说,我只需要浏览网页内容,那么我通过浏览器发出去的请求(request)就是“读取文件”(read),这个过程就像我们在网上点击超链接一样。

在上面的操作过程中,我们通过“rest-client”把网页上的信息爬下来,刚开始是HTML格式,信息中有很多我们用不上的东西,所以我们用“nokogiri”帮助我们解析了HTML,透过CSS selector从文件中比对出想要的咨询,最终获得了当天北京的最高气温和最低气温;

这个过程有点像,你需要一个苹果,但是对方去给你了一个苹果树,你要不仅要想办法把它运回来,然后把苹果摘下来,再把多余的枝叶清理掉;是不是很麻烦,所以呢,我们就要找一个专门卖苹果的地方,只买苹果不要树;

“聚合数据”就是这样一个网站,只提供你要的“苹果”,不提供“苹果树”;

注册聚合数据账户,找到“全国天气查询”,在“我的数据”中拿到AppKey;

AppKey就像小区的“门禁卡”,这个“门禁卡”不但能够帮你获得数据,它还能记录你“进出”的次数;

下来我们来看看这个怎么用;

我们的思路是这样的,首先从聚合数据上拿到数据,然后把它存到我们的数据库中,然后通过网页显示出来;

第一,从聚合数据上拿到数据

首先创建文件夹lib/tasks/dev.rake

然后写入我们的脚本

然后执行bundle exec rake dev:fetch_city,然后就能把资料存到我们的本地的数据库;

然后我们需要把数据显示出来

Routes

Rails.application.routes.drawdo

+ resources:cities

end

MVC

model

rails g model city

views

touch app/views/cities/index.html.erb

Juhe ID

Province

City

District

Temp

controller

rails g controller cities

classCitiesController

defindex

@cities = City.all

end

end

最终显示

这样我们就完成了,获取数据到显示数据的全过程。

其中代码部分目前不需要去理解,只需要知道这个过程是怎么实现的就行。

下来我们完成数据更新的功能,因为天气随时在变;

思路是这样的:先增加一个“更新”的按钮,然后设置这个按钮的路径,然后编写这个动作的代码;

第一步:添加“更新”按钮

-

+

+

+ :post %>

+

第二步:设置路径

- resources:cities

+ resources:citiesdo

+ memberdo

+ post:update_temp

end

第三步:编写动作代码

defupdate_temp

city = City.find(params[:id])

response = RestClient.get"http://v.juhe.cn/weather/index",:params=> {:cityname=> city.juhe_id,:key=>"你申请的key放这里"}

data = JSON.parse(response.body)

city.update(:current_temp=> data["result"]["sk"]["temp"] )

redirect_to cities_path

end

最终的效果是:

今天我们讲了量化交易的第一步,获得信息、显示信息、更新信息,下来我们会逐渐深入。

如有什么问题请回台留言给我,我们共同成长。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180317G1BBA100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券