Loading ...

高频策略: 韭菜收割机应用交流

Author: J, Created: 2017-02-16 10:12:00, Updated: 2017-02-17 02:45:00

韭菜收割机策略: https://www.fmz.com/strategy/34388 原始代码: https://github.com/richox/okcoin-leeks-reaper

国外有好几个免手续费的交易所,会写API接口的可以去试试。

我在测试过程中遇到些问题,来这里寻求帮助。谢谢!

  1. 原作者的代码中,有出现延时1分钟的代码: sleep 60000, 没看明白这有什么用?
  2. 移植版本中的成交价格代码有误: self.prices[i] = trades[trades.length - 1].Price 这里所有价格都变成最新的价格了
  3. 另外就是觉得默认的参数 BurstThresholdPct 实在太小了

More

J 最近Poloniex的 BTC/USDC 交易对免手续费,可以跑高频

J FCoin 100% 返还手续费,又可以玩了,继续测试韭菜收割机! https://www.fmz.com/robot/93218

stonesun Zaif不错,有0.01%的返手续费。但是目前需要日本本地的实名认证,怎么破?

重仓出奇迹 第二个问题我也没看懂呢 https://dn-filebox.qbox.me/41bed7a69718a43b25f3715926d44361fa3d465d.jpg 开始这里我就很迷糊.trades获取只有一个.trades.length == 0怎么循环呢

valennn 请问这个策略在ok国际上能跑吗

野鞋子 新手,我也想知道这个程序的交易思路,例如:本次tick交易量 = 上次tick交易量*0.7 + 本次tick期间实际发生的交易量*0.3,用于平滑和减少噪音;本次tick价格 = (买1+卖1)*0.35 + (买2+卖2) * 0.10 + (买3+卖3)*0.05;bidPrice = orderBook.bids[0].limitPrice * 0.618 + orderBook.asks[0].limitPrice * 0.382 + 0.01,等等这些是按照什么来确定的?个人经验、喜好或是根据什么策略?

sanmao 我用这个策略没有挣到钱阿,有没有挣到钱的?

crocodile 交易量vol相关的策略的计算没有问题吗?随着时间的累计,vol必然一直增加,用这个去逻辑去处理交易量会有问题的吧。 if (self.vol < BurstThresholdVol) { tradeAmount *= self.vol / BurstThresholdVol }

louis 交易一个月,亏损9%,准备放弃了。

xiahaohuan001 还用到了黄金分割率0.618,不知道啥意思(*^__^*)

J 分享自己移植的原代码里对价格的处理 // 2A. 价格未突破,减小力度 if (bull && (self.prices[self.prices.length-1] < _.max(self.prices.slice(0, -1)))) { tradeAmount *= 0.90 // 价格未创新高 } if (bear && (self.prices[self.prices.length-1] > _.min(self.prices.slice(0, -1)))) { tradeAmount *= 0.90 // 价格未创新低 } // 3. 短时价格波动过大,减小力度 if (Math.abs(self.prices[self.prices.length-1] - self.prices[self.prices.length-2]) > burstPrice * 2) { tradeAmount *= 0.90 // 2倍价格波动 } if (Math.abs(self.prices[self.prices.length-1] - self.prices[self.prices.length-2]) > burstPrice * 3) { tradeAmount *= 0.90 // 3倍价格波动 } if (Math.abs(self.prices[self.prices.length-1] - self.prices[self.prices.length-2]) > burstPrice * 4) { tradeAmount *= 0.90 // 4倍价格波动 } // 4. 盘口价差过大,减少力度 if (self.orderBook.Asks[0][0] - self.orderBook.Bids[0][0] > burstPrice * 2) { tradeAmount *= 0.90 // 2倍盘口价差 } if (self.orderBook.Asks[0][0] - self.orderBook.Bids[0][0] > burstPrice * 3) { tradeAmount *= 0.90 // 3倍盘口价差 } if (self.orderBook.Asks[0][0] - self.orderBook.Bids[0][0] > burstPrice * 4) { tradeAmount *= 0.90 // 4倍盘口价差 }

qinerg 有一个问题我没搞懂,哪位大牛能帮解释一下。 策略启动时初始化了两个账户。一个accountExchange,一个 tradeExchange。所有的交易都是tradeExchange所触发的。 其中仓位平衡的辅助策略中,通过account账户查余额并计算仓位的偏离情况,但却使用 trade账户去交易。就算交易成功了,也应该是增减trade账户的资金情况呀?它跟account账户到底是什么关系呢?

