반응형

해석이 필요한 코드

    df = pyupbit.get_ohlcv(coin_ticker, interval="day", count=get_count)
    
# 이동평균선 계산
ma_dfs = []  # 이동평균 데이터를 저장할 리스트

for ma in range(3, 201):  # 3일선부터 200일선까지 반복
    ma_df = df['close'].rolling(ma).mean().rename(str(ma) + 'ma')  # 이동평균 계산
    ma_dfs.append(ma_df)  # 리스트에 추가

ma_df_combined = pd.concat(ma_dfs, axis=1)  # 여러 개의 이동평균선을 하나의 데이터프레임으로 합침
df = pd.concat([df, ma_df_combined], axis=1)  # 기존 데이터프레임(df)과 합침

df.dropna(inplace=True)  # NaN(결측치) 제거 → 가장 긴 이동평균선(200ma)까지 계산하려면 최소 200개의 데이터가 필요
df = df[:len(df)-cut_count]  # 최신 데이터 중 'cut_count' 개수만큼 제거

 

📌 예제 데이터

import pandas as pd

data = {
    'close': [100, 102, 105, 103, 107, 110, 112, 115, 118, 120]
}
df = pd.DataFrame(data)
print(df)
 

🔹 데이터프레임(df)

   close
0    100
1    102
2    105
3    103
4    107
5    110
6    112
7    115
8    118
9    120

 

📌 rolling(ma).mean() 적용 (5일 이동평균)

df['5ma'] = df['close'].rolling(5).mean()
print(df)

🔹 실행 결과

   close   5ma
0    100   NaN
1    102   NaN
2    105   NaN
3    103   NaN
4    107  103.4
5    110  105.4
6    112  107.4
7    115  109.4
8    118  112.4
9    120  115.0

 

  • 처음 4개의 값은 NaN → 이유는 5개의 데이터를 모아야 평균을 낼 수 있기 때문.
  • 이후부터는 5개 값의 평균이 계산됨.

🔥 결론

📌 이 코드가 하는 일

  1. ma일 동안의 종가 평균을 계산하여 이동평균선 생성.
  2. 새로운 컬럼 이름을 "{ma}ma" 형식으로 변경 (예: "5ma", "20ma").

 

 

📌 이동평균선 추가

ma_dfs = []
for ma in range(3, 6):  # 3~5일 이동평균선만 계산 (예제 데이터가 적어서)
    ma_df = df['close'].rolling(ma).mean().rename(str(ma) + 'ma')
    ma_dfs.append(ma_df)

ma_df_combined = pd.concat(ma_dfs, axis=1)
df = pd.concat([df, ma_df_combined], axis=1)
df.dropna(inplace=True)
df = df[:len(df)-2]  # 최신 2개 데이터 삭제

print(df)

🔹 결과 데이터프레임

    close    3ma    4ma    5ma
4    107  104.67  104.25  103.40
5    110  106.67  106.00  105.40
6    112  109.00  108.00  107.40
7    115  112.33  111.00  109.40
8    118  115.00  113.75  112.40
반응형

+ Recent posts