在公众号「python风控模型」里回复关键字:学习资料

机器学习是计算密集型的,因为算法不是确定性的,因此必须随着时间的推移不断调整。然而,技术指标要快得多,因为方程式没有改变。因此,这提高了他们用于实时交易的能力。

什么是 RSI?

要创建使用 RSI 的程序,我们必须首先了解 RSI 指标。RSI 是相对强弱指数的缩写。它是一个动量指标,使用价格变化的幅度来评估证券是否超买或超卖。

如果 RS一世 值超过70,证券被认为是超买,如果值低于30,则被认为是超卖。超买是指买入造成的泡沫可能很快就会破灭,因此价格会下跌。这创造了一个强大的切入点。

然而,好的做法是仅当 RSI 值与超买线相交时才下卖单,因为这是一种更保守的方法。至少可以猜测 RSI 何时会达到最高点。

概念:

本程序试图使用 talib(技术分析)库来实现 RSI 线与超卖超买线的交点。该程序的大部分内容并非来自对指标的编程(因为它是在库中创建的),而是实现了如何使用超卖和超买区域进行交易。

import yfinance 
import talib 
from matplotlib import pyplot as plt

这些是该计划的先决条件。Yfinance 用于下载股票数据,talib 用于计算指标值。Matplotlib当然是将数据绘制成图形。

数据 = yfinance.download('NFLX','2016-1-1','2020-1-1') 
rsi = talib.RSI(data["Close"])

此脚本访问数据并根据以下两个方程计算 rsi 值:

RSIstep1 =100−[100/(1+平均损失/平均收益 )]

RSIstep2 =100−[100/(1+平均平均损失∗13+当前损失/之前的平均收益∗13+当前收益 ) ]

fig = plt.figure()
fig.set_size_inches((25, 18))
ax_rsi = fig.add_axes((0, 0.24, 1, 0.2))
ax_rsi.plot(data.index, [70] * len(data.index), label="overbought")
ax_rsi.plot(data.index, [30] * len(data.index), label="oversold")
ax_rsi.plot(data.index, rsi, label="rsi")
ax_rsi.plot(data["Close"])
ax_rsi.legend()

该图显示了所有超买和超卖区域,以及为记录的股票收盘价的每个值计算的 RSI 值。这提供了股票数据的良好可视化

这是结果图。随着时间的推移,我们可以看到 RSI 值在不同部分之间波动。RSI 的好处在于它是相对的。这意味着信号的强度与实际值无关,而是与过去值的关系。

缺失的步骤:

通常,文章到此为止。他们在给出股票交易程序的初步代码后结束。有必要更进一步,真正评估股票交易计划,基于该计划的盈利能力。这就是为什么我要交出程序。

section = None
sections = []
for i in range(len(rsi)): 
    if rsi[i] < 30:
        section = 'oversold'
    elif rsi[i] > 70:
        section = 'overbought'
    else:
        section = None
    sections.append(section)

这个脚本记录了每个点落入的部分。它要么处于超买、超卖或无区域,即在两条线之间。

trades = []
for i in range(1,len(sections)):
    trade = None
    if sections[i-1] == 'oversold' and sections[i] == None:
        trade = True
    if sections[i-1] == 'overbought' and sections[i] == None:
        trade = False
    trades.append(trade)

该脚本集成了 RSI 交易的基本策略。交易策略是当价值离开超买和超卖部分时,它进行适当的交易。例如,如果它离开超卖部分,则进行买入交易。如果它离开超买部分,则进行卖出交易。

acp = data['Close'][len(data['Close'])-len(trades):].values
profit = 0
qty = 10
for i in range(len(acp)-1):
    true_trade = None
    if acp[i] < acp[i+1]:
        true_trade = True
    elif acp[i] > acp[i+1]:
        true_trade = False
    if trades[i] == true_trade:
        profit += abs(acp[i+1] - acp[i]) * qty
    elif trades[i] != true_trade:
        profit += -abs(acp[i+1] - acp[i]) * qty

此脚本使用程序进行的交易来计算每笔交易的利润或亏损。这给出了对程序的最佳评估,因为它准确地针对要查找的变量。qty 变量计算购买了多少股。

运行程序后,计算的利润为:

Profit : $58.3

结论:

事实上,考虑到风险回报率,58.3 美元的利润实际上并不是一个很好的投资。有很多方法可以改进程序:

调整耐心变量

这个变量是在 RSI 值之后多久进行交易。调整这个值,找到一个模式,并优化它以获得更好的结果。

2. 找到最好的公司

该算法对哪种股票最有效?在不同的公司上测试此程序以进行评估。

再找中国恒大5年数据为例,这是中国恒大近5年的K线图

相应的RSI绘图如下,我们可以看到一些交易数据在oversold超卖线下,意味着以后可能有上涨空间。

提醒一下,股票历史数据是滞后信息,我们要盯紧公司自身经营状况,然后决定此公司是否有投资价值,公司舆情信息先于股票大盘数据,会反应到股票大盘上。虽然中国恒大有些数据低于oversold,但此公司最近舆情负面消息太多,建议大家抄底需要谨慎。除非政府有救助意向,否则中国恒大股票会长期继续阴跌。

Python 的 RSI 算法交易就介绍到这里,欢迎各位同学报名《呆瓜半小时入门python数据分析》,学习更多相关知识 。

更多推荐

python rsi_使用python与rsi进行算法交易