Python: используйте значения предыдущих строк для определения тренда (воссоздайте l oop i, созданное в R) - PullRequest
0 голосов
/ 19 июня 2020

Я новичок в python и в анализе финансовых данных. Я хочу определить тренд акций на основе следующего:

  • Если цена закрытия выше, то скользящая средняя и скользящая средняя (MA) растут за предыдущие пять дней, тогда тренд восходящий. '
  • Если цена закрытия ниже, чем скользящая средняя и скользящая средняя (MA) снижается за предыдущие пять дней, тогда тренд «вниз»
  • Иначе «тренда» нет

Я действительно застрял в той части, где вам нужно проверить, растет ли скользящая средняя за последние пять дней. Я подумал о создании индикатора того, больше ли текущая скользящая средняя, ​​чем предыдущая, а затем посмотреть, верен ли этот индикатор в течение последних пяти дней.

Вот пример (для python) того, что я бы сделал как достичь в кадре данных:

import pandas as pd

close = [10,12,13,14,14,13,15,16,17,18]
ma = [4,5,6,7,8,9,10,10,9,9]
trend = ['no','no','no','no','no','up','up','no','no','no']

dict = {'close':close,'ma': ma, 'trend': trend}
df = pd.DataFrame(dict)

df.head(10)
close   ma  trend
0   10  4   no
1   12  5   no
2   13  6   no
3   14  7   no
4   14  8   no
5   13  9   up
6   15  10  up
7   16  10  no
8   17  9   no
9   18  9   no

В R я написал следующее l oop, которое делает именно то, что я хочу. Итак, в основном я хочу воссоздать это в Python:

for (i in 7:nrow(tesla_df)) {
  if (tesla_df$EMA9[i-5] > tesla_df$EMA9[i-6] &
      tesla_df$EMA9[i-4] > tesla_df$EMA9[i-5] &
      tesla_df$EMA9[i-3] > tesla_df$EMA9[i-4] &
      tesla_df$EMA9[i-2] > tesla_df$EMA9[i-3] &
      tesla_df$EMA9[i-1] > tesla_df$EMA9[i-2] &
      tesla_df$EMA9[i] > tesla_df$EMA9[i-1] & 
      tesla_df$Close[i] > tesla_df$EMA9[i] ) { 
      tesla_df$Trend[i] <- 'UP'
  }
  else if (tesla_df$EMA9[i-5] < tesla_df$EMA9[i-6] &
          tesla_df$EMA9[i-4] < tesla_df$EMA9[i-5] &
          tesla_df$EMA9[i-3] < tesla_df$EMA9[i-4] &
          tesla_df$EMA9[i-2] < tesla_df$EMA9[i-3] &
          tesla_df$EMA9[i-1] < tesla_df$EMA9[i-2] &
          tesla_df$EMA9[i] < tesla_df$EMA9[i-1] & 
          tesla_df$Close[i] < tesla_df$EMA9[i] ) { 
          tesla_df$Trend[i] <- 'DOWN'
  }
  else{
    tesla_df$Trend[i] <- 'NO' 
  }
}
...