안녕하세요!
코인 시장에서 모멘텀 효과를 이용하는 전략을 파이썬으로 구현해보는 시간을 가져보겠습니다.
코인(암호화폐) 시장은 특히 단기적으로 모멘텀이 강하게 작용합니다. 단기적인 가격 상승은 더 많은 관심을 끌고, 추가적인 매수를 유도하여 상승세를 유지하는 경우가 많습니다.
이번 시간에는 최근 7일간 가장 상승률이 높은 코인을 추출하는 파이썬 프로그램을 작성해 보겠습니다.
이 프로그램은 “CoinMarketCap API를 활용해 시가총액 상위 100위 코인 중 7일 상승률 상위 10개와 해당 코인의 주요 태그를 출력하는 프로그램”입니다.
[소스 코드]
import requests
import pandas as pd
from tabulate import tabulate # 깔끔한 표 출력을 위한 라이브러리
# CoinMarketCap API 설정
API_KEY = 'your_api_key_here' # 발급받은 API 키 입력
BASE_URL = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'
# API 호출 함수
def fetch_coin_data():
params = {
'start': 1, # 시작 순위
'limit': 100, # 시가총액 상위 100개 코인
'convert': 'USD', # USD 기준 데이터
}
headers = {
'Accepts': 'application/json',
'X-CMC_PRO_API_KEY': API_KEY,
}
response = requests.get(BASE_URL, headers=headers, params=params)
if response.status_code == 200:
return response.json()
else:
print(f"Failed to fetch data. Status code: {response.status_code}")
return None
# 데이터 처리 함수
def process_coin_data(data):
coins = []
for coin in data['data']:
name = coin['name']
symbol = coin['symbol']
percent_change_7d = coin['quote']['USD'].get('percent_change_7d', 0) # 7일간 변동률
# 태그 정보에서 상위 5개만 추출
tags = ', '.join(coin.get('tags', [])[:5]) # 태그 리스트에서 최대 5개만 선택
coins.append({
"Name": name,
"Symbol": symbol,
"7-Day Change (%)": percent_change_7d,
"Tags": tags
})
# 데이터프레임으로 정리
df = pd.DataFrame(coins)
# 7일 상승률 기준으로 내림차순 정렬 후 상위 10개 반환
top_10 = df.sort_values(by='7-Day Change (%)', ascending=False).head(10)
return top_10
# 메인 함수
def main():
# Pandas 출력 옵션 설정
pd.options.display.max_colwidth = None # 문자열이 잘리지 않도록 설정
data = fetch_coin_data()
if not data:
return
top_10_coins = process_coin_data(data)
print("Top 10 Coins with the Highest 7-day Growth (Including Top 5 Tags):")
print(tabulate(top_10_coins, headers='keys', tablefmt='grid', showindex=False)) # 표 형태로 출력
if __name__ == "__main__":
main()
[코드의 구조 및 세부 설명]
1. fetch_coin_data() 함수
• 이 함수는 CoinMarketCap API에 요청을 보내 데이터를 가져옵니다.
• API 요청 구성:
• start=1: 시가총액 기준 1위부터 데이터를 가져옴.
• limit=100: 상위 100개의 암호화폐 데이터를 요청.
• convert=USD: 데이터를 USD 기준으로 가져옴.
• 헤더:
• X-CMC_PRO_API_KEY: API 키를 전달하여 인증.
• HTTP 요청 처리:
• requests.get()을 사용하여 GET 요청.
• 성공 시 JSON 데이터를 반환하고, 실패 시 오류 메시지와 상태 코드를 출력.
2. process_coin_data() 함수
• 이 함수는 API로 가져온 JSON 데이터를 파싱하여 필요한 정보를 추출하고 정리합니다.
• 작업 단계:
1. 데이터 추출:
• name: 암호화폐 이름 (예: Bitcoin, Ethereum).
• symbol: 암호화폐 심볼 (예: BTC, ETH).
• percent_change_7d: 7일 동안의 가격 변화율(퍼센트).
• tags: 태그 리스트에서 최대 5개만 추출하여 문자열로 변환.
2. 정렬:
• 7일 상승률(percent_change_7d) 기준으로 내림차순 정렬.
• 상위 10개의 코인만 선택.
3. 데이터프레임 정리:
• 데이터를 Pandas의 DataFrame으로 변환하여 정리.
3. main() 함수
• 프로그램의 주요 로직을 담당하며, 위 두 함수를 호출하고 결과를 처리합니다.
• 단계별 작업:
1. fetch_coin_data()를 호출하여 API에서 데이터를 가져옵니다.
2. 가져온 데이터를 process_coin_data()로 처리하여 상위 10개의 코인 정보를 추출합니다.
3. 표 출력:
• tabulate 라이브러리를 사용해 데이터를 표 형태로 출력.
• tablefmt=’grid’ 스타일로 깔끔한 표 형식으로 표시.
[추가 라이브러리 설명]
1. requests:
• HTTP 요청을 보내 API 데이터를 가져오는 데 사용.
• GET 요청과 헤더, 파라미터 전달이 간단하게 처리됨.
2. pandas:
• 데이터를 DataFrame으로 변환하여 정렬, 필터링, 조작 등을 편리하게 처리.
3. tabulate:
• 데이터를 보기 좋게 표 형태로 출력.
• 다양한 스타일 옵션을 제공 (grid, fancy_grid, plain, 등).
[코드 흐름]
1. API 호출:
• fetch_coin_data()가 CoinMarketCap API에 요청을 보내 시가총액 상위 100개의 코인 데이터를 가져옵니다.
2. 데이터 파싱 및 정리:
• process_coin_data()가 JSON 데이터를 파싱하여, 코인 이름, 심볼, 7일 상승률, 상위 5개 태그 정보를 추출.
• 7일 상승률 기준으로 내림차순 정렬 후 상위 10개의 데이터를 선택.
3. 결과 출력:
• tabulate를 사용하여 상위 10개의 코인 정보를 보기 좋게 출력.
• 각 코인의 태그는 최대 5개까지만 표시.
[출력 결과(예시)]
Top 10 Coins with the Highest 7-day Growth (Including Top 5 Tags):
+-------------+--------+-------------------+--------------------------------------------+
| Name | Symbol | 7-Day Change (%) | Tags |
+-------------+--------+-------------------+--------------------------------------------+
| Bitcoin | BTC | 12.5 | store-of-value, pow, currency |
| Ethereum | ETH | 11.3 | smart-contracts, pos, enterprise, defi |
| Solana | SOL | 10.9 | smart-contracts, scalability, defi |
| Cardano | ADA | 10.2 | smart-contracts, academic-research |
| XRP | XRP | 9.8 | payments, enterprise-solutions |
| Dogecoin | DOGE | 9.4 | meme-token, medium-of-exchange |
| Chainlink | LINK | 8.9 | oracle, smart-contracts, data-feeds |
| Polygon | MATIC | 8.5 | layer-2, smart-contracts, scaling-solutions |
| Litecoin | LTC | 8.3 | payments, pow, medium-of-exchange |
| Avalanche | AVAX | 8.0 | smart-contracts, scalability |
+-------------+--------+-------------------+--------------------------------------------+
[확장 아이디어]
1. CSV 파일로 저장:
• 데이터를 파일로 저장하려면 top_10_coins.to_csv(‘output.csv’, index=False)를 추가.
2. 웹 대시보드:
• 데이터를 실시간으로 모니터링하려면 Streamlit이나 Dash와 같은 라이브러리 사용.
3. 추가 필드:
• 시가총액, 24시간 거래량 등 다른 데이터 추가.
[결론]
이 전략은 암호화폐 시장의 단기 모멘텀을 활용하는 단순한 접근법으로, 기술적으로 쉽게 구현 가능하며 데이터 기반이라는 장점이 있습니다. 하지만 단기 변동성과 과열된 자산의 리스크를 충분히 고려해야 합니다. 백테스트와 추가 분석을 통해 전략의 유효성을 검증한 후 실전에 적용하는 것이 바람직합니다.