super888 // 更新时间价格序列 // 本次tick价格 = (买1+卖1)*0.35 + (买2+卖2) * 0.10 + (买3+卖3)*0.05 prices = prices[1 .. -1] + [( (orderBook.bids[0].limitPrice + orderBook.asks[0].limitPrice) / 2 + 0.7 + (orderBook.bids[1].limitPrice + orderBook.asks[1].limitPrice) / 2 + 0.2 + (orderBook.bids[2].limitPrice + orderBook.asks[2].limitPrice) / 2 + 0.1)] //======================================= 这里原作者的注释里写的思路很明白(权重之和==1.0), 而实际代码里却看不明白是什么思路(难道原作者自己代码写错了?把乘号错写成了+号。。。或者是故意的?) //=================后记================== 好吧,去github看了一下,果然原作者10天前修正了一次,把这个加号改成乘号了。这样的话,说明最初放出的代码是《修饰》过的,很难想像是发生了什么情况会把乘号复制成加号?

J 原代码里很重要的一些策略没有移植过来,建议自己加上。 // 2A. 价格未实现突破,减小力度 if (bull && prices[-1] < prices[0 .. -1].max()) tradeAmount *= 0.90 if (bear && prices[-1] > prices[0 .. -1].min()) tradeAmount *= 0.90 // 3. 短时价格波动过大,减小力度 if (Math.abs(prices[-1] - prices[-2]) > burstPrice * 2) tradeAmount *= 0.90 if (Math.abs(prices[-1] - prices[-2]) > burstPrice * 3) tradeAmount *= 0.90 if (Math.abs(prices[-1] - prices[-2]) > burstPrice * 4) tradeAmount *= 0.90 // 4. 盘口价差过大,减少力度 if (orderBook.asks[0].limitPrice - orderBook.bids[0].limitPrice > burstPrice * 2) tradeAmount *= 0.90 if (orderBook.asks[0].limitPrice - orderBook.bids[0].limitPrice > burstPrice * 3) tradeAmount *= 0.90 if (orderBook.asks[0].limitPrice - orderBook.bids[0].limitPrice > burstPrice * 4) tradeAmount *= 0.90

J 1BTC跑这个策略,一天交易量大概50BTC

Chongzi1987 不好意思,新手刚开始学习,请问这个算法中哪里用到了融资融币啊?

qinerg def prices = [trades[-1].price] * 15 原作者也是这么写的,用于初始化的变量

