def bull_market(self, ticker, num): dayData = pybithumb.get_ohlcv(ticker) ma = dayData["close"].rolling(num).mean() last_ma = ma[-2] price = pybithumb.get_current_price(ticker) state = None if price > last_ma: state = "상승장" else: state = "하락장" return price, last_ma, state
def get_target_price(ticker): df = pybithumb.get_ohlcv("XRP") yesterday = df.iloc[-2] today_open = yesterday['close'] yesterday_high = yesterday['high'] yesterday_low = yesterday['low'] target = today_open + (yesterday_high - yesterday_low) * 0.5 target = int(target) return target
def get_ror(k=0.5): df = pybithumb.get_ohlcv("BTC") df['range'] = (df['high'] - df['low']) * k df['target'] = df['open'] + df['range'].shift(1) fee = 0.0032 df['ror'] = np.where(df['high'] > df['target'], df['close'] / df['target'] - fee, 1) ror = df['ror'].cumprod()[-2] return ror
def get_ma2_min(Coin): df = pybithumb.get_ohlcv(Coin, 'minute1') df['MA20'] = df['close'].rolling(20).mean() period = 5 slope, intercept, r_value, p_value, stderr = stats.linregress( [i for i in range(period)], df.MA20[-period:]) return slope
def get_market_infos(self, ticker): df = pybithumb.get_ohlcv(ticker) ma5 = df['close'].rolling(window=5).mean() price = pybithumb.get_current_price(ticker) last_ma5 = ma5[-2] state = None if price > last_ma5: state = '상승장' else: state = '하락장' return price, last_ma5, state
def get_target_price(ticker): df = pybithumb.get_ohlcv("BTC") # 비트코인의 일봉 정보를 dataframe 객체로 얻어온다. yesterday = df.iloc[ -2] # 끝에서 두 번째 행 (전일 데이터)를 가져온다. yesterday에는 전일 데이터가 Series 객체로 바인딩된다. today_open = yesterday['close'] # 당일 시가를 얻어온다. yesterday_high = yesterday['high'] # 전일 고가를 얻어온다. yesterday_low = yesterday['low'] # 전일 저가를 얻어온다. target = today_open + ( yesterday_high - yesterday_low ) * 0.5 # 래리 윌리엄스 변동성 돌파 전략의 목표가를 계산한다. 목표가 = (당일 시가 + 레인지 x 0.5) return target
def inquiry_high_prices(tickers): try: high_prices = {} for ticker in tickers: df = pybithumb.get_ohlcv(ticker, interval="hour") cur_hour = df.iloc[-1] cur_hour_high = cur_hour['high'] high_prices[ticker] = cur_hour_high return high_prices except: return {ticker: 0 for ticker in tickers}
def cal_target(): try: df = pybithumb.get_ohlcv("BTC") yesterday = df.iloc[-2] today_open = yesterday['close'] yesterday_high = yesterday['high'] yesterday_low = yesterday['low'] target = today_open + (yesterday_high - yesterday_low) * 0.5 return target except: return None
def loadCoinHistory(self): try: coin = self.comboBox_coinName.currentText() period = self.comboBox_periodType.currentText() self.df = pybithumb.get_ohlcv(coin, period) self.dateTimeEdit_start.setDateTime(self.df.index[1]) self.dateTimeEdit_end.setDateTime(self.df.index[len(self.df) - 1]) except Exception as err: QMessageBox.information(self, "Error", str(err))
def inquiry_high_prices(tickers): try: high_prices = {} for ticker in tickers: df = pybithumb.get_ohlcv(ticker) today = df.iloc[-1] today_high = today['high'] high_prices[ticker] = today_high return high_prices except: logger.info("inquiry_high_prices error") return {ticker: 0 for ticker in tickers}
def get_market_infos(self, ticker): df = pybithumb.get_ohlcv(ticker) ma5 = df['close'].rolling(window=5).mean() ma20 = df['close'].rolling(window=20).mean() volume = df['volume'][-1] # 전일 이동 편균 last_ma5 = ma5[-2] last_ma20 = ma20[-2] price = pybithumb.get_current_price(ticker) #all_data = pybithumb.get_current_price("ALL") # for ticker, data in all.items() return price, volume, last_ma5, last_ma20
def get_target_price(ticker): df = pybithumb.get_ohlcv(ticker) # -1 today yesterday = df.iloc[-2] today_open = yesterday['close'] yesterday_high = yesterday['high'] yesterday_low = yesterday['low'] #가격 변동폭 : 전일 고가 - 전일 저가 #매수 기준 :당일 시간에서 (변동폭 * 0.5) 이상 상승하면 매수 #매도 기준: 당일 종가에 매도 target = today_open + (yesterday_high - yesterday_low) * 0.5 return target
def getATR(currency, interval): df = pybithumb.get_ohlcv(currency, interval) close = df['close'][-15:-1] high = df['high'][-15:-1] low = df['low'][-15:-1] TRs = [] TRs.append(high[0] - low[0]) for i in range(1, 14): TRs.append( max(abs(high[i] - low[i]), abs(high[i] - close[i - 1]), abs(low[i] - close[i - 1]))) return sum(TRs) / len(TRs)
def get_market_infos(self, ticker): try: df = pybithumb.get_ohlcv(ticker) ma5 = df['close'].rolling(window=5).mean() ma20 = df['close'].rolling(window=20).mean() # 전일 이동 편균 last_ma5 = ma5[-2] last_ma20 = ma20[-2] price = pybithumb.get_current_price(ticker) return price, last_ma5, last_ma20 except: None, None, None
def get_ror(ticker): df = pybithumb.get_ohlcv(ticker, interval="day") df = df["2019"] df["변동성"] = (df['high'] - df['low']) * 0.5 df["목표가"] = df["open"] + df["변동성"].shift(1) df["수익률"] = np.where(df['high'] > df['목표가'], df['목표가'] / df['close'], 1) df["기간수익률"] = df["수익률"].cumprod() return df["기간수익률"].iloc[-1]
def get_market_infos(self, ticker): # 나머지 데이터 추가하기 df = pybithumb.get_ohlcv(ticker) ma5 = df['close'].rolling(window=5).mean() last_ma5 = ma5[-2] price = pybithumb.get_current_price(ticker) state = None if price > last_ma5: state = "상승장" else: state = "하락장" return price, last_ma5, state
def bull_market(self, ticker): ohlcv_btc = pybithumb.get_ohlcv(ticker, "KRW", "day") ma5 = ohlcv_btc['close'].rolling(window=5).mean() # 5일 이동평균선 연산. price = pybithumb.get_current_price(ticker) last_ma5 = ma5[-2] state = None if price > last_ma5: state = "상승장" else: state = "하락장" return price, last_ma5, state
def bull_market(ticker): df = pybithumb.get_ohlcv(ticker) # 티커의 과거 시세 가져오기 ma5 = df['close'].rolling(window=5).mean() # close(종가)를 5개씩 그룹화하여 평균을 낸다. price = pybithumb.get_current_price(ticker) # 티커의 현재가 가져오기 last_ma5 = ma5[-2] # 끝에서 두 번째 위치한 전일 이동평균을 last_ma5 변수에 바인딩한다. if price > last_ma5: print("TICKER : {}, 상승장, 현재가격 : {}, 전일이동평균 : {}".format( ticker, price, last_ma5)) return True else: print("TICKER : {}, 하락장, 현재가격 : {}, 전일이동평균 : {}".format( ticker, price, last_ma5)) return False
def get_market_infos(self, ticker): try: df = pybithumb.get_ohlcv(ticker) ma5 = df['close'].rolling(window=5).mean() ma5_last = ma5[-2] price = pybithumb.get_current_price(ticker) if price > ma5_last: status = "상승장" else: status = "하락장" return price, ma5_last, status except: return None, None, None
def cal_moving_average(ticker="BTC", window=5): ''' 5일 이동평균을 계산 :param ticker: :param window: :return: ''' try: df = pybithumb.get_ohlcv(ticker) close = df['close'] ma_series = close.rolling(window=window).mean() yesterday_ma = ma_series[-2] return yesterday_ma except: return None
def get_hpr(ticker): df = pybithumb.get_ohlcv(ticker) df = df['2018'] df['ma5'] = df['close'].rolling(window=5).mean().shift(1) df['range'] = (df['high'] - df['low']) * 0.5 df['target'] = df['open'] + df['range'].shift(1) df['bull'] = df['open'] > df['ma5'] fee = 0.0032 df['ror'] = np.where((df['high'] > df['target']) & df['bull'], df['close'] / df['target'] - fee, 1) df['hpr'] = df['ror'].cumprod() df['dd'] = (df['hpr'].cummax() - df['hpr']) / df['hpr'].cummax() * 100 return df['hpr'][-2]
def get_ror(k): df = pybithumb.get_ohlcv("BTC") # df = df['2019'] df['range'] = (df['high'] - df['low']) * k df['target'] = df['open'] + df['range'].shift(1) fee = 0.0032 # 최고가가 타겟가 보다 높은 건 매수가 일어난 것이고, 일어난 매수의 수익률은 종가/타겟가의 비율. 매수가 안일어나면 1 df['ror'] = np.where(df['high'] > df['target'], df['close'] / df['target'] - fee, 1) # df.to_excel('btc.xlsx') #각 거래의 수익 비율들의 곱은 전체 수익률이 됨. ror = df['ror'].cumprod()[-2] return ror
def cal_target(ticker): ''' 각 코인에 대한 목표가 저장 :param ticker: 티커, 'BTC' :return: 목표가 ''' try: df = pybithumb.get_ohlcv(ticker) yesterday = df.iloc[-2] today_open = yesterday['close'] yesterday_high = yesterday['high'] yesterday_low = yesterday['low'] target = today_open + (yesterday_high - yesterday_low) * LARRY_K return target except: return None
def get_ror(k=0.8): df = pybithumb.get_ohlcv("BTC") df['range'] = (df['high'] - df['low']) * k df['target'] = df['open'] + df['range'].shift(1) df['ror'] = np.where(df['high'] > df['target'], df['close'] / df['target'] - FEE, 1) # df = df['2020'] 2020년의 수익률을 알아보기 위한 코드 # 거래일 마다의 기간 수익률 df['hpr'] = df['ror'].cumprod() df['dd'] = (df['hpr'].cummax() - df['hpr']) / df['hpr'].cummax() * 100 MDD = df['dd'].max() print(MDD) return df
def get_target_price(tickers): for k, v in tickers.items(): # 매수 목표 가격 만들기 df = pybithumb.get_ohlcv(k) yesterday = df.iloc[-2] today_open = yesterday['close'] yesterday_high = yesterday['high'] yesterday_low = yesterday['low'] target_price = round(today_open + (yesterday_high - yesterday_low) * K, 1) # 이동평균 값 만들기 close = df['close'] ema13 = close.ewm(span=13).mean()[-2] # 매수 목표 가격, 지수이동평균 값, 24시간 가격 변동률, 매수 여부, 20% 이상 가격 상승 시 메세지 전송 여부 target_prices[k] = [target_price, ema13, True, True] return target_prices
def get_market_infos(self, ticker): try: df = pybithumb.get_ohlcv(ticker) ma5 = df['close'].rolling(window=5).mean() price = pybithumb.get_current_price(ticker) last_ma5 = ma5[-2] state = None if price > last_ma5: state = "상승장" else: state = "하락장" return (price, last_ma5, state) except: return (None, None, None)
def cal_multiple_moving_average(ticker="BTC"): ''' 3일 ~ 20일의 18개의 이동 평균값을 계산 :param ticker: 티커 :return: ''' try: df = pybithumb.get_ohlcv(ticker) close = df['close'] multiple_ma = [] for window in range(3, 21): ma_series = close.rolling(window=window).mean() ma = ma_series[-2] multiple_ma.append(ma) return multiple_ma except: return None
def cal_target(ticker): ''' 각 코인에 대한 목표가 계산 :param ticker: 코인에 대한 티커 :return: ''' try: df = pybithumb.get_ohlcv(ticker) yesterday = df.iloc[-2] today = df.iloc[-1] today_open = today['open'] yesterday_high = yesterday['high'] yesterday_low = yesterday['low'] target = today_open + (yesterday_high - yesterday_low) * LARRY_K return target except: logger.info("cal_target error {}".format(ticker)) return None
def cal_target(ticker): ''' 각 코인에 대한 목표가 저장 :param ticker: 티커, 'BTC' :return: 목표가 ''' try: df = pybithumb.get_ohlcv(ticker, interval="hour") one_hour_ago = df.iloc[-2] cur_hour = df.iloc[-1] cur_hour_open = cur_hour['open'] one_hour_ago_high = one_hour_ago['high'] one_hour_ago_low = one_hour_ago['low'] target = cur_hour_open + (one_hour_ago_high - one_hour_ago_low) * LARRY_K return target except: return None
def cal_target(ticker, kvalues): ''' 각 코인에 대한 목표가 저장 :param ticker: 티커, 'BTC' :return: 목표가 ''' try: df = pybithumb.get_ohlcv(ticker) k = cal_adaptive_k(df) kvalues[ticker] = k yesterday = df.iloc[-2] today_open = yesterday['close'] yesterday_high = yesterday['high'] yesterday_low = yesterday['low'] target = today_open + (yesterday_high - yesterday_low) * k return target except: return None