22018, 1/1101 회원가입  로그인  
   해킹잘하고싶다
   http://없음
   test(backup)

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Board&no=37823 [복사]


import pyupbit
import numpy as np
import pandas as pd
import time
import datetime
import re
import os
import matplotlib.pyplot as plt

# 날짜 갯수 차이 구하기
def cal_data_different(coin, interval, day_count):
    df = pd.read_excel(os.path.join(os.getcwd(),'C:/Users/mark/Desktop/',f"{coin}.xlsx"),index_col=0)
    past = datetime.datetime.strptime(str(df.iloc[-1].name), f'%Y-%m-%d %H:%M:00')
    now = datetime.datetime.now().strftime(f'%Y-%m-%d %H:%M:00')
    now = datetime.datetime.strptime(now, f'%Y-%m-%d %H:%M:00')
    diff = str(now-past)
    n = re.sub(r'[^0-9]', '', interval, day_count)
    h, m, s = list(map(int, diff.split(":")))
    total_time_diff = (h * 60) + m + s # 분으로 환산
    total_diff_num = int(total_time_diff / int(n))

    if "day" in diff: # interval이 day이상 넘어갈 경우
        print("Create new file")
        df = pyupbit.get_ohlcv(coin, count=day_count, interval=interval)
        time.sleep(0.1)
        df = df.drop('value', axis=1)
        df = cal_indicators(df)
        df.to_excel(excel_writer="C:/Users/mark/Desktop/{coin}.xlsx")       # 엑셀 저장
        print(f"{coin} Data is saved. . . ")
        return df
    else:
        if total_diff_num > 0: # 갱신이 필요할경우
            print('Update Required.') # str(df.iloc[-1,0])
            orig_df = df.copy()
            dfs = pyupbit.get_ohlcv(coin, count=total_diff_num, interval=interval)
            dfs = dfs.drop('value', axis=1)
            df = pd.concat([df,dfs], ignore_index=False)
            cal_df = cal_indicators(df[-50:])
            df = pd.concat([orig_df,cal_df[-total_diff_num:]])
            df.to_excel(excel_writer=f'C:/Users/mark/Desktop/{coin}.xlsx')
            print(f"Success Update.({coin} update {total_diff_num} amount)")
            return df
        else: # 갱신이 필요 없을 경우
            print("No update")
            return df

# 데이터 실시간 저장하기
def save_DataFrame(coin, interval, day_count):
    coin = coin            # 코인명
    interval = interval        # 차트의 종류 (minute1,3,5,10,15,30,60), day
    day_count = day_count           # 데이터 수
    
    if os.path.exists(os.path.join(os.getcwd(),'C:/Users/mark/Desktop/',f"{coin}.xlsx")): # data가 있을 경우
        print("File exist.")
        return cal_data_different(coin, interval, day_count)

    else: # data 가 없을 경우
        print("Create new Dataframe file")
        df = pyupbit.get_ohlcv(coin, count=day_count, interval=interval)
        time.sleep(0.1)
        df = df.drop('value', axis=1)
        df = cal_indicators(df)
        df.to_excel(excel_writer=f"C:/Users/mark/Desktop/{coin}.xlsx")       # 엑셀 저장
        print(f"{coin} Data is saved. . . ")
        return df

# 현재가 조회
def get_current_price(coin):
    print(pyupbit.get_current_price(coin))
    return pyupbit.get_current_price(coin)

