背景
最近,自己在技术精进方向上有所犹豫,是往"网络渗透"的方向走呢?还是往"量化交易"的方向走?
如果选择精进“网络渗透”,就需要学习各种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:获取身份认证的参数。
<u>构造接收 时间戳 的类型 Ping
</u>。
public class Ping
{
public string timestamp;
}
<u>获取时间戳的函数 GetTimestamp
</u>。
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:使用身份令牌的方法。
token的使用从 <b>BigONE Developer API V2</b> 的文档中,我们可以看到在进行网络请求时,header
部分需要加入 Authentication
属性以及对应取值 "Bearer " + token
。
总结
本篇图文介绍了如何使用 BigONE Developer API V2 来获取身份令牌的方法。一旦获取了身份令牌,我们就可以在网络请求的 header
中加入令牌来获取自己的账户数据,创建买入创建订单、卖出删除订单,查询订单状态等,为自己的自动化交易系统搭建底层基础。
好了今天就到这里吧!如果你对自动化交易感兴趣,我们可以一起来精进技术,完善这个系统。
相关图文:
- 如何利用 C# 实现 K 最邻近算法?
- 如何利用 C# 实现 K-D Tree 结构?
- 如何利用 C# + KDTree 实现 K 最邻近算法?
- 如何利用 C# 对神经网络模型进行抽象?
- 如何利用 C# 实现神经网络的感知器模型?
- 如何利用 C# 实现 Delta 学习规则?
- 如何利用 C# 开发「桌面版百度翻译」软件!
- 如何利用 C# 开发「股票数据分析软件」(上)
- 如何利用 C# 开发「股票数据分析软件」(中)
- 如何利用 C# 开发「股票数据分析软件」(下)
- 如何利用 C# 爬取「财报说」中的股票数据?
- 如何利用 C# 爬取 One 持有者返利数据!
- 如何利用 C# 爬取Gate.io交易所的公告!
- 如何利用 C# 爬取BigOne交易所的公告!
- 如何利用 C# 爬取 ONE 的交易数据?
- 如何利用 C# 爬取「京东 - 计算机与互联网图书销量榜」!
- 如何利用 C# 爬取「当当 - 计算机与互联网图书销量榜」!
- 如何利用 C# 爬取「互动出版网 - 计算机图书销量榜」!
- 如何利用 C# 爬取「中国图书网 - 计算机与互联网图书销量榜」!
- 如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片信息!
- 如何利用 C# 爬取「猫眼电影专业版:票房」数据!
- 如何利用 C# 爬取「猫眼电影:最受期待榜」及对应影片信息!
- 如何利用 C# 爬取「猫眼电影:国内票房榜」及对应影片信息!
- 如何利用 C# + Python 破解猫眼电影的反爬虫机制?
- 如何利用 C# 爬取带 Token 验证的网站数据?
- 如何利用 C# 向 Access 数据库插入大量数据?
网友评论