• 极简比特币高频策略机器人


    就是我刚开始编写比特币高频机器人的源代码,几乎没有改动,参数也是原来的参数。这个版本的程序有许多要改进的地方,但即使如此,它也当时表现除了惊人的盈利能力,在我本金不多时,不加杠杆平均每天盈利在5%左右。当然无论从哪一方面,它都不适应今天的市场。我同时也发了一篇文章在社区,大家可以看看。

    这个策略原理极为简单,可以理解为准高频的做市策略,各位看了之后可能想打人,这都能赚钱,当时几乎谁都能写出来。我开始也没预料到它能这么有效,可见心中有想法要赶紧付出实践,说不一定有意外之喜。在比特币机器人初兴的2014年,写出赚钱的策略太容易了。

    策略源码地址:https://www.fmz.com/strategy/1088

    稍微改了一下,用了平台的容错函数_C(),和精度函数_N().

    function CancelPendingOrders() {
        var orders = _C(exchange.GetOrders);
        for (var j = 0; j < orders.length; j++) {
              exchange.CancelOrder(orders[j].Id, orders[j]);}
    }
    
    //计算将要下单的价格
    function GetPrice(Type,depth) {
        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
    }
     
    function onTick() {
        var depth=_C(exchange.GetDepth);
        var buyPrice = GetPrice("Buy",depth);
        var sellPrice= GetPrice("Sell",depth);
        //买卖价差如果小于预设值diffprice,就会挂一个相对更深的价格
        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);
    }
        
    function main() {
        while (true) {
            onTick();
        }
    }
  • 相关阅读:
    java获得文件的最后修改时间
    【Tomcat】解决Tomcat catalina.out 不断成长导致档案过大的问题
    mysql报错Packet for query is too large (12238 > 1024). You can change this value
    【Tomcat】linux下实时查看tomcat运行日志
    linux下面MySQL变量修改及生效
    【Vim命令大全】史上最全的Vim命令
    (总结)Linux的chattr与lsattr命令详解
    MySql将查询结果插入到另外一张表
    dos中定义变量与获取常见的引用变量以及四则运算、备份文件(set用法)
    批处理BAT替换与截取字符串的用法t1=%a:~3%是什么意思
  • 原文地址:https://www.cnblogs.com/botvsing/p/10984292.html
Copyright © 2020-2023  润新知