数字货币量化揭秘-简单暴力但高效的高频交易机器人
时间: 2020年10月3日                     分类: 数字货币 标签:

开放思想和交流是有益的!

策略共享地址:/ strategy / 1088

此策略是我制作虚拟货币以来的主要策略。经过不断的改进和修改,它变得更加复杂,但主要思想没有改变。共享的该版本是原始版本,没有明显的错误,最简单,最清晰。仓位管理,每笔交易都是满仓,卡住后没有重启,但这足以说明问题。

该策略从2014年8月开始执行,直到交易所在今年年初收取费用为止。期间的运作情况相当好,损失时间很小。资金从最初的200元增加到80比特币。具体过程可以在[小草的新浪博客](Xiaocao_Sina Blog)[虚拟货币自动交易之路](虚拟货币自动交易之路(五)_小草_Sina Blog)系列文章中看到。

数字货币量化

数字货币量化

下图是总资产转换为货币的曲线:

数字货币量化

数字货币量化

1.交易所收取费用后,几乎杀死了所有高频策略,我的也不例外。但是策略更改可能仍然有效,因此您可以进行研究。

2.很久没有分享任何内容了。我想写这篇文章。

3.与所有人交流和学习。

此策略的原理非常简单。可以将其理解为准高频做市策略。阅读后,您可能想打人。这样可以赚钱。那时,几乎任何人都可以编写它。我没想到它在一开始就这么有效。可以看出,如果您内心有一个主意,则必须迅速将其付诸实践,说不一定有惊喜。在2014年比特币机器人盛行时,编写赚钱策略太容易了。

与所有高频策略一样,该策略也基于订单。下图是典型的比特币交换订单分布,

数字货币量化

数字货币量化

您可以看到在左侧有一个买单,在不同的价格上显示了待处理订单的数量,在右侧显示了一个卖单。可以想象,如果某人想要购买比特币,则如果他不想等待挂单,则只能选择接受该订单。如果他有大量订单,则将买卖大量待处理的订单,这将对价格产生影响,但这种影响通常不会持续下去,仍有人想要出售订单,价格很可能会在很短的时间内恢复。相反,了解某人想要出售硬币的认识与此类似。

以图中的挂单为例。如果您想直接购买5个硬币,价格将达到10377。这时,如果有人想直接出售5个硬币,价格将达到10348。此空间是利润率。该策略将以略低于10377的价格(例如10376.99)下订单,并以略高于10348的价格(例如10348.01)进行购买。如果情况刚发生,这显然会带来利润。尽管并不是每次都那么完美,但是在概率的影响下,赚钱的机会实际上是非常高的。

用当前策略的参数解释特定的操作。当然,不能使用此参数,仅是一种解释。它将向上查找具有累积卖单的8个硬币的价格,这里是10377,则此时的卖价是这个价格减去0.01(减法可以是随机的),而对于累积买入订单为8个硬币,这里为10348,那么此时的卖出价格为10348.01,买入和卖出价格之差为10376.99-10348.01 = 28.98,大于策略预设价格差1. 5,请等待这两个价格的交易,如果价格差小于1. 5,还会找到挂单的价格,例如订单价格正负10,等待泄漏(更合适,应该继续寻找更多深度)。

1.如果没有钱或硬币怎么办?

当我的钱少的时候,这种情况非常普遍。在大多数情况下,我只有一个清单,但这不是一个大问题。实际上,可以添加货币平衡逻辑,但是在平衡过程中不可避免地会发生损失。毕竟,每笔交易都是概率性的。我选择让一方等待交易。当然,这也浪费了另一边的交易机会。

2.如何管理职位?

开始时,所有头寸都被买卖。后来根据不同的参数将它们分为不同的组,它们不会立即被完全交易。

3.没有止损吗?

该策略具有买卖未完成订单的完整逻辑。我认为没有必要止损(可以讨论)。也有概率的偏爱。交易是机会。可惜止损了。

4.如何调整赚钱策略?

