Я пытаюсь вычислить индикатор демарка в Python.Ниже описано, как его рассчитать:
Выберите заранее определенный период «X» (стандартное значение «14», хотя значение «8» или «9» имеет тенденцию быть более чувствительным);
Вычислить DeMax = High - Предыдущий максимум, если> 0, в противном случае DeMax = 0;
Вычислить DeMin = Предыдущий минимум - Низкий, если> 0, в противном случае DeMin = 0;DeM = MA из DeMax / (MA из DeMax + MA из DeMin).
Моя попытка состоит в следующем, 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, что не происходит, кто-нибудь может помочь?Спасибо.