특정 코인이 어떠한 코인과 유사하게 움직이는지 알고 싶을 때 사용하기 위해 파이썬으로 간단한 프로그램을 만들어 보았다.
이 프로그램의 조건
1. 바이낸스 USDT 마켓 그래프를 기준으로 한다.
- EX) BTC/USDT, XRP/USDT, ETH/USDT .... 등등 대략 110종류의 코인
- 차트 예시 : https://www.binance.com/en/futures/BTCUSDT
2. 최대 500개의 캔들을 조회한다.
- 만약 일봉 데이터라면 500일, 분봉 데이터라면 500분
파이썬을 사용할 수 있는 사람이라면 포스팅 하단에 있는 코드를 복사해서 사용하면 되고,
파이썬을 사용하지 못하는 사람은 아래 링크를 눌러 사용할 수 있다.
https://colab.research.google.com/drive/1iaLps0todkd-wpe7WPRIy-pIrxsu6eat?usp=sharing
위의 링크에 접속한 후, ( *구글 아이디에 로그인 되어 있어야 한다. )
coin = 'XRP'
time_set = '1d'
의 부분을 원하는 셋팅으로 수정한 뒤에 CTRL + F9 키를 누르면 실행이 된다.
ex) 비트코인을 3분봉으로 조회하고 싶다면, coin ='BTC' 으로 변경, time_set = '3m' 으로 변경.
CTRL + F9 키를 누르고 나면 " ~ 구글에서 작성하지 않은~ " 이라는 경고문구가 뜬다.
-> 확인을 눌러주면 실행이 된다.
실행을 하면 해당 프로그램을 실행하기 위해 필요한 것들을 준비하는 단계를 거치는데, 그냥 기다리고 있으면 자동으로 다음 단계로 넘어간다.
프로그램 실행이 완료되면 최하단에 위와 같이 출력이 된다.
XRP와 가장 유사한 그래프는 XMR이라는 결과를 얻을 수 있었다.
참조한 코드
https://satisficer.tistory.com/276
전체 코드
#pip install pandas
#pip install python-binance
#pip install ccxt
#pip install datetime
import time
import pandas as pd
from binance.client import Client
import ccxt
import datetime
coin = 'XRP'
time_set = '1d'
# minute - 1m, 3m, 5m, 15m, 30m
# hour - 1h, 2h, 4h, 6h, 8h, 12h
# day - 1d, 3d
coin = coin +'USDT'
# print(coin)
symbols = []
binance = ccxt.binance()
markets = binance.fetch_tickers()
for x in markets.keys() :
symbol = x
symbol2 = x.replace("/","")
if '/USDT' in symbol : symbols.append(symbol2)
def find_coin(coin):
temp = []
i=0
for x in total_db.values.tolist() :
x.insert(0,total_db.index[i])
i = i+1
temp.append(x)
# print(temp)
result2 = []
for row in temp:
if coin in row[0]:
for row2 in row[1:500]:
try: result2.append(float(row2) / float(row[2]))
except: pass
# print(result2)
min = 999999
for idx0, row in enumerate(temp[1:]):
if coin not in row[0]:
if row[0][-7:-1].count('0') < 5:
result3 = []
try:
for idx1 , row2 in enumerate(row[1:500]):
result3.append(abs(result2[idx1] - float(row2)/float(row[2]) ))
except:pass
if(sum(result3) != 0 and sum(result3) < min ):
min = sum(result3)
final_data = result3
final_idx = idx0
# print(result3)
like_coin = temp[final_idx+1][0]
return like_coin
def data_view(ticker,time_interval):
data = binance.fetch_ohlcv(ticker,time_interval)
df = pd.DataFrame(data)
df.columns = (['Datetime','Open','High','Low','Close','Volume'])
def parse_dates(ts):
return datetime.datetime.fromtimestamp(ts/1000.0)
df['Date'] = df['Datetime'].apply(parse_dates)
df = df.drop(['Open', 'High', 'Low','Volume'], axis='columns')
return df
total_db = data_view('BTCUSDT',time_set).drop(['Close'], axis='columns')
for symbol in symbols:
try :
df = data_view(symbol,time_set)
if df.iloc[0]['Datetime'] == total_db.iloc[0]['Datetime'] :
total_db[symbol] = df['Close']
else : pass
except : pass
time.sleep(0.05)
total_db = total_db.T
# print(total_db)
like_coin = find_coin(coin)
print('=============================================================================================================')
print("###",coin.replace("USDT","")," shows the most similar price fluctuations to ",like_coin.replace("USDT",""),"###")
print('=============================================================================================================')