zoukankan      html  css  js  c++  java
  • 蛙人高频交易拆单策略—带手续费拆单策略及原理说明

          最近几个月政府加大了数字币的监管力度各大平台都已陆续开始加收手续费。像比特币、莱特币这样的传统币的手续费已经达到单向0.2%,即:无论挣钱与否,1000元的一次买入卖出,用户就要承担高达4元的手续费。这样一来,很多市场的K线都变成了一条直线,交易量大跌。

          但是在仔细思考之后,我们不难发现,其实大多的交易市场都有手续费(期货、股票)。那么,我们应该如何在有手续费的市场中实现高频交易并且获利呢?这次,咱们就来聊聊带手续费的高频拆单策略。(只适用于软件自动交易,人工交易可能会被累死)

    1.手续费与交易的涨幅收益关系

    有手续费,并不代表没有收益,当然如果算法不正确,就一定赔钱。下面,我们来列举几个不同价位和手续费的交易物,并计算其收益涨幅,如下表所示:

    交易物

    单价

    手续费

    最低收益涨幅(元)

    BTC

    6666

    0.002

    28

    ETH

    84.25

    0.0005

    0.09

    网易白银

    40.92

    0.0008

    0.07

    LTC

    25.52

    0.002

    0.1

    ETC

    8.37

    0.0005

    0.01

    网易氧化铕

    7.29

    0.0008

    0.02

    看官们可从上表中发现,当交易物单价越低的时候,最低涨幅也越低,像ETC及网易氧化铕这样的交易物,单手只要涨1~2分钱即可以有收益。如果按人民币交易并以两位小数计算精度的话,1~2分钱之间就已经是最低精度了,类似这样的交易物是比较安全的。而且由于单价比较低,即便是涨了0.02元,利益也是比较大的。下面我们以ETC为例,对策略及算法进行说明。

    2.交易策略

    在交易过程中,主要有三件事儿需要控制,即:

    • 下单时机
    • 下单比例
    • 订单追踪

    2.1    下单时机

    既然是“高频交易”,那策略就要在合理的情况下,尽量的追求更多的交易次数。通常情况下,可以使用短线判读指标来确认是否可以买入,例如:

    • SMA3是否大于SMA5
    • MACD(3,5,9)是否大于0
    • SAR线是否小于K线的Low值

    看官们可以发现,除了SAR外,其他两个指标的数值都非常的小,其目的就是为了提高交易次数。另外,买入指标最好只选取一个,目前笔者实现的软件中,采用的是SMA3和SMA5追逐方式进行判定,如下图所示:

     

     其主循环的代码如下所示:

    int tradeStep = 0;
    
                    while (this.NeedStop == false)
                    {
                        try
                        {
    
                            var kline = await this.client.GetKline("5min");
                            if (kline.Count != 0)
                            {
                                this.Config = (await this.client.GetConfig()).AdditionalData;
                                var tvs = kline.Select(k => new TimeValuePair() { DateTime = k.Time, Value = (double)k.Middle }).ToList();
                                var maShort = MathUtil.GetSMALine(tvs, this.Config.SMAShort);
                                var maLong = MathUtil.GetSMALine(tvs, this.Config.SMALong);
                                switch (tradeStep)
                                {
                                    case 0:
                                        if (maShort.Last().Value > maLong.Last().Value)
                                        {
                                            tradeStep = 1;
                                        }
    
                                        break;
                                    case 1:
                                        var hasOrder = await this.HasOrder();
                                        if (!hasOrder)
                                        {
                                            await this.CreateOrder();
                                        }
                                        if (maShort.Last().Value < maLong.Last().Value)
                                        {
                                            this.rate = 1;
                                            tradeStep = 0;
                                        }
                                        break;
                                    default:
                                        break;
                                }
                                await this.CheckOrder(maShort.Last().Value < maLong.Last().Value);
                            }
    
    
    
    
                        }
                        catch (Exception ex)
                        {
    
    
                        }
    
                    }

    2.2    下单比例

    首先我们来聊聊拆单的重要性。投资先驱江恩先生说过,永远不要把所有资金投到一个项目上。假设您有100000元现金,要投到ETC上,如果上涨1分钱的话,大体的收益为21元。天呀,每天只要有100次成功交易的话,用不上一个月的时间,您的资金可以翻一倍。但是问题来了,有谁保证,只要出手一定是挣钱的呢?如果行情一旦暴跌5分钱,您这次会赔700元。最不好的情况是,您的10万元被套住了,同时又出现了从低点大涨的行情,这个时候,您就只能眼睁睁的看着别人挣钱了。

    为了降低风险,通常情况下,需要将总可用金额拆成10到15份进行交易,即:每只用自己净资产的10到15分之一进行买单。这样的话,您的投资的金额即便被套住,还会有其他的资金进行流动。

    笔者在测试过程中,将3000元拆成了约12单(每单线性衰减),在24*3小时的交易结果统计如下:

     

    通过上表分析,被套住的金额大约只占了约三分之一,其他大部分的资金还在正常流动。此时,即便强行平仓,损失也只有总收入的5%而且。

    2.3    下单衰减策略

    看到上面的统计结果后,看官们可能会提出疑问,如果按每次下单金额为总金额的1/12计算的话,被套住9单后的强制平仓金额怎么会只有不到6块钱呢?其实,被套住的9单并不是按总金额的1/12来下单的,原因何在?首先,让我们来看看行情的变化趋势,如下图所示:

     

    该图中,我们可以看到,每个可交易区间的上涨趋势基本上都是按着接近抛物线的方式进行的,时间越长,其斜率越小(涨幅越小)。简单的理解,即:价格涨的越高,被套住的可能性就越大,因此,下单的比例就应该越小。按此理论,在一个可交易区间中,下单的状态基本上如下表所示:

     

    随着时间的发展,每次下单的比例,都按照一定的算法进行衰减。

    下面我们来看一下,整个下单策略的业务流程图:

     

    2.4    订单追踪

    整个交易策略中,订单追踪是最核心也是最麻烦的一个环节。由于很多交易API提供商会对请求的时间间隔做出限制(例如国内的很多的数据币交易平台要求每秒中,单用户的请求间隔在150毫秒到200毫秒之间),因此需要很多的软件技术支持,如:算法优化、请求共享、负载均衡等。由于涉及到核心商业利益,此处不便详解。

    1. 3.       总结

    目前蛙人高频交易算法一直在CHBTC上用ETC进行验证,如果朋友们有其他可行的交易接口,可以和我联系,大家一起研究。

    作者:科学家

                                                        Email:warensoft@163.com

                                                        微信:43175692

  • 相关阅读:
    leetcode 350. Intersection of Two Arrays II
    leetcode 278. First Bad Version
    leetcode 34. Find First and Last Position of Element in Sorted Array
    leetcode 54. Spiral Matrix
    leetcode 59. Spiral Matrix II
    leetcode 44. Wildcard Matching
    leetcode 10. Regular Expression Matching(正则表达式匹配)
    leetcode 174. Dungeon Game (地下城游戏)
    leetcode 36. Valid Sudoku
    Angular Elements
  • 原文地址:https://www.cnblogs.com/warensoft/p/6421391.html
Copyright © 2011-2022 走看看