def collect_dayprice_everyday(): tickers = pybithumb.get_tickers() name_dic = {'name': []} name_list = [] for ticker in tickers: df = pybithumb.get_ohlcv(ticker) df = df.reset_index() flag = datetime(2019, 1, 1) if df['time'].iloc[0] < flag: df = df.set_index('time') df.to_csv("./coin/" + ticker + ".csv") name = ticker + ".csv" name_list.append(name) time.sleep(0.1) else: print(ticker, df['time'].iloc[0]) continue name_dic['name'] = name_list df = pd.DataFrame(name_dic) df.to_csv("tickerlist.csv")
def __init__(self): super().__init__() self.setupUi(self) # Widget Initialize self.pushButton_saveExcel.setEnabled(False) self.comboBox_coinName.addItems(pybithumb.get_tickers()) #Event Handler Connect self.comboBox_coinName.currentIndexChanged.connect( self.loadCoinHistory) self.comboBox_periodType.currentIndexChanged.connect( self.loadCoinHistory) self.pushButton_simulate.clicked.connect(self.simulate) self.pushButton_saveExcel.clicked.connect(self.saveExcel) self.loadCoinHistory()
def __init__(self): super().__init__() self.setupUi(self) self.timer=QTimer(self) self.timer.start(1000) self.coin = "" self.comboBox.addItems(pybithumb.get_tickers()) self.comboBox.currentIndexChanged.connect(self.changeCoin) self.pastPrice = pybithumb.get_current_price(self.coin) self.btnStart.clicked.connect(self.btn_start) self.btnStop.clicked.connect(self.btn_stop)
def strategy1(self): ''' title : 변동성 돌파전략 ''' now = datetime.datetime.now() # 당일 청산 (23:50:00 ~ 23:50:10) if sell_time1 < now < sell_time2: try_sell(tickers) # 각 가상화폐에 대해 매도 시도 holdings = {ticker: True for ticker in tickers} # 당일에는 더 이상 매수되지 않도록 time.sleep(10) # 새로운 거래일에 대한 데이터 셋업 (00:01:00 ~ 00:01:10) if setup_time1 < now < setup_time2: tickers = pybithumb.get_tickers() # 티커 목록 갱신 try_sell(tickers) # 매도 되지 않은 코인에 대해서 한 번 더 매도 시도 noises = cal_noise(tickers) targets = inquiry_targets(tickers) # 목표가 갱신 mas = inquiry_moving_average(tickers) # 이동평균 갱신 budget_per_coin = cal_budget() # 코인별 최대 배팅 금액 계산 sell_time1, sell_time2 = make_sell_times(now) # 당일 매도 시간 갱신 setup_time1, setup_time2 = make_setup_times(now) # 다음 거래일 셋업 시간 갱신 holdings = {ticker: False for ticker in tickers} # 모든 코인에 대한 보유 상태 초기화 high_prices = {ticker: 0 for ticker in tickers} # 코인별 당일 고가 초기화 time.sleep(10) # 현재가 조회 prices = inquiry_cur_prices(tickers) update_high_prices(tickers, high_prices, prices) print_status(now, tickers, prices, targets, noises, mas, high_prices) # 매수 if prices is not None: try_buy(tickers, prices, targets, noises, mas, budget_per_coin, holdings, high_prices) # 익절 try_profit_cut(tickers, prices, targets, holdings) time.sleep(INTERVAL)
def update_info(self): ''' title : 전략 업데이트(매일 자정 실행) ''' ## 필드변수 초기화## now = datetime.datetime.now() sell_time1, sell_time2 = make_sell_times(now) setup_time1, setup_time2 = make_setup_times(now) tickers = pybithumb.get_tickers() noises = cal_noise(tickers) targets = inquiry_targets(tickers) mas = inquiry_moving_average(tickers) budget_per_coin = cal_budget() holdings = {ticker: False for ticker in tickers} high_prices = inquiry_high_prices(tickers)
def get_up_market(): tickers = pybithumb.get_tickers() start_time = datetime.datetime.now() for ticker in tickers : df = pybithumb.get_ohlcv(ticker) ma5 = df['close'].rolling(5).mean() price = pybithumb.get_current_price(ticker) last_ma5 = ma5[-2] if price > last_ma5 : print(ticker, "상승장") else: print(ticker, '하락장') end_time = datetime.datetime.now() print("소요시간:[",end_time - start_time, "]")
def get_coin_dayprice(): try: if not os.path.exists("coin"): os.makedirs("coin") except OSError: print("Error: Creating directory") dont_buy = ['KMD','ADX','LBC','IGNIS','DMT','EMC2','TSHP','LAMB','EDR','PXL','PICA','RDD','RINGX'\ ,'VITE','ITAM','SYS','NXT','BFT','NCASH','FSN','PI','RCN','PRO','ANT','BASIC','CON','BTT','NEO'] tickers = pybithumb.get_tickers() name_dic = {'name': []} name_list = [] for ticker in tickers: df = pybithumb.get_ohlcv(ticker) df = df.reset_index() flag = datetime(2021, 1, 1) if df['time'].iloc[0] < flag: if ticker in dont_buy: continue df = df.set_index('time') df.to_csv("./coin/" + ticker + ".csv") name = ticker + ".csv" name_list.append(name) time.sleep(0.1) else: print(ticker, df['time'].iloc[0]) continue name_dic['name'] = name_list df = pd.DataFrame(name_dic) df.to_csv("tickerlist.csv")
def __init__(self): interval_list = [ '24h', '12h', '6h', '1h', '30m', '10m', '5m', '3m', '1m' ] tickers = pybithumb.get_tickers() if tickers != None: print(tickers) for ticker in tickers: try: if ticker == "CON": ticker = "CON_" os.mkdir('./data/' + str(ticker)) else: os.mkdir('./data/' + str(ticker)) except: print("Folder is exist!") retry_cnt = 1 for interval in interval_list: self.get_candlestick(ticker, interval, retry_cnt) else: print("Bithumb API Error : Cannot fetch tickers")
def parse_detail(self): tickers = pybithumb.get_tickers() for ticker in tickers: # price = pybithumb.get_current_price(ticker) # 현재가 조회 detail = pybithumb.get_market_detail( ticker) # 저가, 고가, 평균 거래 금액, 거래량 print(ticker, detail) orderbook = pybithumb.get_orderbook( ticker) # 시점, 거래화폐, 코인명, 매도호가, 매수호가 print( orderbook["order_currency"] + " / " + orderbook["payment_currency"], datetime.datetime.fromtimestamp( int(orderbook["timestamp"]) / 1000)) for bid in orderbook['bids']: print("매수호가: ", bid['price'], "매수잔량: ", bid['quantity']) for ask in orderbook['asks']: print("매도호가: ", bid['price'], "매도잔량: ", bid['quantity']) time.sleep(0.1)
def get_tickers(self): """ 사용중인 ticker리스트를 출력 - caching json object """ cache = self.cache d = cache.get(CACHE_get_tickers) if d: return json.loads(d) else: tickers = pybithumb.get_tickers() # upbit를 통해서 교차 검증 tickers = list( filter( lambda x: requests.get( f"https://static.upbit.com/logos/{x}.png").status_code == 200, tickers, )) print("tickers list : ", tickers) # tickers list print("tickers len : ", len(tickers)) # 97 장 형성 cache.setex(CACHE_get_tickers, CACHE_get_tickers_TIME, json.dumps(tickers)) return tickers
import pybithumb tickers = pybithumb.get_tickers() print(tickers) print(len(tickers)) print(type(tickers))
print( "{:<6} {:0.2f} 목표가: {:>8.0f} 이동평균: {:>8.0f} 현재가: {:>8.0f} 고가: {:>8.0f} 수익률: {:>3.1f}" .format(ticker, noise, target, ma, price, high_price, gain)) except: logger.info("print_status error") pass #---------------------------------------------------------------------------------------------------------------------- # 매매 알고리즘 시작 #--------------------------------------------------------------------------------------------------------------------- now = datetime.datetime.now() # 현재 시간 조회 sell_time1, sell_time2 = make_sell_times(now) # 초기 매도 시간 설정 setup_time1, setup_time2 = make_setup_times(now) # 초기 셋업 시간 설정 tickers = pybithumb.get_tickers() # 티커 리스트 얻기 noises = cal_noise(tickers) targets = inquiry_targets(tickers) # 코인별 목표가 계산 mas = inquiry_moving_average(tickers) # 코인별로 5일 이동평균 계산 budget_per_coin = cal_budget() # 코인별 최대 배팅 금액 계산 holdings = {ticker: False for ticker in tickers} # 보유 상태 초기화 high_prices = inquiry_high_prices(tickers) # 코인별 당일 고가 저장 while True: now = datetime.datetime.now() # 당일 청산 (23:50:00 ~ 23:50:10) if sell_time1 < now < sell_time2: try_sell(tickers) # 각 가상화폐에 대해 매도 시도
import pybithumb import time con_key = "" sec_key = "" #객체 생성 bithumb = pybithumb.Bithumb(con_key, sec_key) #티커의 잔고 얻기 for ticker in pybithumb.get_tickers(): balance = bithumb.get_balance(ticker) print(ticker, ":", balance) time.sleep(0.1) ## 매수 #지정가 매수 order = bithumb.buy_limit_order("BTC", 3900000, 개수) print(order) #비트코인은 최소 0.001개를 주문해야 함. 빗썸은 소수점 넷째 자리까지의 주문만 가능 #'호가 단위' 1,000원 단위로 비트코인의 가격이 결정 #시장가 매수 order = bithumb.buy_market_order("BTC", 개수) print(order) #본인 계좌의 보유 원화를 조회하고, 최우선 매도 호가 금액을 얻어와 매수할 수 있는 비트코인 개수를 계산 krw = bithumb.get_balance("BTC")[2] orderbook = pybithumb.get_orderbook("BTC") asks = orderbook['asks']
class Strategy: print("안녕") """ Strategy 'Strategy' : log class 'Date' : 2021.03.29 'Author' : 최푸름 'func' : 전략수립 클래스 - 1. 변동성 돌파 전략 - 2. 실시간 기울기 파악매매법(작성중) """ ############# 필드 상수 ##################################################################################### INTERVAL = 3 # 매수 시도 interval (1초 기본) DEBUG = False # True: 매매 API 호출 안됨, False: 실제로 매매 API 호출 COIN_NUMS = 10 # 분산 투자 코인 개수 (자산/COIN_NUMS를 각 코인에 투자) LARRY_K = 0.5 BALANCE = 0.5 # 자산의 50%만 투자 50%는 현금 보유 GAIN = 0.3 # 30% 이상 이익시 50% 물량 익절 DUAL_NOISE_LIMIT1 = 0.75 # 듀얼 노이즈가 0.75 이하인 종목만 투자 ############################################################################################################# MIN_ORDERS = { "BTC": 0.001, "ETH": 0.01, "DASH": 0.01, "LTC": 0.01, "ETC": 0.1, "XRP": 10, "BCH": 0.001, "XMR": 0.01, "ZEC": 0.01, "QTUM": 0.1, "BTG": 0.1, "EOS": 0.1, "ICX": 1, "VEN": 1, "TRX": 100, "ELF": 10, "MITH": 10, "MCO": 10, "OMG": 0.1, "KNC": 1, "GNT": 10, "HSR": 1, "ZIL": 100, "ETHOS": 1, "PAY": 1, "WAX": 10, "POWR": 10, "LRC": 10, "GTO": 10, "STEEM": 10, "STRAT": 1, "ZRX": 1, "REP": 0.1, "AE": 1, "XEM": 10, "SNT": 10, "ADA": 10 } #변수# logger = Logger.Logger() now = datetime.datetime.now() # 현재 시간 조회 sell_time1, sell_time2 = make_sell_times(now) # 초기 매도 시간 설정 setup_time1, setup_time2 = make_setup_times(now) # 초기 셋업 시간 설정 tickers = pybithumb.get_tickers() # 티커 리스트 얻기 targets = inquiry_targets(tickers) # 코인별 목표가 계산 mas = inquiry_moving_average(tickers) # 코인별로 5일 이동평균 계산 budget_per_coin = cal_budget() # 코인별 최대 배팅 금액 계산 portfolio = select_portfolio(tickers) # 듀얼 노이즈 전략 기반으로 portfolio 선정 holdings = {ticker: False for ticker in tickers} # 보유 상태 초기화 high_prices = inquiry_high_prices(tickers) # 코인별 당일 고가 저장 def strategy1(self): ''' title : 변동성 돌파전략 ''' now = datetime.datetime.now() # 당일 청산 (23:50:00 ~ 23:50:10) if sell_time1 < now < sell_time2: try_sell(tickers) # 각 가상화폐에 대해 매도 시도 holdings = {ticker: True for ticker in tickers} # 당일에는 더 이상 매수되지 않도록 time.sleep(10) # 새로운 거래일에 대한 데이터 셋업 (00:01:00 ~ 00:01:10) if setup_time1 < now < setup_time2: tickers = pybithumb.get_tickers() # 티커 목록 갱신 try_sell(tickers) # 매도 되지 않은 코인에 대해서 한 번 더 매도 시도 noises = cal_noise(tickers) targets = inquiry_targets(tickers) # 목표가 갱신 mas = inquiry_moving_average(tickers) # 이동평균 갱신 budget_per_coin = cal_budget() # 코인별 최대 배팅 금액 계산 sell_time1, sell_time2 = make_sell_times(now) # 당일 매도 시간 갱신 setup_time1, setup_time2 = make_setup_times(now) # 다음 거래일 셋업 시간 갱신 holdings = {ticker: False for ticker in tickers} # 모든 코인에 대한 보유 상태 초기화 high_prices = {ticker: 0 for ticker in tickers} # 코인별 당일 고가 초기화 time.sleep(10) # 현재가 조회 prices = inquiry_cur_prices(tickers) update_high_prices(tickers, high_prices, prices) print_status(now, tickers, prices, targets, noises, mas, high_prices) # 매수 if prices is not None: try_buy(tickers, prices, targets, noises, mas, budget_per_coin, holdings, high_prices) # 익절 try_profit_cut(tickers, prices, targets, holdings) time.sleep(INTERVAL) def update_info(self): ''' title : 전략 업데이트(매일 자정 실행) ''' ## 필드변수 초기화## now = datetime.datetime.now() sell_time1, sell_time2 = make_sell_times(now) setup_time1, setup_time2 = make_setup_times(now) tickers = pybithumb.get_tickers() noises = cal_noise(tickers) targets = inquiry_targets(tickers) mas = inquiry_moving_average(tickers) budget_per_coin = cal_budget() holdings = {ticker: False for ticker in tickers} high_prices = inquiry_high_prices(tickers)
# ------ VALUE SET ------# Volume_Ratio = 5 CoinVolume = 20 Resetcnt = 1 Coins = None # ----- GUI SET ------# app = QApplication(sys.argv) while True: # ------- INPUT COIN -------# if Resetcnt == 1: Coinlist = pybithumb.get_tickers() # 새로 찍어줘야함 ( 새로운 코인 탄생 ) Fluclist = [] # 새로 찍을때만 초기화 while True: try: for Coin in Coinlist: tickerinfo = pybithumb.get_market_detail(Coin) data = tickerinfo['data'] fluctate = data['fluctate_rate_24H'] Fluclist.append(fluctate) time.sleep(1 / 90) break except Exception as e: Fluclist.append(None) print(e)
# ch05/05_01.py import pybithumb tickers = pybithumb.get_tickers() # ticker 목록 얻기 print(tickers)