#pandas #numpy #matplotlib
Вопрос:
У меня есть фрейм данных под названием df['x']
, который я использовал Matplotlib для построения графика, как показано ниже. Фрейм данных имеет индекс даты и времени, и он колеблется между 0 и выше 0. Есть также две фиолетовые линии y=2 и y=5.
Мне интересно найти даты в индексе, когда синяя линия пересекает фиолетовую линию y=2 при движении вверх. Однако с одной оговоркой, если синяя линия пересекает фиолетовую линию, поднимающуюся во второй раз, прежде чем достигнет 0, я бы не хотел, чтобы она учитывалась. Поэтому я ищу систему, которая возвращает мне 6 дат. Спасибо за любую помощь.
Ответ №1:
В итоге я перепробовал кучу разных вещей. Поначалу я действительно не был уверен, как подойти к этой проблеме, потому что я довольно новичок в кодировании. Проведя небольшое исследование, я нашел решение, которое работает, применяя функцию для создания нового столбца, а затем находя индекс областей столбца, соответствующих определенным критериям.
#Making a function to apply to df
trade_pos = ''
dip = ''
def apply_function(df):
global trade_pos
global dip
if df.Drawdown == 0 and trade_pos == 'open':
trade_pos = 'closed'
dip = 'false'
return 'Exit'
elif df.Drawdown == 0:
trade_pos = 'closed'
dip = 'false'
return 0
elif df.Drawdown >= 2 and df.Drawdown < 5 and trade_pos == 'closed' and dip != 'true':
trade_pos = 'open'
return 'Entry'
elif df.Drawdown >=5 and trade_pos == 'open':
trade_pos = 'closed'
dip = 'true'
return 'Exit'
else:
return 0
#Applying function to df
df['Strategy'] = df.apply(apply_function, axis=1)
Finding dates of crossover with caveats
entry = df[df['Strategy'] == 'Entry']
entry = list(entry.index)
#We finish with a list of dates that meet the criteria of the original post
Я надеюсь, что это поможет кому-нибудь еще с подобной проблемой.