data = 비트코인 1분봉 ohlcv 데이터

볼린저밴드

def bollinger_band(data, w = 20, k = 2):
    data = data.copy()
    mbb = data['close'].rolling(w).mean()
    ubb = mbb + k * data['close'].rolling(w).std()
    lbb = mbb - k * data['close'].rolling(w).std()
    data['width'] = ubb - lbb

    # 볼린저 밴드에서 종가 위치
    data['bollinger_band'] = (data['close'] - lbb) / data['width']

    # 볼린저 밴드 넓이 증가량
    data['bollinger_band_ratio'] = np.zeros(len(data))
    data.loc[1:, 'bollinger_band_ratio']= (data['width'][1:].values - data['width'][:-1].values) / data['width'][:-1].values

    data.drop(['width'], axis = 1, inplace = True)

    return data

MACD

def cal_MACD(data, num_long=12, num_short=26, num_signal=9):
    data = data.copy()
    ema_long = data['close'].ewm(span=num_long, min_periods=num_long - 1).mean()
    ema_short = data['close'].ewm(span=num_short, min_periods=num_short - 1).mean()
    MACD = ema_long - ema_short
    MACD_signal = MACD.ewm(span=num_signal, min_periods=num_signal - 1).mean()
    data['MACD_diff'] = MACD - MACD_signal

    # MACD cross
    data['MACD_cross'] = pd.Series(np.where(data['MACD_diff'] >= 0, 1, -1), index=data.index)
    # 지난 MACD 대비 MACD 비율
    data['MACD_lastMACD_ratio'] = np.zeros(len(data))
    data.loc[1:, 'MACD_lastMACD_ratio'] = (data['MACD_diff'][1:].values - data['MACD_diff'][:-1].values) / data[
                                                                                                               'MACD_diff'][
                                                                                                           :-1].values

    data.drop('MACD_diff', axis=1, inplace=True)
    
    return data

RSI

def cal_RSI(data, period = 9):
    data = data.copy()

    U = np.where(data['close'].diff(1) > 0, data['close'].diff(1), 0)
    D = np.where(data['close'].diff(1) < 0, data['close'].diff(1) * (-1), 0)

    AU = pd.Series(U, index = data.index).rolling(window=period, min_periods=period).mean()
    AD = pd.Series(D, index = data.index).rolling(window=period, min_periods=period).mean()
    RS = AU / AD
    data['RSI'] = 1 - 1 / (1 + RS)

    return data

Stochastic Oscilator

def cal_stochastic_oscillator(data, n = 5):
    data = data.copy()
    size = len(data)
    temp=[]
    for i in range(size):
        if i >= n-1:
            tempUp = data['close'][i] - min(data['low'][i-n+1:i+1])
            tempDown = max(data['high'][i-n+1:i+1]) -  min(data['low'][i-n+1:i+1])
            if tempDown == 0:
                tempDown = 0.001
            temp.append(tempUp / tempDown)
        else:
            temp.append(0) #n보다 작은 초기값은 0 설정
    data['sto_K'] = pd.Series(temp,  index=data.index)
    data['sto_D'] = data['sto_K'].rolling(3).mean()
    return data

OBV

def cal_OBV(data, n=9):
    data = data.copy()
    OBV = []
    OBV.append(data['volume'][0])
    for i in range(1, len(data)):
        if data['close'][i] > data['close'][i - 1]:
            OBV.append(OBV[-1] + data['volume'][i])
        elif data['close'][i] < data['close'][i - 1]:
            OBV.append(OBV[-1] - data['volume'][i])
        else:
            OBV.append(OBV[-1])
    OBV = pd.Series(OBV, index=data.index)
    data['OBV_ewm'] = OBV.ewm(n).mean()

    # OBV signal
    data['OBV_cross'] = pd.Series(np.where(OBV >= data['OBV_ewm'], 1,-1), index = data.index)

    # 지난 OBV_ewm 대비 OBV_ewm 비율
    data['OBV_lastOBV_ratio'] = np.zeros(len(data))
    data.loc[1:, 'OBV_lastOBV_ratio'] = (data['OBV_ewm'][1:].values - data['OBV_ewm'][:-1].values) / data['OBV_ewm'][
                                                                                                     :-1].values

    data.drop('OBV_ewm', axis=1, inplace=True)

    return data

Log Return

def cal_log_return(data):
    data = data.copy()
    data['log_return'] = np.zeros(len(data))
    data['log_return'] = np.log(data['close'] / data['close'].shift(1))
    return data

