Python Finance:如何使用 macd 指标进行信号策略?

Posted

技术标签:

【中文标题】Python Finance:如何使用 macd 指标进行信号策略?【英文标题】:Python Finance: How to use macd indicator for signals strategy? 【发布时间】:2018-04-10 13:28:52 【问题描述】:

我正试图了解股票数据及其在 python 中的实现。在开始时,我在 Python stockstats 库中使用 MACD 指标。

我想知道的是,如果我有 100 个某个股票的 OHLC 条目,我如何使用 MACD 输出来产生我应该买入、卖出还是持有的信号?在图表中可以可视化,但在编程方面我如何得到这个想法?示例代码如下:

import pandas as pd
from stockstats import StockDataFrame as Sdf
from pandas_datareader import data, wb

data = pd.read_csv('data.csv')

stock = Sdf.retype(data)
print(stock.get('pdi'))

它产生如下输出:

0       0.000000e+00
1      -8.951923e-08
2       1.758777e-07
3      -3.844324e-08
4      -2.217396e-07
5      -3.893329e-07
6      -2.373225e-07
7      -5.082528e-07
8      -8.260595e-07
9      -1.099751e-06
10     -1.429675e-06
11     -1.211562e-06
12     -8.230303e-07
13     -5.163039e-07
14     -4.979626e-07
15     -4.777865e-07
16     -6.217018e-07
17     -1.145459e-06
18     -1.461550e-06
19     -1.744250e-06
20     -1.677791e-06
21     -1.820319e-06
22     -2.024092e-06
23     -1.958413e-06
24     -2.450087e-06
25     -2.805521e-06
26     -3.443776e-06
27     -4.047889e-06
28     -4.839084e-06
29     -5.208106e-06
            ...     
1410    4.856951e-06
1411    6.075773e-06
1412    9.159968e-06
1413    9.985022e-06
1414    1.069234e-05
1415    1.140865e-05
1416    1.136520e-05
1417    1.156541e-05
1418    1.065633e-05
1419    9.176497e-06
1420    9.275813e-06
1421    8.254755e-06
1422    7.583274e-06
1423    7.301820e-06
1424    6.959007e-06
1425    6.292826e-06
1426    8.411427e-06
1427    8.746155e-06
1428    1.112640e-05
1429    1.299290e-05
1430    1.398810e-05
1431    1.441297e-05
1432    1.509612e-05
1433    1.462091e-05
1434    1.436198e-05
1435    1.390849e-05
1436    1.419959e-05
1437    1.554140e-05
1438    1.884861e-05
1439    2.163656e-05
Name: macd, Length: 1440, dtype: float64

【问题讨论】:

有文件表明,如果趋势看跌或看涨,MacD 值应该是多少。我的问题是,如果我有数据,那么如何使用公式 我没有问任何秘密 - 某个指标如何响应,给出了公式.. 我没有得到文本的价值,因为我看到的其他解决方案都是视觉效果 【参考方案1】:

给你,用 cmets 解释。

import pandas as pd
from stockstats import StockDataFrame as Sdf

data   = pd.read_csv('data.csv')

stock  = Sdf.retype(data)

signal = stock['macds']        # Your signal line
macd   = stock['macd']         # The MACD that need to cross the signal line
#                                              to give you a Buy/Sell signal
listLongShort = ["No data"]    # Since you need at least two days in the for loop

for i in range(1, len(signal)):
    #                          # If the MACD crosses the signal line upward
    if macd[i] > signal[i] and macd[i - 1] <= signal[i - 1]:
        listLongShort.append("BUY")
    #                          # The other way around
    elif macd[i] < signal[i] and macd[i - 1] >= signal[i - 1]:
        listLongShort.append("SELL")
    #                          # Do nothing if not crossed
    else:
        listLongShort.append("HOLD")

stock['Advice'] = listLongShort

# The advice column means "Buy/Sell/Hold" at the end of this day or
#  at the beginning of the next day, since the market will be closed

print(stock['Advice'])

【讨论】:

非常感谢。现在我可以使用这个示例工作流来处理我自己的指标和策略。

以上是关于Python Finance:如何使用 macd 指标进行信号策略?的主要内容,如果未能解决你的问题,请参考以下文章

如何运行 O’Reilly 书 Python for Finance 的源代码

python中的mpl_finance模块导入错误

使用 Python 抓取 Yahoo Finance 的资产负债表

Yahoo! Finance财经数据PYTHON临时读取方法

Yahoo Finance API / URL 不起作用:Pandas DataReader 的 Python 修复

python 从YAHOO Finance获取股票公司摘要