# Bitcoin arbitrager **Repository Path**: wangqq335/Bitcoin-arbitrager ## Basic Information - **Project Name**: Bitcoin arbitrager - **Description**: 比特币交易平台间的差价套利 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2018-07-05 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 这是什么? 一个比特币套利交易程序,平衡不同交易所的比特币的价格差来获利 一个苹果,两个市场,不同价格,一买一卖,苹果不变,人民币增多 ## 使用方法 * 将config中的交易所和Bmob的API填写好之后,点击guard.bat即可启动程序。 * PS:run.bat是策略运行脚本;guard.bat是进程守护脚本。 * run.bat的逻辑是,kill掉python.exe进程--->启动套利策略。所以每次不必先手动将之前的套利策略窗口关闭。 * guard.bat的逻辑是,获取计算机当前所有进程,放入列表文本中,检查其中有没有python.exe,如果没有,执行策略运行脚本;如果有不做操作。运行周期200秒 ## 有哪些交易所? 现在写好的交易所有Okcoin,火币,btctrade,中国比特币,BTCC,币贝网,好比特 当然,有需要的市场还是可以继续添加的 ## 程序结构 * lib包含交易所API的基础库、API库和数据库操作类 * 每个交易所有所不同,所以分交易所写了多个 * API基础库,交易所API集合 * Mysql数据库操作类 * markets是交易所类,交易所的操作都定义在里面 * 交易所操作一般包括: * 获取交易所深度 * 获取交易所账户信息 * 买、卖操作 * 单个订单信息 * 当前所有挂单信息 * 撤销单个订单 * 撤销所有订单 * config.py包含策略运行参数 * arbitrager.py普通策略,多交易所之间的差价实时买卖策略 * arbitrager_haobtc.py 好比特套利策略,利用好比特的maker、taker特点舒赚取手续费奖励,同时也拥有不同套利的功能 ## 规定 * 程序运行时,千万不要对资产进行进出操作!万一运行时有操作,务必重启程序以保证程序运行正常 * 时间获取放在交易所操作之前,更接近实际操作时间 * 开启交易的交易所必须有资产! * 最佳资金配比, 0. 优先满足好比特套利的资金需求 1. (Okcoin.btc = Haobtc.cny + Huobi.cny) and (Okcoin.cny = Haobtc.btc + Huobi.btc) 2. 以Okcoin为中心,满足Haobtc套利(被动策略),兼顾Others套利(主动策略),以被动策略为主,主动策略为辅 3. 被动策略为总资金的90%,主动策略为总资金的10% 4. 资金平衡策略用来提高资金利用率,做法为根据当前持有比特币的市值与人民币市值的比例,买入或卖出以求比特币市值与人民币市值的平衡。 * 例如,比特币市值大于人民币,卖出部分比特币;比特币市值小于人民币,买入部分比特币 * 邮件发送默认配置:每天4次,每6小时一次,每天6,12,18,24点发送统计邮件,统计24小时收益及对应年化 * 使用op_type=profit操作来记录利润,因为总资金可能会变化,不能用资金差额来统计 ## 注意事项 * 利润统计值为零的情况说明 1. 套利开始时,因为交易所资产更新可能失败,所以本轮套利利润统计定为理论预估值 2. 程序运行过程中的实际币数跟初始币数可能存在误差,一般小于等于0.0001 3. 好比特的资产总额应该小于其余市场min(人民币总额, 比特币总额) * 火币的更新个人资产信息的api中post数据的market字段默认为cny。所以可以将比特币充值到火币美元账户,而不用担心充到人民币账户扰乱程序交易。 * 微信的监控模块中的预估年化收益的本金是预先设好的,如果市场变化过大,或者资金变动,则需要改动里面的值。 * 为了加快好比特的API访问速度,我将阿里云的hosts文件更改过,好比特服务器地址123.57.68.151 haobtc.com,注意:不用www * 因为balanceBTC操作比profit操作要频繁,所以前者的阈值要小于后者的阈值 ## 错误信息总结 * 深度更新错误 1. urlopen error timed out 2. timed out 3. urlopen error _ssl.c:584: The handshake operation timed out * 资产更新错误 1. HTTP Error 504: Gateway Time-out 2. urlopen error WinError 10060 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 ## 问题记录 * 有一次程序执行错误,错误在意料之中,程序正常停止,同时也会给我发送一封邮件提醒错误发生,让管理员重启, 但是邮件并没有收到,邮件到了QQ邮箱的垃圾箱,导致直到中午才发现错误的发生,所以以后一定要把提醒邮箱地址添加到收件邮箱的白名单中,以免发生类似的错误。 * 整点多次运行资金平衡策略,解决办法->调小资金平衡策略触发时间阈值,从3调到2 * 利润统计误差过大,更新利润统计策略,从每次轮询都统计改为固定周期统计。以前是大概4秒一次利润统计,现在改为155秒一次利润统计,从而减少了数据库的使用,增加了效率 * 利润统计触发阈值3秒、资金平衡触发阈值2秒。如果更换了环境程序运行异常,可以修改这两个参数 ## 事故记录 * 2016.12.1 好比特错误吃单,损失125元,错误分析,PENDING_DEPTH_LIMIT过低或者ORDERWARNINGRATE过高,解决办法,PENDING_DEPTH_LIMIT设定为5,ORDERWARNINGRATE设定为0.8 * 2016.12.5 好比特成交11个,在5秒之后Ok才平衡这些币,而这5秒内价格变化了10元,从而导致了亏损。解决措施:优化程序执行速度,减少不必要的时间开销 * 2016.12.10 Bmob插入数据失败,SSL错误,解决办法,接受所有连接Bmob时所有证书,解决方案类似于Haobtc的SSL错误解决方案 * 2016.12.12 资金策略中执行成功后,需要再次给init_btc和init_cny赋值,以保证最新,但是两次尝试都失败了,导致了程序的关闭。解决办法,去掉资金平衡策略中的对init_btc和init_cny的再次赋值,并去除被动策略中banlanceBTC操作中的exclude参数 * 2016.12.19 17:24 利润统计疑似异常,经排查,不是错误,可能是好比特的手续费集中结算;或者好比特系统异常而多给了我比特币而导致的资产增加 ## 观察现象 * 有时候,好比特历史成交记录中的订单的成交时间与实际的成交时间不一致,历史记录中的成交时间延迟于实际成交时间 * ORDERWARNINGRATE 订单警告系数,作用为:考虑好比特奖励手续费的情况下,判断好比特套利是否有利润的一个参照。 这个参照不能设定为1,因为不是每一笔好比特的交易我都要做,我要做的应该是有尽可能多利润的交易,把低利润的交易舍弃,让给高利润的交易。 * 2016.12.1 观察到,近10天我的系统的Haobtc交易所的成交量占Haobtc的总成交量的比例,最高为10%,最低为4%,一般在5%--6%浮动。思考,能否增加我的系统成交量,并且让我的交易都有利润。