qinerg 嗯,看代码也发现这几个问题: 1、self.prices[i] = trades[trades.length - 1].Price 数组里的值都更新为最新价了? 2、self.prices.push(_N((orderBook.Bids[0].Price + orderBook.Asks[0].Price) * 0.35 这里的0.35+0.1+0.05合计为0.5,而原作者代码是0.7+0.2+0.1

louis sleep 60000是每隔一分钟清理一次没有成交的订单 BurstThresholdPct 估计是大数据算出来的一个成交量 国外哪些交易所免手续费?

tmdsrt2 哈哈,效果如何

tmdsrt2 Fcoin手续费是收什么币,返什么币。跟FT价格没关系

我爱毛爷爷 目的可能是如果trades没获取到,就再获取一次吧。

我爱毛爷爷 有做什么优化吗,前面没赚钱,后面赚的越来越多

J 今天FT跌了,收益曲线就下降了。这个策略原来跑的是BTC,而且需要卖空持有的BTC,这样才能保证不受价格起伏的影响。 我还没有找到合适的交易所跑这个策略

swordhnj 需要提前垫付一天的手续费,如果第二天Ft跌了怎么处理?

Evon 之前不是说还可以赢利吗?

kouyou7035 感觉问题应该是发生在交易所上。zaif在日本论坛上口碑也特别不好。

yang11011406 哥们 python的方便传我一份不 交流一下 q:439977805

htcc 有在实盘上跑吗, 有没有盈利?

J 这个策略只能实盘测试,botvs上跑模拟盘没有意义。 日本的几个大交易所应该都是免费的吧。 我没有吃透这个策略的模式,对一些参数也不很了解,放弃研究了。

jimupon 大神对这个策略还有研究吗? 最后有没有赚到钱? 最近刚学习量化,用python重新写了下这个策略。 发现已经没有免费的交易所了,放在botvs实盘模拟上运行看了下,收益基本跟着币价走,平衡策略不盈利, 趋势策略基本没法成交,都被撤了,可能是botvs上成交量太低的原因? 还有必要在实盘上试嘛?

J QQ:3171061

fff9o9 能留个联系方式吗?

韩诺她 这个策略,估计是阉割过的。没有有效的止损。

valennn 持有也会有收益变化的好吧,没在跑的意思的没有发生交易

imcoddy 明明是一直在收益你却说没在跑……

valennn 一开始启动是有交易的,能跑十分钟这样吧,后来就不会交易了,返回的日志是这样的 https://dn-filebox.qbox.me/05c78f1d854212a532ae90c3e110c6451ae99ecf.jpg

J 打印出返回的错误信息看看什么原因吧。你说的跑了两下是已经交易了还是根本就没有交易?如果一次也没交易,那是策略本身没写好了

valennn 我之前试过跑,不是高频策略吗,不知道为什么跑了两下就不交易,是不是请求速度过快被禁IP了?

J 这样啊,那可能没问题,不过如果有些交易吃单算上手续费那也会亏

valennn ok国际是 taker - maker 模式,挂单不用手续费啊

J 基本是挂单

valennn 这个策略以吃单为主?

J 这是高频策略,只能在免手续费的交易所跑

rajajack 你在哪个平台上跑的这个策略??感觉这个策略半年32倍有点夸张呀!

J 我的理解这些参数就是靠经验,根据当前交易所、市场行情等来不断优化的。

louis 计算账户资产

J vol 计算公式如下,不会一直增加 self.vol = 0.7 * self.vol + 0.3 * mem // mem 是本次tick期间实际发生的交易量

crocodile 还是不行,我发现trade_history和订单没有关联。。你没算你这个,那这个策略你怎么跑,有什么变通的方法吗?

J 这我没查询过。不过 trade_history 返回的是已成交记录,与 active_orders 对比下,应该能计算出成交量了。

crocodile 大神,再问一个问题。zaif如何得到一个订单的成交量

crocodile 我明白了。谢谢!

J https://corp.zaif.jp/api-docs-en/trade-api/ 其中的 active_orders 返回所有未成交订单,包括订单号

crocodile 我在策略里面看到需要获取单个订单的信息,包括订单状态。但是zaif的api里面没提供,怎么搞?

J 存入比特币就能交易了,不用填信用卡号码

crocodile 问一下,zaif邮箱注册完直接就可以用比特币交易了吗?需要填写信用卡之类的信息嘛?

louis Zaif,免手续费

xiahaohuan001 算上手续费?

J 那是我误解了。这种高频对时间当然很敏感,如果延迟太大,我觉得只能把第一个参数百分比的阈值调高。 不过这个策略我运行了半个月,调了很多参数都还不能盈利,目前放弃了。

xiahaohuan001 被动延迟还能设置?

J 我说的也是 :-)

xiahaohuan001 我指的的是被动延迟,tick to trade的延迟

J 这几天一共交易了2000BTC也还是没赚

J 延迟的设置对策略影响应该是非常大的,策略依赖的价格和交易量都会依据不同的延迟而变化。

xiahaohuan001 行情延迟对策略有影响吗?

louis 老哥,我1w进去,量刷上去了,可还是没赚,今天早上看净值换成RMB还是1w,哭晕了。。。。你怎么样呢?

J 手动买卖了几次,有点没折腾明白,就放弃了。

Honanbtvs bitmex 如何?为什么不用这个呢,是不是有坑?

louis 他对刷量的交易貌似要求也比较多,其中有一条差价太小的不算。

J 当然没这么简单。还是请Zero赶快把这些免费的交易所加到Botvs上。

J 想办法认证账号, 刷量的交易费每天也能赚个1%

wuqianming 把移植策略的交易函数替换成httpquery()可以吗?

wuqianming 请问怎么写API接口啊,谢谢老哥

louis 跑了一天,貌似量刷上来了,但是没盈利。纠结。。。

louis 改了下参数,但是效果不好,还改出BUG了。

J 你昨天的交易量增加蛮多的

J 自己写的接口

3263243y 问下这个是在 zaif 跑的? BotVS 好像没 zaif 接口,怎么解决的?

jxc6698 我也跑了一个,暂时没啥效果,看了你的,我也有信心了

J Google 的验证码,也许被墙了? https://dn-filebox.qbox.me/c40a79c3e00ca877ee495df19a9f79d283da2b0e.png

qinerg Zaif 每次登录的时候,总是提示 "reCAPTCHAを確認してください.", 但是界面上根本没有验证码输入的地方呀? 你是怎么登录的呢?

louis 看到你这个我就有信心了

J 他一个人每天就近1000BTC的交易量,韭菜都被他割走了

J 继续努力,我的开始赚钱了 https://dn-filebox.qbox.me/a5bbb7f57ab71363eab3e48d864a13e70971c121.png

louis 今天这么大的波动,结果还是不赚钱。我可能用的是假代码。

louis 秘密結社ふがふが 这哥们的交易记录简直完美。。

J Quoine 深度不行,还是别去了。 Zaif 的交易量排行在 https://zaif.jp/public_trade_user/btc_jpy/1 。公开自己的交易量,需要在 Social Settings 页面最下面打开。

louis 我还打算去quoine呢,结果认证始终过不了....人生难道就是折腾么。。。 我也赚不到钱,感觉就是刷交易量,貌似Zaif有交易返点,但是没日本的电话认证过不了。 交易量排名到哪里看?

J 我也转战Zaif了,效果比Quoine好。交易量不少,不到2天交易量就进入排名第二页了,但是也不赚钱。比比咋们谁的机器人割韭菜更快 :-)

