我正在尝试在Python中计算Demarker Indicator。下面介绍了如何计算它:
选择预定的时间段“ X”(标准值是“ 14”,尽管“ 8”或“ 9”的值往往更敏感);
计算DeMax =高–如果> 0,则为先前的高,否则为DeMax = 0;
计算DeMin =先前的低-如果> 0,则为低,否则DeMin = 0; DeM = DeMax的MA /(DeMax的MA + DeMin的MA)。
以下是我的尝试,df
是一个包含以日期为索引的开盘高低收盘价的数据框:
df['DeMax'] = df['High'] - df['High'].shift(1)
df['DeMin'] = df['Low'].shift(1)-df['Low']
# Method 1: df['DeMax'][df['DeMax'] < 0] = 0.0
# Method 2: df[df['DeMax']< 0]['DeMax'] = 0.0
如果我使用方法1,可以。但是,如果我使用Method2,则会收到警告SettingWithCopyWarning
,即使我使用像这样的复制方法df['DeMax'] = df['High'].copy() - df['High'].copy().shift(1)
也无法解决问题。
我还检查了df['DeMax'][df['DeMax'] < 0]
和df[test['DeMax']< 0]['DeMax']
是相同的熊猫系列,那么如果我尝试分配值,为什么它们的行为有所不同?
另外,如果我做这样的事情
df['DeMax'] = df['High'] - df['High'].shift(1)
df['DeMin'] = df['Low'].shift(1)-df['Low']
a = df['DeMax'][df['DeMax'] < 0]
a = 0
然后a
将为0,而不是熊猫系列,但我也希望df['DeMax'][df['DeMax'] < 0]
将为0,这不会发生,有人可以帮忙吗?谢谢。
答案 0 :(得分:0)
您正在寻找.loc
df.loc[df['DeMax'] < 0,'DeMax']=0 # it will change all value less that 0 to 0