# 보조지표 구하기
def cal_indicators(DataFrame):
    df = DataFrame
    # Moving Average
    df['MA3'] = df['close'].rolling(window=3).mean()
    df['MA5'] = df['close'].rolling(window=5).mean()
    df['MA10'] = df['close'].rolling(window=10).mean()
    df['MA15'] = df['close'].rolling(window=15).mean()
    df['MA20'] = df['close'].rolling(window=20).mean() # 20일 평균 이동 : 중간 볼린저 밴드
    df['MA30'] = df['close'].rolling(window=30).mean()

    # RSI
    rsi_interval = 14
    df['U'] = np.where(df.diff(1)['close'] > 0, df.diff(1)['close'],0)
    df['D'] = np.where(df.diff(1)['close'] < 0, df.diff(1)['close']*(-1), 0)
    df['AU'] = df['U'].rolling(rsi_interval).mean()
    df['AD'] = df['D'].rolling(rsi_interval).mean()
    df['RSI'] = (df['AU'] / (df['AU']+df['AD'])) *100
    # df['RSI_Signal'] = df['RSI'].rolling(9).mean()
    del df['U'], df['D'], df['AU'], df['AD']

    # MACD
    df['MACD_EMA12'] = df['close'].ewm(span=12).mean()
    df['MACD_EMA26'] = df['close'].ewm(span=26).mean()
    df['MACD'] = df['MACD_EMA12'] - df['MACD_EMA26']
    df['MACD_signal'] = df['MACD'].ewm(span=9).mean()

    # Bollinger Band
    
    df['Bollinger_stddev'] = df['close'].rolling(window=20).std() # 20일 이동 표준편차
    df['Bollinger_upper'] = df['MA20'] + (df['Bollinger_stddev'] * 2) # 상단 볼린저 밴드
    df['Bollinger_lower'] = df['MA20'] - (df['Bollinger_stddev'] * 2) # 상단 볼린저 밴드
    return df



##############################################################################################

if __name__ =="__main__":
    pd.set_option('mode.chained_assignment',  None) # 경고 off

    
    print("-----------------------Main-----------------------")
    print(f'Stat time : {datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}')
    
    # 기본 셋팅
    start_time = datetime.datetime.now()
    coins = pyupbit.get_tickers(fiat="KRW-BTC") # 코인들
    interval = "day"        # 차트의 종류 (minute1,3,5,10,15,30,60), day
    day_count = 365          # 조회할 데이터 양

    # # 데이터 저장 혹은 불러오기, 데이터 가공하기
    while True:
        for coin in coins:
            df = save_DataFrame(coin,interval,day_count)
            time.sleep(1)

  Hit : 2042     Date : 2024/09/13 01:40



    
     [공지]해커스쿨 이용수칙 2021/04/11 수정판 [55] 한승재 01/05 12731
22017   시스코 라우터랑 스위치 케이블 장비 질문이에요.[1]     해킹잘하고싶다
09/22 36
22016   ㅇㅅㅇ     해킹잘하고싶다
08/15 271
22015   요즘 하고 있는 거     해킹잘하고싶다
07/13 480
22014   2위 ㅇㅅㅇ     해킹잘하고싶다
07/13 416
22013   ...     해킹잘하고싶다
03/31 799
22012   ...     해킹잘하고싶다
03/25 759
22011   15년전쯤 이 사이트 보고 꿈을 정했었는데~~~[1]     ambition65
03/20 1152
22010   으앙!!![1]     해킹잘하고싶다
02/05 923
22009   오랜만~     DarkSlayer
12/11 1110
22008   해커스쿨 옛날 BGM[1]     wkfhddl4041
11/07 1225
22007   히잉...     해킹잘하고싶다
11/02 1051
22006   바둑과 장기     해킹잘하고싶다
10/30 1126
22005   나는 언제 애인이 생기나욤...     해킹잘하고싶다
10/27 1214
22004   전국 1위     해킹잘하고싶다
10/27 1165
22003   담배 ㅋㅋ[1]     해킹잘하고싶다
10/27 1159
22002   매트릭스의 파란약을 아십니까..?     해킹잘하고싶다
10/27 1119
22001   ㅇㅇ[1]     해킹잘하고싶다
10/20 1080
22000   옵치 핵감지 프로그램좀 만들어주세요[1]     powerima
10/15 1207
21999   해킹팀원 모집[1]     koromoon
08/27 1815
1 [2][3][4][5][6][7][8][9][10]..[1101]

Copyright 1999-2026 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org