Loading ...

量化策略教程分享篇:小白也能速成大神

Author: gavin_lo, Created: 2018-10-31 13:04:17, Updated: 2018-10-31 13:27:21

量化交易策略工具化输出

量化策略是指使用计算机作为工具,通过一套固定的逻辑来分析、判断和决策。量化策略既可以自动执行,也可以人工执行。 一个完整的策略需要包含输入、策略处理逻辑、输出;策略处理逻辑需要考虑选股、择时、仓位管理和止盈止损等因素。

  • 策略模式: 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

  • 具体介绍:

    • 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
    • 主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
    • 何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。
    • 如何解决:将这些算法封装成一个一个的类,任意地替换。
    • 关键代码:实现同一个接口。
    • 应用实例: 1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。 2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。
    • 优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
    • 缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。
  • 从数据处理角度来看:

    输入:行情数据、基本面数据、数量化的新闻事件、成交回报等等 处理:数据的加工、逻辑判断运算 输出:交易订单

    2.从建模的角度来看: 完成一个策略需要两大步骤,首先是策略研究;其次是策略的实现和改进。 假设前提:

    -历史会重复,规律就隐藏在数据中

    -行情发展是众多参与者行为共同作用的结果,人的金融行为集合是有迹可循的

    建模过程:准备数据> 清洗加工> 挖掘 > 发现规律 > 提出模型假说 > 回测检验 结果:一个相对可靠的模型,并且在逻辑上是解释得通的; 模型只是研究的结果,还需要把模型用计算机程序实现出。

  • 30行零成本搭建网格量化交易教学

    前言

    有人认为市场价格运动的方式是随机的,下一刻的价格涨跌的概率各是50%。于是就出现了被动仓位管理的网格类交易策略;

    有人认为市场中80%的行情是震荡行情,只要把抓住震荡行情的利润,将足以弥补20%的趋势行情所带来的亏损。于是就出现了专门做短线震荡的交易策略;

    有人认为 “ 得趋势者得天下 ” ,别的不做,只做趋势策略。“ 截断亏损,让利润奔跑 ” 对了就抱,错了就砍。长期下来20%的趋势行情利润,就能弥补80%震荡行情所带来的亏损。

    等等等等…交易策略的种类犹如武功门派,数目众多,究其原因,每个人对事的看法不同,往大了说是人生观的不同。才导致了交易策略的不同。

    最终,你恍然大悟,你会发现大部分交易策略都是能够赚钱的。最终亏钱的人是信念不够,或者太过贪婪,在一个又一个交易策略里跳进跳出,寻找所谓只赚不亏的 “ 圣杯 ” 。

    我一直重复,做交易就是做人。

    说明

    下面,我们来看看这30行代码!!

    循环
    while(循环条件){
    
    // 将会重复执行的代码
    
      
    
    }
    

    循环条件为真则反复执行{}内的代码。 循环条件为假 则跳出循环。

    条件分支

    if (判断条件){
    
    // 执行代码
    
    } else {
    
    // 执行代码
    
    }
    

    很简单,翻译就是 如果(真){执行这代码}其 它情况{执行这代码}

    赋值

    name = “张三”;
    

    就是把“张三”这个名字 给 name, 赋值容易与比较相等搞混

    如 比较 为 == 两个等号,

    例子 “张三”==“李四” 明显张三不是李四 所以 “张三”==“李四” 为假。

    相关API GetTicker() 获取价格GetAccount() 获取账号余额Buy({ amount:数量 , price:价格}) 挂买单Sell({ amount:数量 , price:价格}) 挂卖单

    源码

  (async () => {

    start = true;                 //开始挂网格单

    Ticker = await GetTicker();   //获取价格

    benchmarkPrice = Ticker.last; //价格基准

while(true){                      //循环开始

    Account = await GetAccount(); //每次查询账号余额

    Ticker = await GetTicker();   //每次查询行情信息

    if(start){

        start = false;

        IDBuy = await Buy({ amount:1 , price:benchmarkPrice - 10});  //挂单买进

        IDSell = await Sell({ amount:1 , price:benchmarkPrice + 10}); //挂单卖出

    }

    if(IDBuy){

        start = false;

        Statu_Buy = (await GetOrder(IDBuy)).status;

        if(Statu_Buy == 'closed' ){                         //如果挂出的单已被成交,

            benchmarkPrice = (await GetTicker()).last;      //价格基准

            await CancelAllOrders({});                      //撤销全部单子

            start = true;                                   //重新挂网格单

        }

    }

    if(IDSell){

        start = false;

        Statu_Sell = (await GetOrder(IDSell)).status;

        if(Statu_Sell == 'closed'){                        //如果挂出的单已被成交,

            benchmarkPrice = (await GetTicker()).last;     //价格基准

            await CancelAllOrders({});                     //撤销全部单子

            start = true;                                  //重新挂网格单

        }

    }

}

})();
  • 30行代码就这么简单,然后把代码复制粘贴到博特平台策略编写器并且保存,你会在你的策略列表上看到。

    注意:price:benchmarkPrice - 10 上面这个【10】 是你网格距离。amount:1上面的【1】是下单数量,这个可以自己调整。

    在策略列表上看到你之前发布的策略后,然后点击搭载,进入搭载参数页面。 填写好后点击启动!! 历史性的一刻到了!策略编辑完成。

      1. 分析一个策略的用到什么样的数据。从这个策略来看只需要判断前一天的收盘价是否大于或小于某个价格就进行买入或卖出的操作,因此只使用到了市场交易数据,并且是希望拿到“前一天”的收盘价。那么所有的历史市场交易数据我们都可以从 history_bars拿到就可以了。
      1. 调仓频率。从这个策略来看是希望在开盘前计算出来是否买入或卖出,因此是最多每日调仓一次即可。那么配合使用before_trading (每天盘前) 运行一次计算判断需要做买入或卖出的操作即可。
      1. 下单交易。首先需要了解的是需要做什么样的组合落单,Botquant提供了较为丰富的下单API,可以将软件当做为交易所客户端进行交易,提币功能,自动化下单套利等… 提供100多个交易所高速实盘交易接口、易用的API文档、由易入难的策略库,便于快速实现、使用自己的量化交易策略。

文章尽量都会每天及时更新。

对区块链或者币圈量化交易感兴趣的朋友可以关注并转发。

注明:出处 发明者量化


More