Python中如何利用交叉指标算法进行加密货币量化交易

发布时间:2021-10-09 15:31:48 作者:柒染
来源:亿速云 阅读:187

Python中如何利用交叉指标算法进行加密货币量化交易,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

在这个教程中,我们将学习如何利用交叉指标预测加密货币市场的买入/卖出信号,并在教程结尾提供了完整的Python代码,在市场历史数据上利用此算法可以实现三倍的比特币收益回报率。

1、基础知识:黄金交叉 vs. 死亡交叉

如果你有金融背景,就知道黄金交叉(golden Cross)和死亡交叉(Death Cross)这两个指标是衍生自滑动平均算法,也被称为交叉指标(cross indicator)。这两个交叉指标都是使用以下公式对特定时间段内的市场收盘价计算平均值:

Python中如何利用交叉指标算法进行加密货币量化交易

该概念组合两个滑动平均值(短期和长期)以获得加密货币趋势。当短期移动均线超过或回顾长期移动均线时,将出现买入或卖出信号。

从数学上讲,如果你选择5个周期的短期移动均线和20个周期的长期移动均线,我们将通过以下条件 获得买入信号:

Python中如何利用交叉指标算法进行加密货币量化交易

MA(5)计算如下:

Python中如何利用交叉指标算法进行加密货币量化交易

MA(20)计算如下:

Python中如何利用交叉指标算法进行加密货币量化交易

CPrice对应于收盘价值。例如,目前比特币的价格为49,670美元,t表示时间段定义(在本文结尾的视频中对此有更多解释)。这些交叉指标是方程的一部分,可帮助检测所研究的加密货币的全球趋势。这些CI(交叉指标)在全球范围内被多个交易者和基金广泛使用,以定义支撑力量、阻力水平、 止损和目标并了解潜在趋势。

现在我们已经涵盖了一些背景知识,让我们开始测试,看看它们如何帮助预测加密货币市场。

2、使用的软件栈

在继续下面的教程之前,请确保你已经安装了Python3以及以下软件包:

可以使用pip安装上述软件包,例如:

pip install yfinance
pip install plotly

3、数据管道和建模

现在我们可以定义数据处理流程了,主要包含3个不同的步骤:

Python中如何利用交叉指标算法进行加密货币量化交易

  1. 使用Yahoo Finance API查询实时加密货币的数据

  2. 定义一个时间段,为我们要计算的数据创建新列,然后每秒更新这些值。

  3. 实时绘图,并检查我们的信号是否准确。

在本文中,我不会过多地介绍有关代码和API的细节,你可以在下面的文章中 了解 如何用Python获取实时的加密货币市场数据。现在我们可以开始编码了!

4、导入软件包

第一步将包括导入必要的软件包。使用以下代码行导入以前安装的软件包:

# Raw Package
import numpy as np
import pandas as pd

#Data Source
import yfinance as yf

#Data viz
import plotly.graph_objs as go

现在已经导入了库,接下来可以导入我们的加密货币数据了。

5、获取实时市场数据

现在,所需的不同软件包已上传。我们将以BTC-USD交易对为例,通过Yahoo Finance API设置导入。

可以扩展需要的法币以及加密货币选项。例如,如果你来自印度或加拿大,则可以使用INR或CAD,你也可以设置是否需要Ripple或Ethereum数据。

让我们回到API结构。

调用Yahoo Finance API时需要按顺序传入三个参数:

在我们的示例中,交易对代码(参数1)将为BTC-USD对。此外,在此示例中,我们将选择最后7天作为时间段(参数2)。并设置一个间隔(参数3)的90分钟。

要调用数据,必须使用以下结构:

Python中如何利用交叉指标算法进行加密货币量化交易

在继续之前,我将介绍有关第三个参数(interval)的一些细节。

6、可用的时间间隔

这里我想快速介绍一下可以使用yahoo finance API设置的不同间隔。

下面详细列出了各种可能的间隔:

Python中如何利用交叉指标算法进行加密货币量化交易

现在我们已经定义了三个参数,让我们执行查询并检查输出:

data = yf.download(tickers='BTC-USD',period = '8d', interval = '90m')

下面是输出结果:

Python中如何利用交叉指标算法进行加密货币量化交易

现在,我们已经下载并存储了数据,可以继续并定义华东平均线以及买卖信号。

7、算法实现

现在,我们的实时数据已经下载并存储在名为data的变量中。下一步包括计算我们的移动平均线 并设置买入和卖出信号。

我们将需要创建以下计算字段:

为此,我们将使用Python中包含的滚动函数来获取n个最新周期的平均值。关于MA(5),我们将在最近的5个90分钟周期内应用我们的策略。这意味着我们将计算最近7小时30分钟(5次乘以90分钟)的平均收盘价。

Python中如何利用交叉指标算法进行加密货币量化交易

类似的对于MA(20),要计算的是20个而不是5个90分钟周期的平均值。Python代码如下:

#Moving average using Python Rolling function
data['MA5'] = data['Close'].rolling(5).mean()
data['MA20'] = data['Close'].rolling(20).mean()

上面的代码执行后,将为数据框创建2个新列,如下所示:

Python中如何利用交叉指标算法进行加密货币量化交易

好了,下面我们就可以测试策略了。

8、实时绘图

我们计划的最后一步是绘制数据并检查是否可以预测市场走势。在下图中,我将绿色标记为良好的预测,将黑色预测为错误的预测:

Python中如何利用交叉指标算法进行加密货币量化交易

9、量化交易Python代码

完整的Python代码如下:

# Raw Package
import numpy as np
import pandas as pd
#Data Source
import yfinance as yf
#Data viz
import plotly.graph_objs as go

#Importing market data
data = yf.download(tickers='BTC-USD',period = '8d', interval = '90m')

#Adding Moving average calculated field
data['MA5'] = data['Close'].rolling(5).mean()
data['MA20'] = data['Close'].rolling(20).mean()

#declare figure
fig = go.Figure()

#Candlestick
fig.add_trace(go.Candlestick(x=data.index,
                open=data['Open'],
                high=data['High'],
                low=data['Low'],
                close=data['Close'], name = 'market data'))

#Add Moving average on the graph
fig.add_trace(go.Scatter(x=data.index, y= data['MA20'],line=dict(color='blue', width=1.5), name = 'Long Term MA'))
fig.add_trace(go.Scatter(x=data.index, y= data['MA5'],line=dict(color='orange', width=1.5), name = 'Short Term MA'))

#Updating X axis and graph
# X-Axes
fig.update_xaxes(
    rangeslider_visible=True,
    rangeselector=dict(
        buttons=list([
            dict(count=3, label="3d", step="days", stepmode="backward"),
            dict(count=5, label="5d", step="days", stepmode="backward"),
            dict(count=7, label="WTD", step="days", stepmode="todate"),
            dict(step="all")
        ])
    )
)

#Show
fig.show()

所有交易都不完美,有时我们往往会滞后于进入或离开市场,但在比特币稳定的时期,黄金交叉策略已成为提高我们利润的有用策略。利用已有的历史数据进行简单计算后,我们的算法可以在一周内获得7.1%的回报,而同期的比特币交易回报率则稳定在1.7%左右。

关于Python中如何利用交叉指标算法进行加密货币量化交易问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

推荐阅读:
  1. 怎么在python中利用K-means聚类算法对图像进行分割
  2. 怎么在Java中利用多线程实现交叉打印

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:如何理解MySQL中的page页

下一篇:Python上手的体验是怎样的

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》