本文共 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
如转载,请后台留言,遵守转载规范
推荐文章阅读
长按识别二维码可添加关注
读芯君爱你