此时的参数是对称的,即向上8个硬币的累计卖出订单和向下8个硬币的累计买入订单,这有点不平衡。例如,向上更改15个硬币的累积卖单,这使出售硬币的机会更大。很少有机会以较低的价格购买它,这样它才能赚钱,而这反过来又会赚钱。实际上,最初的策略是如此有效数字货币量化,货币和货币都增加了。

完整的代码可以在我的策略共享中看到,这里仅说明核心逻辑功能。在不作任何更改的情况下,botvs随附的模拟磁盘被证明是完全正常的。这是3年前的一项策略,并且直到现在仍支持该平台,这一点非常动人。

首先是获取买卖价格函数GetPrice(),该函数需要获取订单深度信息。请注意,不同平台上的订单深度信息的长度是不同的,即使遍历所有订单,仍然没有所需的金额(在以后的期间,许多0.01网格待处理订单将导致这种情况), GetPrice(’Buy’)是获取购买价格。

function GetPrice(Type) {
    var depth=_C(exchange.GetDepth);
    var amountBids=0;
    var amountAsks=0;
    //计算买价,获取累计深度达到预设的价格
    if(Type=="Buy"){
       for(var i=0;i<20;i++){
           amountBids+=depth.Bids[i].Amount;
           if (amountBids>floatamountbuy){
               //稍微加0.01,使得订单排在前面
              return depth.Bids[i].Price+0.01;}
        }
    }
    //同理计算卖价
    if(Type=="Sell"){
       for(var j=0; j<20; j++){
    	   amountAsks+=depth.Asks[j].Amount;
            if (amountAsks>floatamountsell){
            return depth.Asks[j].Price-0.01;}
        }
    }
    //遍历了全部深度仍未满足需求,就返回一个价格,以免出现bug
    return depth.Asks[0].Price
}
/*
每个循环的主函数onTick(),这里定的循环时间3.5s,每次循环都会把原来的单子撤销,重新挂单,越简单越不会遇到bug.
*/
function onTick() {
    var buyPrice = GetPrice("Buy");
    var sellPrice= GetPrice("Sell");
    //买卖价差如果小于预设值,就会挂一个相对更深的价格
    if ((sellPrice - buyPrice) <= diffprice){
            buyPrice-=10;
            sellPrice+=10;}
    //把原有的单子全部撤销,实际上经常出现新的价格和已挂单价格相同的情况,此时不需要撤销
    CancelPendingOrders() 
    //获取账户信息,确定目前账户存在多少钱和多少币
    var account=_C(exchange.GetAccount);
    //可买的比特币量
    var amountBuy = _N((account.Balance / buyPrice-0.1),2); 
    //可卖的比特币量,注意到没有仓位的限制,有多少就买卖多少,因为我当时的钱很少
    var amountSell = _N((account.Stocks),2); 
    if (amountSell > 0.02) {
        exchange.Sell(sellPrice,amountSell);}
    if (amountBuy > 0.02) {
        exchange.Buy(buyPrice, amountBuy);}
    //休眠,进入下一轮循环
    Sleep(sleeptime);
}

整个程序有40多个行,看起来很简单,但是当时我花了一个多星期的时间,仍然在botvs平台上。最大的优势仍然是尽早开始。 2014年,市场以移动砖块为主,并且高频网格和市场争夺活动不多,这使得该策略易于掌握。后来,竞争不可避免地变得越来越激烈,我的钱也越来越多。挑战越来越多,必须不时进行重大更改以应对它,但总体形势还是相当顺利的。在交易平台不收取费用的情况下,它是程序化交易的天堂。因为散户投资者不收取费用并且倾向于经营,所以它为高频和套利提供了空间。基本上,所有这些操作都遵循0.1-0.的2%双向服务费。这不仅是收费问题,而且是整个市场活动下降的原因。

但是不需要高频率的量化策略仍有很大空间。

数字货币量化

数字货币量化

作者小草

最早由Inventor Quantification(FMZ.COM)发布和发布,并由Quanke Online授权