J 我觉得就是为了得到一个最优化的买卖价格。用0.5也可以,但是用黄金分割率可以在买入和卖出时,对买入、卖出价格的侧重点有所不同。

J 有道理!

louis 我在每个if里加一个判断tradeAmount >= 0.1的判断,可以减少后面计算量。

J Quoine 我也没融币,但是收益是按照融币来计算的,跑了2天没有赚头

J 不赚

louis quoine 可以融资融币?! 我在zaif跑,很奇葩的市场,下单5日元一个单位...

louis 一个账号,2个API接口吧,我是这么理解的。

louis 我大概也是1BTC跑的,死磕了下日志,总结出的核心思想和你上面说的一样。But,跑的两天不赚呀,苦笑ing... 怀疑是自己移植的有问题,你跑的这两天效果怎么样?

J 策略的理念之一就是50%持仓,所以在买卖后就不断用 0.01 的订单来回归50%的仓位。 当然如果价格继续上升或者下降,还会通过趋势买入卖出。 这个策略有1BTC应该就能运行了,再少的话很难看到效果了。

J 如果币价暴跌,你这样就亏大了。借币是为了让策略不受币价的影响吧。

wuqianming botvs不支持quoine啊,怎么办

Chongzi1987 那为什么要强调需要融资融币呢?一开始账户里留一部分现金和等量的币是不是就可以了?

louis 没有看懂他这个趋势策略,经常是趋势部分刚买完,平衡策略就开始卖。是不是自己量太小了导致的?

jxc6698 恩恩,我觉得这个策略只能做taker。没深度的话,效果应该不太好的

J 是的,在 1. 那里是赋初值,后面通过 shift 和 push 来更新数据

J quoine.com, 深度不怎么好

jxc6698 你在哪个平台测试的?市场深度够吗

jxc6698 原来是3个线程啊,我说我一直奇怪呢。我重写成了python代码,回头试试

jxc6698 你的 1. 那一行在循环里面的吧。。。是数组左移

J 算法里没有,自己在开策略前手动融资融币

J 昨天运行了一天,发现这平衡策略基本是不赚钱的,现在要看趋势交易能否赚钱了。

J 明白了,这初始化变量没问题

louis 0.7 前面还有一个/2 = 0.35

louis 源码上是3个线程,主线程做的趋势交易,一个线程做平衡策略,一个线程做清理。

J 哦,原来那些进程是同步运行的。Javascript 里好像没法这么执行,只能去判断订单的时间了。 BurstThresholdPct 在策略里用于判断价格是否出现方向上的突破,这么小的比例感觉不合适。也许以前在OK那种交易量下还行? 免交易费的交易所看这里的统计: https://coinmarketcap.com/exchanges/volume/24-hour/no-fees/