'기타' 카테고리의 다른 글

비트코인 분봉 데이터 가져오기  (0) 2021.06.17
Anaconda, Jupyter notebook 가상환경 만들기  (0) 2020.06.15
python openslide 설치법  (0) 2020.06.15
import pyupbit
import numpy as np
import pandas as pd
import tqdm
import time
import datetime
import argparse

class MakeDataset:
    def __init__(self, ticker, interval, frm, to = None):
        self.ticker = ticker
        self.interval = interval
        self.frm = frm
        self.to = to
        self.dataset = None
        
    def get_dataset(self):
        self.dataset = self.get_ohlcv_continue(self.ticker, self.interval, self.frm, self.to)

        #print('add variables..')
        #self.dataset = add_variables(self.dataset)

        print('done!')
        
        return self.dataset
    
    def get_ohlcv_continue(self, ticker, interval, frm, to = None):
    
        """
    
        ticker(str) : KRW-BTC
        interval : minute1, minute3, minute5, minute10, minute15, minute60
        frm(str) :
    
        """
    
        if isinstance(frm, str):
            frm = pd.to_datetime(frm).to_pydatetime()
        
        if to is not None:
            if isinstance(to, str):
                to = pd.to_datetime(to).to_pydatetime()
        else:
            to = datetime.datetime.now().replace(microsecond=0)
    
    
        if interval == "minute1":
            count = 60
            date_list = list(pd.date_range(start = frm, end = to, freq = 'H').to_pydatetime())
        elif interval == "minute3":
            count = 60
            date_list = list(pd.date_range(start = frm, end = to, freq = '3H').to_pydatetime())
        elif interval == "minute5":
            count = 60
            date_list = list(pd.date_range(start = frm, end = to, freq = '5H').to_pydatetime())
        elif interval == "minute10":
            count = 144
            date_list = list(pd.date_range(start = frm, end = to, freq = 'D').to_pydatetime())
        elif interval == "minute15":
            count = 96
            date_list = list(pd.date_range(start = frm, end = to, freq = 'D').to_pydatetime())
        elif interval == "minute30":
            count = 48
            date_list = list(pd.date_range(start = frm, end = to, freq = 'D').to_pydatetime())
        elif interval == "minute60":
            count = 24
            date_list = list(pd.date_range(start = frm, end = to, freq = 'D').to_pydatetime())

        dataframes = []
        for date in tqdm.tqdm(date_list[1:]):
            try:
                df = pyupbit.get_ohlcv(ticker, interval, count = count, to = date)
                dataframes.append(df)
                time.sleep(0.1)
            except:
                pass
        
        data = pd.concat(dataframes)
        # 중복 인덱스 제거
        data = data.reset_index().drop_duplicates(subset='index', keep='first').set_index('index')
        data.sort_index(inplace=True)

        return data


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--ticker', type = str, default = 'KRW-ETH')
    parser.add_argument('--interval', type = str, default = 'minute3')
    parser.add_argument('--frm', type = str, default = '2021-01-01 00:00:00')
    parser.add_argument('--to', type = str, default = None)
    args = parser.parse_args()

    print(f'{args.ticker} data is being obtained and processed')
    mk = MakeDataset(args.ticker, args.interval, frm = args.frm, to = args.to)
    data = mk.get_dataset()
    data.to_csv("./data/{}.csv".format(args.ticker))
    print('save completed')

'기타' 카테고리의 다른 글

주식/비트코인 보조지표들 계산 python  (0) 2021.06.17
Anaconda, Jupyter notebook 가상환경 만들기  (0) 2020.06.15
python openslide 설치법  (0) 2020.06.15

1. 가상환경 생성

Anaconda Prompt에서 다음 명령을 입력하여

conda create -n pytorch python=3.7

"pytorch"라는 이름의 python 3.7 환경(env)를 만든다

 

 

 

2. 생성된 가상환경 리스트 확인

conda info --envs

 

 

3. 가상환경 활성화 시키기

방금 만든 가상활경을 활성화하기 위해서 (conda) activate 가상환경을 입력한다

activate pytorch

가상환경 "pytorch"로 바뀌었다

 

 

4. 주피터 노트북에 가상환경 추가하기

활성화시킨 가상환경에 jupyter notebook을 설치한다

pip install jupyter

설치가 완료되면 ipython kernel install --name "가상환경" --user 을 입력해 주피터 노트북에 가상환경을 추가

ipython kernel install --name "pytorch" --user

주피터 노트북을 실행

jupyter notebook에 가상환경 "pytorch"가 생겼다

 

 

