博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何设计自己的第一个加密交易机器人?
阅读量:2107 次
发布时间:2019-04-29

本文共 2145 字,大约阅读时间需要 7 分钟。

全文共2194字,预计学习时长6分钟

图源:unsplash

 

我最近编写了第一个加密货币交易机器人。从每十分钟收集一次比特币的历史价格开始——我把这些数据装入Python Pandas的数据库里,运行一些程序模拟,进行低买高卖。

 

这看起来很不错,代码也很简单,用不了几个小时就可以搞定一些robin_stock函数,然后用其大干一场。但我错了,这是我在这个失误中学到的东西,可能会帮助你节省一点时间。

 

模拟交易比现实交易更加简单

 

当进行模拟交易,操作人可能需要做一些假设。程序决定在哪个时刻以该价格买进或卖出,并且每次都成功的话,就意味着取得了利润的最大值。

 

但现实并非这么简单。实际交易需要一点进行时间,价格也在不断变化。当程序进行实时交易时,价格发生显著变化之前只能完成一部分的订单,甚至可能无法完成任何订单。

 

我把这称为“摇摆和错过”。制作出的智能交易机器人需要平滑的处理此类情况。对此,我选择保存交易的订单号,经常对结果进行查询。如果一个小时后这笔交易还没有进行,机器人就会取消订单然后再进行一次尝试。

 

在模拟中所有的订单都可以按预期完成——但在现实生活中,需要检查订单的完成与丢失情况。

 

限制买卖是好帮手

 

当进行实时交易时,需要以限价单或者市场单的形式发布这个买卖。有了市场指令之后,交易将以任何现行汇率完成,这并不好。因为价格可能在几秒钟内波动。这就是使用机器人作为首选的原因。所以我通过限制交易的方式下单,如果价格剧烈波动的话,它就不会以超出预期的价格买入或卖出。

 

注意精确度

 

现在回想起来,这是显而易见的,但是当代码第一次运用时,它就给我带来了一些麻烦,在模拟中发布一个购买(cash_on_hand/coin_price)是可行的。当然,模拟可能会储存购买的12.2342348998729384797 ETH,但在模拟中没人会在乎。

 

但是如果在现实生活中尝试这么做是很可能失败的。交易平台对购买量和价格的精确度有限制,并且会根据币种的不同有所变化。当你想到这一点的时候就会明白——DOGE目前的售价只有几分之一美分,而BTC的售价目前超过1.9万美元,不可能像买BTC一样合理的购买极小部分的DOGE。

 

机器人为每个币种的价格和购买量建立了最精确的查找表,并使用它们计算购买订单数量。如果发生了执行错误,服务器会发送错误反馈。

 

不能假设服务器总如期望的那样响应

 

这只是一个编程实践,但是如果不第一时间就写出来的话,这个程序很快就会被理解。每次发出与服务器对话的调用——获取价格、发出订单、检查状态——检查异常,每一次执行中都是如此。

 

你的模拟如果没有维护窗口,则不会出现服务器故障与对未编写错误库的调用,现实生活中实际交易的要素如此多,并且……

 

假设互联网连接失败,电源关闭的内容

 

必须处理断电、上网和程序崩溃的问题。如果正在计算移动平均线或RSI这类值,或是观察烛台模式,需要非常确定数据的连续性与不中断。如果中断可能导致程序出现错误的调用。需要对状态进行保存,检查数据的日期戳。如果在计算指示符时发现数据中断,则需要暂停执行直到得到需要计算的全部数据。

 

匹配币种与正确的售价

 

出现以下错误是完全可能的,机器人试图以另一个币种的价格出售某个币种。这会导致一些非常愚蠢的事情发生。由于一个糟糕的设计决定,某个早期版本的机器人试图以当时BCH的成本出售一些BTC,这低了一个数量级。

 

这个数据没有让我非常难过的原因是,这个价格相差是如此之远,以至于服务器将其标记为错误,如果只是差了,例如,一个因数4的话,这个错误交易会让我付出很多代价。

 

让机器人给你发短信非常有用

 

大多数手机公司都有发送电子邮件的方式,这些邮件会以短信的形式发送到手机,这让我们可以在做其他事情时实时了解机器人在做什么。例如想知道的机器人取得的成功,或是一定需要知道的机器人做的傻事。

 

我将短信配置设置为告诉我何时买进买出,并且发送每个交易订单的结果。这样我就知道机器人是否下达了成功的订单。

图源:unsplash

 

确保用少于所有的钱进行交易

 

这个情况一般出现在想要进行小事务测试的更改时。从一开始就把这个功能构建到机器人中——没有人希望使用账户中所有的钱进行实时测试。

 

静态分析减少了开发时间

 

这也是很好的编程实践。在Python中,一些错误会直到执行代码分支时才发现。如果该错误在一个不常运行的函数中,如buy()或sell()函数中,这类错误可能几个小时都捕捉不到。

使用PyLint和PyFlakes这样的工具,可以快速捕获运行过程中的一些错误。我强烈推荐这类工具,可以大量节省时间。

 

请注意,上述所有内容都不应视为理财建议。投资中承担的任何风险都是自己的,编写一个花钱的程序比亲手交易加密货币的风险还要更大,这已经很能说明问题了。

推荐阅读专题

留言点赞发个朋友圈

我们一起分享AI学习与发展的干货

编译组:董昱璨、张静影

相关链接:

https://medium.com/swlh/design-lessons-from-my-first-crypto-trading-bot-fcf654b99546

如转载,请后台留言,遵守转载规范

推荐文章阅读

长按识别二维码可添加关注

读芯君爱你

你可能感兴趣的文章
几个基本的 Sql Plus 命令 和 例子
查看>>
PLSQL单行函数和组函数详解
查看>>
Oracle PL/SQL语言初级教程之异常处理
查看>>
Oracle PL/SQL语言初级教程之游标
查看>>
Oracle PL/SQL语言初级教程之操作和控制语言
查看>>
Oracle PL/SQL语言初级教程之过程和函数
查看>>
Oracle PL/SQL语言初级教程之表和视图
查看>>
Oracle PL/SQL语言初级教程之完整性约束
查看>>
PL/SQL学习笔记
查看>>
如何分析SQL语句
查看>>
结构化查询语言(SQL)原理
查看>>
SQL教程之嵌套SELECT语句
查看>>
几个简单的SQL例子
查看>>
日本語の記号の読み方
查看>>
计算机英语编程中一些单词
查看>>
JavaScript 经典例子
查看>>
判断数据的JS代码
查看>>
js按键事件说明
查看>>
AJAX 初次体验!推荐刚学看这个满好的!
查看>>
AJAX 设计制作 在公司弄的 非得要做出这个养的 真晕!
查看>>