大家好,我是橙哥!当天咱们来聊一聊Freqtrade,Freqtrade是一个开源的加密货币量化买卖机器人,用Python编写。它支持干流的买卖所,可以经过Telegram或网页界面来控制,还提供回测、图表和资金治理工具,并可以经过机器学习来提升买卖战略。
上方咱们来了解一下freqtrade的上班原理,看看如何经常使用命令行工具下载历史数据,创立新的性能文件和新的战略;如何经常使用Python和Pandas编写战略:咱们将定义一个方便的移动平均战略,在以太坊(ETH)和比特币(BTC)之间启动买卖,来参与持有的比特币数量。咱们可以用freqtrade启动以下操作:
开发战略: 轻松经常使用 Python 和 pandas 开发战略。咱们将在上方创立一个方便的战略,freqtrade 有一些示例战略仓库。
下载市场数据: 极速下载你选用的加密货币的历史多少钱数据。
回测: 检查你的战略在事实环球中能否有盈利时机。
提升: 经常使用 hyperopt 为你的战略找到最佳参数。
选用买卖对: 你的选用可以是静态的或基于方便过滤器的灵活选用,例如买卖量大于某个数量。
模拟运转: 经常使用模拟钱包在实时数据上测试战略。
实时运转: 经过加密货币买卖所的 API 经常使用实在资金部署战略。
经常使用 Telegram 机器人: 经过 Telegram 控制和监控你的战略。
剖析和可视化买卖历史: 应用保留文件或 SQL 数据库中的买卖数据。
Freqtrade 的装置
让咱们从装置开局,Docker 是一切装置方法中最方便的模式。你须要先装置 Docker 和 docker-compose,而后经过启动 Docker Desktop 确保 Docker 正在运转。如今可以经过在你想要的目录中收回以下命令来设置 freqtrade:
如今应该会有以下目录结构:
要验证 freqtrade 能否已正确装置并预备好经常使用,请运转协助命令:
你会看到以下输入:
协助命令的输出列出了一切可用的freqtrade命令。在这一局部,咱们将讨论最关键的命令及其经常使用方法。首先是回测。
回测:freqtrade测试买卖战略的方法
在上方,咱们将创立一个方便的战略并在历史数据上启动回测。经过历史数据测试战略,模拟战略预期的买卖行为。只管这不能保障在实盘中的体现,但它是一个获胜/盈余战略的参考。
Freqtrade经过以下步骤启动战略回测:
为性能文件中提供的货币对(如ETH/BTC、ADA/BTC、XRP/BTC等)加载历史数据;
调用战略的bot_loop_start()函数一次性。这在实时运转中启动一个新循环,而在回测中只要要一次性;
调用populate_indicators()方法计算每个货币对的技术目的;
调用populate_buy_trend()和populate_sell_trend()方法计算每个货币对的买卖信号;
假设战略成功了,经过调用confirm_trade_entry()和confirm_trade_exit()方法确认买卖买卖;
遍历每个时期段(如5分钟、1小时、1天等),模拟入场和出场点;
生成回测报告,汇总一切买卖及其在指定时期的盈亏状况。
下载数据
要启动回测,咱们须要从买卖所失掉历史多少钱数据。让咱们经常使用以下命令从Binance下载一些数据:
该命令的参数通知freqtrade以下内容:
-p ETH/BTC - 下载以太坊(ETH)-比特币(BTC)对的数据-t 1d - 下载时期周期为1天的数据--timerange 20200101-20201231 - 下载2020年1月1日至12月31日的数据--exchange binance - 从Binance下载数据。在这里,您可以经常使用freqtrade支持的任何买卖所
此命令生成了以下文件:
其中蕴含多个收盘-最高-最低-收盘-成交量(OHLCV)数据记载,如下:
列的含意如下:
Unix 时期戳(毫秒)收盘价:蜡烛图收盘价最低价:蜡烛图最低价最低价:蜡烛图最低价收盘价:蜡烛图收盘价成交量:买卖量,以基础货币显示,本例中为 ETH。BTC 为报价货币。这些数据可以划一地显示在以下蜡烛图表中:
如何解读上方的图表上方的图表经常使用蜡烛图来示意比方便线条更多的消息。你可以在上方的图片中极速了解蜡烛图的含意。
从上一节中的OHLCV行示例,你可以看到每个蜡烛图代表每行数据的收盘、最高、最低、收盘局部。
如今咱们曾经看到了数据的示例并了解了每行的含意,让咱们继续性能freqtrade以运转战略。
Freqtrade性能
咱们曾经有了回测战略所需的数据,但咱们还须要创立一特性能文件,这将使咱们能够轻松控制战略的几个参数。
要创立新的性能,咱们运转以下命令:
你会看到一些初始疑问,回答如下:
上方,咱们须要关上性能文件并设置 pair_whitelist = ["ETH/BTC"],这将设定咱们关注的货币对。而后咱们就可以开局了。
成功一个方便的自定义战略 - 移动平均交叉
这个买卖战略其实十分方便,咱们只要要做对两件事:
低价买入低价卖出
真的这么方便吗?有什么须要留意的吗?难点在于准确找到实践的低点和高点。移动平均战略面前的想法如下:
你有两条线:慢速移动平均线(SMA):常年平均值,代表普通趋向。极速移动平均线(FMA):短期平均值,代表趋向。
关于咱们的战略,咱们将经常使用以下目的:
当FMA上穿SMA时买入,示意回升趋向。当FMA下穿SMA时卖出,示意降低趋向。
这就是所谓的移动平均交叉战略。
freqtrade 的战略成功
让咱们经常使用 pandas 成功 freqtrade 中的移动平均交叉战略。
首先,咱们须要创立一个新的战略文件,该文件将蕴含咱们买卖信号面前的逻辑。
如今,咱们可以在战略文件夹中找到新创立的文件:
SimpleMA_strategy.py
蕴含一个智能生成的类 SimpleMA_strategy 和几个咱们须要降级的函数。
为了定义咱们的方便战略,咱们须要降级以下三个函数:
populate_indicators()populate_buy_trend()populate_sell_trend()让咱们逐个了解这些函数。
在这里,咱们计算战略所需的目的,以生成买卖信号。
依据咱们的战略,咱们计算快线fast_MA(基于最近5根K线图)和慢线slow_ma(基于前50根K线图):
2. populate_buy_trend() 此函数生成咱们的买入信号,当极速移动平均线(fast_MA)上穿慢速移动平均线(slow_MA)时触发。
咱们可以经过降级 populate_buy_trend() 来参与以下逻辑,以成功这个义务:
经常使用qtpylib,咱们可以轻松找到均线交叉点。实质上,上方的代码在满足买入条件(crossed_above)时,将买出列设置为1。
依据咱们的战略,当fast_MA线低于slow_MA线时的代码如下。
咱们如今经常使用crossed_below——与crossed_above同样的信号——当咱们的卖出条件被触发时,它会在卖出列中标志为1。
自动状况下,生成的freqtrade战略文件蕴含更多选项,例如ROI(投资报答率)和止损,前面咱们再讨论,如今将临时禁用它们。
既然咱们曾经制订了一个战略,咱们可以测试它在过去数据上的体现。
回测战略 定义了咱们的方便战略后,如今咱们想经常使用历史数据对其启动评价,经过回测,咱们可以在过去模拟买卖,以评价其体现。
回测并不能齐全反映战略在实践市场中的体现,由于在实时市场中,其余要素会影响报答,例如滑点。
要经常使用freqtrade启动回测,咱们可以运转以下命令,应用咱们刚刚创立的类和函数:
命令参数如下所示:
-p ETH/BTC - 买卖 ETH/BTC 对,用咱们的 BTC 换取 ETH--timerange 20200101-20201231 - 回测 2020 年的数据,从 2020 年 1 月 1 日到 2020 年 12 月 31 日。c ./user_data/config-learndatasci.json 经常使用的是本文前面定义的性能文件。--starting-balance 1 初始余额为 1 BTC。
咱们取得了一份完整的报告,其中蕴含在指定时期内一切买卖的成绩。
Freqtrade将报告分为四个局部:
每日买卖次数 - 每天平均成功的买卖数量。我理论寻觅每天大概启动十笔买卖的战略。
总利润百分比 - 以初始余额的百分比示意的利润。
最大回撤 - 最大延续盈余的金额
市场变化 - 在指定时期内市场增长/缩减的幅度。当买卖多个币对时,此目的是一切币对从指定时期开局到完结的市场变化的平均值。在咱们的例子中,ETH/BTC市场增长了24.93%。在不同的市场条件下测试战略至关关键,而不只仅是在下跌市场中。
咱们可以看到只出现了六笔买卖。这些买卖发生了5.09%的利润,初始为1 BTC,最终为1.05086506 BTC。
思考到触及的危险,这一结果并不令人印象深入。但是,这个战略十分方便,有很大的改良空间:
与买入并持有相比 仅仅持有ETH,即在测试期开局时将咱们的所有BTC转换为ETH,咱们将取得24.93%的收益(市场变化目的),但这并不是咱们理论可以预期的。咱们每次买卖只投入了10%的仓位,而不是所有。在不同的条件下测试咱们的战略十分关键——不只在市场下跌时,也在市场下跌时。
买卖更多币对:咱们只思考了以太坊,这是咱们可以买卖的数百种币之一。这种限度只准许一次性启动一笔买卖,这显然不是最优的。
经常使用更初级的战略:咱们经常使用了可以说是其中最方便的战略之一,仅经常使用方便移动平均线作为目的。参与复杂性并不必定象征着更好的性能,但咱们可以对许多目的组合启动回测,以找到最佳战略。
参数提升:目前,咱们尚未尝试提升任何超参数,例如移动平均周期、报答率和止损。
更短的时期周期:咱们只思考了每日蜡烛图,这也是为什么机器人每天只找到大概0.02笔买卖,远少于人工买卖。机器人经过更频繁的买卖和检查更具体的蜡烛图,有或者取得更多利润。
绘制结果 要经常使用freqtrade的绘图命令,咱们须要修正docker-compose.yml文件。咱们惟一须要做的就是注释掉一行并敞开注释另一行。请检查示例:
这会批示 docker-compose 拉取蕴含正确绘图库的 freqtrade Docker 镜像。
如今可以经常使用 freqtrade plot-dataframe 命令来可视化数据、目的以及买卖信号。
--indicators1 选项定义了咱们想要绘制的目的,即 fast_MA 和 slow_MA。这些目的必定在 -s 选项指定的战略内定义。
自动状况下,这会在 plot 目录中创立一个可用的 plotly html 文件:./user_data/plot/freqtrade-plot-ETH_BTC-1d.html
在图表上,可以观察机器人如何依照咱们定义的方便移动平均战略口头操作:
要了解更多plot-dataframe的性能,请运转docker-compose run --rm freqtrade plot-dataframe -h或访问关系文档。
总结
在本文中,咱们只是看到了freqtrade可以做的一小局部:
前面咱们将了解更多freqtrade的初级用法,咱们将参与更多买卖对,讨论投资报答率(ROI)和止损,并正确地定义它们。经常使用hyperopt提升咱们的战略,部署一个实时买卖机器人,以及讨论更多初级改良方法。
原文链接: