美文网首页
技术图文:如何利用BigOne的API制作自动化交易系统 --

技术图文:如何利用BigOne的API制作自动化交易系统 --

作者: 老马的程序人生 | 来源:发表于2019-05-13 17:42 被阅读0次

    背景

    最近,自己在技术精进方向上有所犹豫,是往"网络渗透"的方向走呢?还是往"量化交易"的方向走?

    如果选择精进“网络渗透”,就需要学习各种Web渗透技术、客户端渗透技术、移动环境渗透技术、社会工程学技术等等。随着互联网的深入发展,人们对网络安全的要求也会越来越高,这个领域一定是未来的趋势。况且,学习这些技术也很过瘾,多巴胺分泌旺盛,还能体验电影中黑客的感觉。

    可是,对自己来说“网络渗透”属于全新的领域,选择了这个方向就要丢掉以前在机器学习方面的积累。

    想来想去,年龄大了,还是走保守的路线吧,选择“量化交易”作为自己今后的技术精进方向。把机器学习中积累的方法应用于量化交易,希望能够在这个领域做出一些东西来啊。

    既然选择了“量化交易”方向,就要为运行这些“量化模型”搭建底层框架,于是我封装了 BigOne 交易所为开发者提供的 API


    技术分析

    BigOne API 的入口如下所示:

    程序入口

    由于篇幅的限制,今天先来介绍“身份验证”部分,后面再来介绍订单系统和资产查询部分。

    要想使用 BigOne API 需要到 BigOne 交易所申请 API KeyAPI Secret

    • API Key:是网站提供 API 功能的验证参数。
    • API Secret:是加密通讯数据的密钥,用于生成验证身份的令牌。
    API Key and API Secret

    为了防止别人重复使用请求参数,确保请求的唯一性,在生成身份令牌算法中加入了时间戳 nonce 参数,该 nonce 和当前时间戳之间的间隔不能超过30秒,即这个令牌的有效期为30秒。

    身份验证

    生成身份令牌需要 JSON Web Token,可到 https://jwt.io 上查看详细信息。该网站提供了 .netptythonnode.jsjavajavascriptperlruby等语言的使用案例。

    我使用的是.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 中需要 typesubnonce三个参数,subAPI Key,从 Bigone 申请获取,nonce 是服务器的当前UNIX时间戳,可以通过 Step1 来获取。

    Step3:获取身份令牌的例子。

    我们对 subnonceApiSecret 赋值如下:

    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 中加入令牌来获取自己的账户数据,创建买入创建订单、卖出删除订单,查询订单状态等,为自己的自动化交易系统搭建底层基础。

    好了今天就到这里吧!如果你对自动化交易感兴趣,我们可以一起来精进技术,完善这个系统。


    相关图文

    相关文章

      网友评论

          本文标题:技术图文:如何利用BigOne的API制作自动化交易系统 --

          本文链接:https://www.haomeiwen.com/subject/urocaqtx.html