5. 주피터 노트북에서 생성된 가상환경 커널 삭제하기

Anaconda prompt에서 jupyter kernelspec list 를 입력하여 주피터 노트북에 생성된 커널 목록을 확인한다

jupyter kernelspec remove "kernel name" 를 입력하여 불필요한 가상환경 커널을 삭제한다

주피터에서 "tensorflow2" 커널이 삭제되었다

 

 

5. 가상환경 삭제하기

"pytorch"라는 이름의 가상환경을 삭제한다

conda remove -n pytorch --all

 

'기타' 카테고리의 다른 글

주식/비트코인 보조지표들 계산 python  (0) 2021.06.17
비트코인 분봉 데이터 가져오기  (0) 2021.06.17
python openslide 설치법  (0) 2020.06.15

1. openslide python 1.1.1과 Windows Binaries 2017-11-22 64bit를 다운로드하고 C:\에 압축을 푼다.

https://openslide.org/download/

 

Downloading OpenSlide

Downloading OpenSlide OpenSlide and its official language bindings are available under the terms of the GNU Lesser General Public License, version 2.1. Source OpenSlide (stable API) 3.4.1 2015-04-20 tar.gz tar.xz 3.4.0 2014-01-25 tar.gz tar.xz 3.3.3 2013-0

openslide.org

openslide python interface 1.1.1 2016-06-11 tar.gz 다운로드
windows binaries 2017-11-22 64-bit 다운로드
문서에 두 압축파일을 풀어놓았다

 

2. Microsoft Visual Studio 다운로드한다.

https://visualstudio.microsoft.com/ko/downloads/

 

Windows 및 Mac용 Visual Studio 2019 다운로드

Visual Studio Community, Professional 및 Enterprise를 다운로드하세요. 지금 Visual Studio IDE, Code 또는 Mac을 무료로 사용해 보세요.

visualstudio.microsoft.com

커뮤니티 버전 다운로드

 

Visual C++ 빌드 도구 선택, 옵션에서 위에서부터 3개 선택, 설치

 

 

Microsoft Visual C++설치하지 않고 openslide setup.py 실행시 아래와 같은 에러가 발생한다. 

microsoft visual c++ 14.0 is required. get it with "build tools for visual studio":visualstudio.microsoft.com/downloads/

 

 

 

 

 

3. Anaconda Prompt에서 cd ~Documents\openslide-python-1.1.1 를 입력해서 압축푼 주소로 이동하고 python setup.py install 입력하여 setup.py를 실행하여 openslide를 설치한다.

cd C:\openslide-python-1.1.1
python setup.py install

openslide가 설치되었다!

 

 

3. "C:\openslide-win64-20171122\bin" 폴더 주소를 환경변수에 추가

윈도우 검색창에 "고급 시스템 설정" -> 환경변수 -> 시스템 변수에서 Path를 선택하고 편집 클릭

 

4. 주피터 노트북 실행하여 PIL 라이브러리를 설치한다

pip install pillow

설치하지 않고 openslide를 import하면 PIL을 필요하다는 에러가 발생한다

 ModuleNotFoundError: No module named 'PIL'

 

5. 주피터 노트북에서 openslide를 import 하기

환경변수에 windows binaries가 있는 bin 폴더를 추가한다

import os
os.environ['PATH'] = "C:\\openslide-win64-20171122\\bin" + ";" + os.environ['PATH']

현재 working directory를 openslide-python-1.1.1 폴더로 바꾼다

os.chdir('C:/Users/KIMSUNGHUN/Documents/openslide-python-1.1.1')
print(os.getcwd())

openslide를 import 한고 TCGA의 GBM histopathology 이미지 확장자인 .svs 파일을 불러온다

import openslide
path = "C:/data\TCGA_GBM/raw files/TCGA-02-0003-01Z-00-DX1.6171b175-0972-4e84-9997-2f1ce75f4407.svs"
osr = openslide.OpenSlide(path)
print(osr.dimensions)

openslide로 TCGA-GBM histopathology 이미지 파일인 .svs를 불러왔다

 

자세한 OpenSlide의 사용법은 OpenSlide 홈페이지 참고

https://openslide.org/api/python/

 

OpenSlide Python — OpenSlide Python 1.1.1 documentation

OpenSlide Python OpenSlide Python is a Python interface to the OpenSlide library. OpenSlide is a C library that provides a simple interface for reading whole-slide images, also known as virtual slides, which are high-resolution images used in digital patho

openslide.org

 

+ Recent posts