主页 > imtoken安卓版下载 > 2014 简单比特币高频策略机器人

2014 简单比特币高频策略机器人

imtoken安卓版下载 2023-01-17 02:30:01

1.交易所收费后几乎秒杀所有高频策略,我的也不例外。不过换策略还是可以用的,可以研究一下。 2.好久没分享东西了,想写这篇文章很久了。 3.与大家交流学习。

策略原理

这个策略的原理极其简单,可以理解为一种准高频做市策略。任何人都可以写。起初我没想到它会如此有效。可见,心中若有想法,需要迅速付诸实践,未必会出人意料。 2014 年,当比特币机器人出现时,编写策略来赚钱太容易了。与所有高频策略一样,该策略也是基于订单簿的。下图为典型比特币交易所的订单分布情况。

img

您可以看到左侧是买单,显示不同价格的挂单数量,右侧是卖单。可以想象,如果一个人想要购买比特币,如果他不想等待订单,他只能选择接单。如果他有大量的订单,会导致大量的挂单被卖出,这会对价格产生影响,但这种影响一般不会永远持续下去。如果继续下去,还有人想接单卖出,价格很可能在极短的时间内回升。相反,理解某人想要出售硬币也是类似的。以图中的挂单为例,如果你想直接买5个币,价格会达到10377,这时候如果有人想直接卖5个币,价格会达到10348,这个空间就是利润空间。策略会在A挂单,价格略低于10377,比如10376.99,会在价格略高于10348的时候买,比如10348.01,这是如果刚刚发生的情况比特币高频交易策略,显然是赚到了差价。虽然不会每次都是完美的,但在概率的影响下,赚钱的几率实际上是惊人的高。具体操作以当前策略的参数说明。当然这个参数是不能用的,只给出一种解释。会查累计卖单量为8个币的价格,这里是10377,那么此时的卖价就是这个价减去0.01(少多少可以随机),同理down 找到累计买单是8个币,这里是10348,那么此时的卖出价是10348.01,此时的买入价和卖出价的差价是10376.99 -10348.01 =28.98,若差价大于策略预设价格1.5,则以这两个价格下单等待成交如果差价小于1.5,则会找一个价格下单。比如市价加减10,等待漏掉(更合适的应该是继续寻找更深的)。

进一步说明

如果我没有钱或硬币怎么办?这种情况在我钱少的时候很常见,大部分时候我只挂单的一侧,但问题不大。其实可以加上币平衡的逻辑,但是在平衡的过程中难免会出现亏损。毕竟,每笔交易都是概率问题。我选择保留一方,等待交易。当然,这也浪费了对方的交易机会。职位如何管理?一开始都是买满仓,后来根据不同的参数分成不同的组,不会一下子满仓。没有止损?该策略具有完整的买卖挂单逻辑。我认为不需要止损(可以讨论),并且对概率有偏好。一笔交易就是机会,止损可惜。如何调整策略赚取金币?此时的参数是对称的,即向上8个币的累计卖单和向下8个币的累计买单,略显不平衡。比如15个币的累计卖单向上变化,使得卖币的机会更加稀少。它更有可能以较低的价格被捡起,这将为您赚取硬币,而这反过来又会为您赚钱。事实上,早期的策略非常有效,硬币和金钱都增加了。

代码说明

完整代码见我的攻略分享,这里只讲解核心逻辑功能。在没有改动的情况下,botvs自带的模拟盘其实可以完美运行。这是3年前的策略,平台到现在还支持,非常感人。首先是获取买价和卖价函数GetPrice(),需要获取订单深度信息。注意不同平台的订单深度信息长度不同,即使遍历了所有订单,依然没有需要的金额(后期很多0.01的网格挂单都会导致这个) , 调用GetPrice('Buy') 获取投标价格。

function GetPrice(Type) {
   //_C()是平台的容错函数
    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;
           //参数floatamountbuy是预设的累计深度
           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,每次都会取消原来的list,重新下单,越简单越少会遇到错误。

function onTick() {
    var buyPrice = GetPrice("Buy");
    var sellPrice= GetPrice("Sell");
    //diffprice是预设差价,买卖价差如果小于预设差价,就会挂一个相对更深的价格
    if ((sellPrice - buyPrice) <= diffprice){
            buyPrice-=10;
            sellPrice+=10;}
    //把原有的单子全部撤销,实际上经常出现新的价格和已挂单价格相同的情况,此时不需要撤销
    CancelPendingOrders() 
    //获取账户信息,确定目前账户存在多少钱和多少币
    var account=_C(exchange.GetAccount);
    //可买的比特币量,_N()是平台的精度函数
    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%双向处理收费已经结束,不仅仅是因为收费的问题,而是整个市场的活跃度下降。但是对于不需要高频率的量化策略仍有很大的空间。