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
最终的效果是:
今天我们讲了量化交易的第一步,获得信息、显示信息、更新信息,下来我们会逐渐深入。
如有什么问题请回台留言给我,我们共同成长。
实作“用爬虫的方法爬出OTCBTC首页的信息”。
官网的右下方有“API文档”,我们点击进入;
文档中更提供了它的接口地址:https://bb.otcbtc.com
我们来试试,看能不能通过这个接口获得当前BTC的售价;
转载声明:本文转载自「驴妹ing」,搜索「驴妹ing」即可关注。
领取专属 10元无门槛券
私享最新 技术干货