Python 金融:如何使用 MACD 指标进行信号策略?

10

我正在努力理解股票数据及其在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值在趋势看跌或看涨时应该是什么。我的问题是,如果我有数据,如何使用公式? - Volatil3
我并没有询问任何机密 - 给出了某些指标的公式,我不知道如何在文本中获得值,因为我看到的其他解决方案都是视觉效果。 - Volatil3
1个回答

28

这里有需要注释的内容,请看注释。

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'])

1
非常感谢。现在我可以使用这个示例工作流来开发自己的指标和策略了。 - Volatil3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接