最近,自己在技术精进方向上有所犹豫,是往"网络渗透"的方向走呢?还是往"量化交易"的方向走?
如果选择精进“网络渗透”,就需要学习各种Web渗透技术、客户端渗透技术、移动环境渗透技术、社会工程学技术等等。随着互联网的深入发展,人们对网络安全的要求也会越来越高,这个领域一定是未来的趋势。况且,学习这些技术也很过瘾,多巴胺分泌旺盛,还能体验电影中黑客的感觉。
可是,对自己来说“网络渗透”属于全新的领域,选择了这个方向就要丢掉以前在机器学习方面的积累。
想来想去,年龄大了,还是走保守的路线吧,选择“量化交易”作为自己今后的技术精进方向。把机器学习中积累的方法应用于量化交易,希望能够在这个领域做出一些东西来啊。
既然选择了“量化交易”方向,就要为运行这些“量化模型”搭建底层框架,于是我封装了 BigOne 交易所为开发者提供的 API。
BigOne API 的入口如下所示:
由于篇幅的限制,今天先来介绍“身份验证”部分,后面再来介绍订单系统和资产查询部分。
要想使用 BigOne API 需要到 BigOne 交易所申请 API Key
和 API Secret
。
API Key
:是网站提供 API 功能的验证参数。
API Secret
:是加密通讯数据的密钥,用于生成验证身份的令牌。
为了防止别人重复使用请求参数,确保请求的唯一性,在生成身份令牌算法中加入了时间戳 nonce
参数,该 nonce
和当前时间戳之间的间隔不能超过30秒,即这个令牌的有效期为30秒。
生成身份令牌需要 JSON Web Token
,可到 https://jwt.io 上查看详细信息。该网站提供了 .net
、ptython
、node.js
、java
、javascript
、perl
、ruby
等语言的使用案例。
我使用的是.net
环境,在 https://github.com/dvsekhvalnov/jose-jwt 上可以下载。
在使用的时候添加以下语句即可。
using Jose;
BigOne 也提供了获取服务器端当前时间戳的API
,如下图所示:
Step1:获取身份认证的参数。
构造接收 时间戳 的类型 Ping
。
public class Ping
{
public string timestamp;
}
获取时间戳的函数 GetTimestamp
。
private string ApiEntryPoint = "https://big.one/api/v2/";
private static long GetTimestamp()
{
string url = ApiEntryPoint + "ping";
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
try
{
IHtmlDocument document = new JumonyParser().LoadDocument(url);
List<IHtmlNode> nos = document.Nodes().ToList();
string str = nos[0].ToString();
StringReader sr = new StringReader(str);
JsonTextReader jsonReader = new JsonTextReader(sr);
JsonSerializer serializer = new JsonSerializer();
Ping one = serializer.Deserialize<Ping>(jsonReader);
return Convert.long(one.timestamp);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
Step2:获取验证身份的令牌。
private static string GetToken()
{
Int64 timestamp = GetTimestamp();
IDictionary<string, object> payload = new Dictionary<string, object>()
{
{"type", "OpenAPI"},
{"sub", ApiKey},
{"nonce", timestamp}
};
//这里的 ApiSecret 从 BigOne 申请获取。
byte[] secretKey = Encoding.Default.GetBytes(ApiSecret);
string token = JWT.Encode(payload, secretKey, JwsAlgorithm.HS256);
return token;
}
Header
中需要 type
,sub
,nonce
三个参数,sub
是 API Key
,从 Bigone 申请获取,nonce
是服务器的当前UNIX时间戳,可以通过 Step1
来获取。
Step3:获取身份令牌的例子。
我们对 sub
、nonce
和 ApiSecret
赋值如下:
string ApiKey = "cee88ab0bc69435784b7db0545e85647";
string ApiSecret = “testsecret”;
long timestamp = 1527665262168391000;
可以得到如下的 token
:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXBlIjoiT3BlbkFQSSIsInN1YiI6ImNlZTg4YWIwYmM2OTQzNTc4NGI3ZGIwNTQ1ZTg1NjQ3Iiwibm9uY2UiOjE1Mjc2NjUyNjIxNjgzOTEwMDB9.YNpae4v_-OU7h2sknRPa3XPhDcC3p-To1WxbWV4Vpro
Step4:使用身份令牌的方法。
从 BigONE Developer API V2 的文档中,我们可以看到在进行网络请求时,header
部分需要加入 Authentication
属性以及对应取值 "Bearer " + token
。
本篇图文介绍了如何使用 BigONE Developer API V2 来获取身份令牌的方法。一旦获取了身份令牌,我们就可以在网络请求的 header
中加入令牌来获取自己的账户数据,创建买入、卖出订单、删除订单,查询订单状态等,为自己的自动化交易系统搭建底层框架。
好了今天就到这里吧!如果你对自动化交易感兴趣,我们可以一起来精进技术,完善这个系统。
相关图文:
经过8年多的发展,LSGO软件技术团队在「地理信息系统」、「数据统计分析」、「计算机视觉」等领域积累了丰富的研发经验,也建立了人才培养的完备体系,欢迎对计算机技术感兴趣的同学加入,与我们共同成长进步。
我们图文推送的计划如下,欢迎大家转发!
周一「图书排行:计算机书籍每周销量排行榜」
周二「技术分享:C#语言在工程中的应用」
周三「资料分享:网络上发现的电子资料」
周四「LeetCode实战:算法题目的实现」
周五「猫眼电影:即将上映、最受期待榜」
周六「Github精选:本周10大热门项目」
周日「股市币市:本周交易数据分析与最新公告」
后台回复「搜搜搜」,随机获取电子资源!
欢迎关注,请扫描二维码: