迟到的分享,2014年每天收益5%的高频机器人公开

策略的介绍

策略分享地址:
https://www.botvs.com/strategy/1088
这个策略是我做虚拟货币以来的主要策略,后面经过不断完善和修改,复杂了很多,但主要思想并没有改变,分享的这个版本是无明显bug的 最初版本,最为简单清晰,没有仓位管理,每次交易都是满仓,没有卡死后重启等等,但也足够说明问题。
策略从2014年8月运行,直到今年年初交易所收手续费。期间运行的还算很好,亏损的时间很少。资金从最初的200元跑到了80比特币。具体的过程可以看小草的新浪博客里虚拟货币自动化交易之路系列文章。
下图是我具体统计的OKcoin平台的收益曲线,初始资金1000元,可以看到初始钱稳定增加,中间的直线是我策略停止了,后期由于把策略全改为赚币策略,以人民币计价的收益波动剧烈,具体的过程在策略交易两年总结的文章里有描述。

下图是总资产折合币的曲线:

为什么分享这个策略

1.交易所收取手续费后,几乎杀死了所有的高频策略,我的也不例外。但策略改改也许还能用,大家可以研究一下。
2.好久没有分享东西了,这篇文章早就想写了。
3.和大家共同交流学习。

策略的原理

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

可以看到左侧是买单,显示了不同价格的挂单数量,右侧是卖单。可以想象如果一个人要买入比特币,如果不想挂单等待的话,只能选择吃单,如果他的单子比较多,会使得卖单挂单大量成交,对价格造成冲击,但是这种冲击一般不会一直持续,还有人想吃单卖出,价格在极短时间很可能还会恢复,反过来理解有人要卖币也类似。
以图中的挂单为例,如果要直接买入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个币的累计卖单,使得卖币机会更难得,有更大的几率会以更低的价格接回来,这样就会赚币,反过来就赚钱。实际上前期策略如此有效,币和钱都是增加的。
  5. 如何处理浮亏?
    单笔的交易当然会出现亏损,如卖出后币价上涨,买入后币价下跌,这样的浮亏是不需要处理的,因为交易很频繁,每天来为几千次都是正常的,浮亏是正常的,只要盈利的概率更大即可。
  6. 如何防止黑天鹅?
    比特币的黑天鹅时间很多,有时候就是一路下跌,一点卖出的机会都没有,这种情况也不用太担心,因为黑天鹅时间往往会带来高的波动性,策略赚的正是这部分的钱,亏损也能很快赚回来。

代码讲解

完整的代码可以见我在www.botvs.com得策略分享,这里只讲解核心逻辑函数。在没有改动的情况下,在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;}}}//遍历了全部深度仍未满足需求,就返回一个价格,以免出现bugreturn depth.Asks[0].Price
}

  每个循环的主函数onTick(),这里定的循环时间3.5s,每次循环都会把原来的单子撤销,重新挂单,越简单越不会遇到bug.

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%的双向手续费终结了,不仅是自己被收费的问题,而是整个市场活跃度下降。
但不需要高频的量化策略任然有很大的空间。

转载自 BotVS

作者 小草

转载于:https://www.cnblogs.com/botvs/p/8056958.html

迟到的分享,2014年每天收益5%的高频机器人公开相关推荐

  1. 22一战上岸首师大电子信息经验分享|低成本获得大收益|电子信息

    简单唠下嗑.希望大家取其精华,实际效果怎样还是要靠自己摸索!每个人的学习习惯和知识吸取能力都不同.已定好学习计划的同学,这篇可以当作省钱攻略来阅读. 前期资料准备 唐迟<阅读的逻辑>思维导 ...

  2. 自媒体素材、工具大全分享,每天稳定收益300+

    想要做好自媒体,辅助工具和素材网站怎么能少? 总有粉丝跟大周说自己找不到创作素材.没有好的辅助工具,今天大周就来给粉丝们分享一波,记得先点赞收藏起来. ​一.音效素材 1.爱给网:音乐.音效 2.站长 ...

  3. 学习SQLSugar,分享给更多人收益

    简单查询 static SugarDbContext sugar = new SugarDbContext(); static void Main(string[] args) { var db = ...

  4. 03论文阅读与分享————2020年中国知网六自由度机器人轨迹规划相关论文统计

    一.2020年知网论文统计 1.刘劲松. 基于时间最优的六轴关节机械手轨迹规划研究[D].湖北工业大学,2020. 创新点:遗传算法+粒子群处理时间最优 基本方法:样条插值/笛卡尔空间规划/matla ...

  5. 【数量技术宅|金融数据分析系列分享】为什么中证500(IC)是最适合长期做多的指数

    数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数 ...

  6. 一个研发团队是如何坚持7年技术分享的?

    --"所有分享都是有意义的" --"在PingCode,人人都可以成为分享者" 这是PingCode研发团队的分享精神,而这样的精神,在过去7年中已经闪耀了10 ...

  7. 权威披露2014微信十大最火谣言 | 调查称女性最爱传谣,你服不服?

    愚人节当天,中山大学开了一场"天下无谣"辟谣大会.由微信谣言过滤器与中山大学互联网与国家治理研究中心.宏博知微联合主办.不仅有微信安全负责人杨光分享2014年微信最火的十大谣言,还 ...

  8. 元宇宙的运行之“DAO”:在元宇宙中创作、分享,付出的劳动如何获得回报?...

    原标题:<元宇宙的运行之"DAO"> 摘要 道立于一,造化万物.元宇宙主题大热,市场的分歧在于如果元宇宙仅是AR.VR+多维感知的升级,如何实现巨头转型的愿景?我们在元 ...

  9. 50个热门语义分割数据集免费、高速下载资源分享,涵盖通用视觉、遥感、自动驾驶、医疗等多种场景题

    小伙伴们期待已久的数据集资源盘点系列又来啦~ 本期将分享50个语义分割任务相关的热门公开数据集资源,粗略分了4类(通用视觉类.智慧遥感类.自动驾驶类.其他),快来看看有没有你想要的吧.如果觉得不错的话 ...

  10. 寒门博士分享读博经历成“抖音网红”惹争议,博士该这么“不正经”吗?

    全世界只有3.14 % 的人关注了 爆炸吧知识 最近在抖音上,一个名叫"相宜"的主播火了.短短几个月时间内,她就涨粉940万. 而和一般网红不同的是,相宜是一位刚毕业的博士.带火她 ...

最新文章

  1. python.day.10——面向对象(二)
  2. 家用电脑虚拟机做服务器_家用电脑能当服务器吗
  3. 多个mysql 环境_关于几个MySQL环境问题的对比
  4. nlp构建_使用NLP构建自杀性推文分类器
  5. Objective-C:NSArray的常见操作
  6. python每日经典算法题5(基础题)+1(较难题)
  7. 数据库中union和union all的区别
  8. javascript(jQuery版)切换tab效果自动切换(转自www.jqueryba.com)
  9. matlab画图 横坐标为年月
  10. java版 高斯过程,1.7. 高斯过程
  11. 去哪儿网产品体验报告
  12. Java基础恶补——控制流、异常、断言
  13. MySQL高级篇——事务
  14. console口设置登录密码
  15. 十年牧码,我的平凡之路
  16. 蛮力法的相关问题总结
  17. 微博的10大特征包括哪些?
  18. python中级第九课--模块和包(小白piao分享)
  19. Python实现选择排序算法
  20. tf.contrib.slim常用方法

热门文章

  1. canvas微信图片生成海报
  2. 解决adb报5037问题的思路---切换端口
  3. 水星U3相机打开报错:-1005 ,this device can only be operated on an USB3.0 Port
  4. spring boot网络空间安全实验教学示范中心网站 毕业设计源码111454
  5. 人工神经网络与Stata应用
  6. three.js可拖拽,切换场景的全景图效果及源码
  7. Java基础知识——9.流程控制及大数
  8. P1893 山峰暸望(题解)
  9. 我为什么还继续呆在外包公司
  10. 直播预告| CVPR专场五来了!