如何使用Python提高比特币的回报率
交叉指标
在金融背景下,黄金交叉和死亡交叉指标是一个衍生的的移动平均线,也被称为交叉指标。
例如移动平均线,这两个交叉指标中的任何一个将通过使用以下公式对特定时间段内的市场收盘价进行平均来计算。
在以上公式中,n对应于使用的周期数
该概念将包括组合两个移动平均值(短期和长期)以获得加密货币趋势。当短期移动均线超过或回顾长期移动均线时,将出现买入或卖出信号。
从数学上讲,如果您选择5个周期的短期移动平均线和20个周期的长期移动平均线,则我们将通过以下条件获得买入信号:
MA(5)和MA(20)分别等于:
CPrice对应于收盘价值
这些交叉指标是方程式的一部分,可帮助检测所研究的加密货币的全球趋势。这些CI(交叉指标)在全球范围内被多个交易者和基金广泛使用,以定义支撑,阻力位 , 止损和目标并了解潜在趋势。
现在我们已经涵盖了一些背景知识,让我们开始测试,看看它们如何帮助预测市场。如果要以相同的速度编写代码,则需要事先安装一些配置和程序包。
先决条件
在开始之前,您需要在计算机上安装Python 3版本和以下软件包:
Pandas
NumPy
Yfinance
Plotly(这个您可以自主选择安装与否)
如果尚未安装这些软件包中的任何一个,则可以使用pip命令,如下所示。
pip install yfinancepip install plotly
一旦确保安装了以下软件包,我们就可以从我们的数据管道和数据模型开始。
数据管道和建模
现在,我们已经确认以上软件包已安装在我们的机器中,我们可以定义数据处理了。
数据模型将分为3个不同的步骤:
我们将使用Yahoo Finance API查询实时加密货币的数据。
定义一个时间段,为我们的计算字段创建新列,然后每秒更新这些值。
实时绘制此图,并检查我们的信号是否准确。
现在我们可以开始编码了!(如果您已经有使用Python的经验,则可以跳到第二步。)
第一步:导入所需软件包
您将开始使用以下代码行导入以前安装的软件包:
# Raw Packageimport numpy as npimport pandas as pd#Data Sourceimport yfinance as yf#Data vizimport plotly.graph_objs as go
上面的行是查询numpy,pandas,yfinance和要导入的图
第二步:获取实时市场数据
现在,所需的不同软件包已被上传。我们将以BTC-USD对为例,通过Yahoo Finance API设置导入,可以扩展加密货币选择的列表以及货币。
例如,如果您来自印度或加拿大,则可以使用INR或CAD;如果您来自印度或加拿大,则可以使用INR或CAD。两者都将正常运行,以及您是否需要Ripple或Ethereum数据。
第三步:回到我们的API结构
Yahoo Finance API将按此顺序需要三个强制性参数:
股票代码(1)
开始日期+结束日期或期间(2)
间隔(3)
对于我们的情况,股票代码(参数1)将为BTC-USD对。此外,在此示例中,我们将选择最后7天作为时间段(参数2)。并设置一个间隔(参数3)的90分钟。
要调用数据,您将必须使用以下结构:
上面描述了获取我们感兴趣的数据的结构
快速查找可能的时间间隔
我想快速介绍一下您可以使用yahoo finance API设置的不同间隔。
下面详细列出了可能需要的间隔可能性:
上面列出了可以选择的不同间隔。
现在我们已经定义了三个参数,让我们执行查询并检查输出:
data = yf.download(tickers='BTC-USD',period = '8d', interval = '90m')
上面的行将向Yahoo Finance API请求BTC-USD。
这是您必须获得的输出:
每隔90分钟输出一次市场
现在,我们已经下载并存储了数据,我们可以继续并定义移动平均线,买卖信号。部署我们的算法
现在,我们的实时数据已经下载并存储在名为“ data”的变量中。下一步包括计算我们的移动平均线并设置我们的买入和卖出信号。
我们将需要创建以下计算字段:
马(5)
马(20)
为此,我们将使用Python中包含的滚动函数来获取n个最新周期的平均值。关于MA(5),我们将在过去90分钟的最后5分钟内应用我们的策略。这意味着我们将计算最近7小时30分钟(5次乘以90分钟)的平均收盘价。
对于MA(20),我们将使用滚动功能,但我们将计算20个最近周期的平均值,而不是计算5个最近的90分钟周期。
因此,让我们在Python上进行编码:
#Moving average using Python Rolling functiondata['MA5'] = data['Close'].rolling(5).mean()data['MA20'] = data['Close'].rolling(20).mean()
上面的代码行使用Python滚动功能获取移动平均值
上面的代码一旦执行,将为您的数据框创建2个新列,如下所示:
现在您已经定义了波段,必须创建2个额外的列。
我们终于可以部署我们的策略并对其进行测试。在下图中,我将绿色标记为良好的预测,将黑色预测为错误的预测。
带有买卖信号的预期输出
现在您可以在家开发它了:
# Raw Packageimport numpy as npimport pandas as pd#Data Sourceimport yfinance as yf#Data vizimport plotly.graph_objs as go#Importing market datadata = yf.download(tickers='BTC-USD',period = '8d', interval = '90m')#Adding Moving average calculated fielddata['MA5'] = data['Close'].rolling(5).mean()data['MA20'] = data['Close'].rolling(20).mean()#declare figurefig = go.Figure()#Candlestickfig.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 graphfig.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-Axesfig.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") ]) ))#Showfig.show()
结论
所以交易并不都完美,有时我们往往会滞后于进入或离开市场,但在比特币稳定的时期,探索实时抵抗和支持水平的概念非常有趣,黄金交叉策略已成为提高我们利润的有用策略。
经过简短的计算并使用我的个人经纪人的手续费,我们将在一周内获得7,1%的回报,而同期的比特币稳定在1,7%左右。
微信掃描關注公眾號,及時掌握新動向
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表比特範的觀點或立場
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表比特範的觀點或立場