【发布时间】:2019-07-25 12:54:42
【问题描述】:
从雅虎获得 SPY 数据后,我创建了一个收盘价通道,如下所示,最大和最小滚动窗口。列是 HC 和 HL。
我需要创建一个列(我称之为标志),当收盘价等于 HC 时显示 1,并且该值一直持续到收盘价等于 HL。此时 Flag 的值为 -1。如您所见,它非常简单,Flag 只能有两个值; 1 或 -1。
简单的公式是这样的:
- 如果关闭 == HC 则标志为 1
- 如果关闭 == HL,则标志为 -1
- 如果 Close != HC 和 Close !=HL then flag 等于变量 flag 上保存的最后一个值。
我尝试了几件事,包括下面的代码,但都没有成功。此代码的问题是显示了 0 值。而且我不知道如何通过条件使其消失:
import pandas as pd
import pandas_datareader as dr
import numpy as np
from datetime import date
df = dr.data.get_data_yahoo('SPY',start='01-01-2019',end=date.today())
df['HC'] = df['Close'].rolling(20).max()
df['LC'] = df['Close'].rolling(20).min()
df['Flag'] = [1 if (df.loc[ei, 'Close'] == df.loc[ei, 'HC']) else
-1 if (df.loc[ei, 'Close'] == df.loc[ei, 'LC']) else
0 for ei in df.index]
您可以在下面看到我的代码的蓝色结果和我需要的红色结果。
有没有简单的方法来做到这一点?如果有人可以帮助我,我将不胜感激。谢谢!
【问题讨论】:
标签: python pandas trading algorithmic-trading