프로젝트/코인 투자 매크로

2025-06-09 [9] 종목 선택

훈 님의 개발 블로그 2025. 6. 10. 00:35

오늘은 종목 선택하는 방법에 대해 진행하려고 합니다.
종목을 선택하기에 다음의 경우를 생각해봤습니다.

1. 특정 종목 몇개만 선택한다.

TARGET_COINS = ["BTC", "ETH", "XRP"] # 예시: 비트코인, 이더리움, 리플

2. 거래대금 상위 종목 n개를 선택한다.
3. 전체 항목을 스캔하고, 구매할만한 종목을 선택한다.

★여기서 고려해야 할 점!!! ★
API 서버는 너무 과도한 요청을 보내는 사용자에 대해 차단을 할 수도 있다!!

위 내용을 고려하면 3번은 위험부담이 커보입니다.
그렇다고 1번을 고를만큼 코인 지식을 가지고있지 않아요.

그런고로 2번으로 진행을 해보겠습니다!!


거래대금 상위 N개의 종목 필터링

1). import

import json

 

2). 함수 정의

- 전체 ticker 정보와 개수를 입력하면 ticker 정보 내 상위 20개의 종목을 반환해줍니다.

# --- 거래대금 상위 N개의 종목을 필터링하는 함수 ---
"""
전체 Ticker 정보에서 24시간 거래대금 상위 N개 코인을 필터링
:all_ticker_info: get_ticker_info("ALL")로 받은 전체 Ticker 딕셔너리
:top_n: 상위 몇 개를 선택할지 (기본값: 20)
:return: 거래대금 상위 N개 코인 심볼 리스트 (예: ["BTC", "ETH", ...])
"""
def filter_top_coins_by_trade_value(all_ticker_info, top_n=20):
    if not all_ticker_info or not isinstance(all_ticker_info, dict):
        print("⚠️  유효한 Ticker 정보가 없어 필터링을 건너뜁니다.")
        return []

    coin_tickers = all_ticker_info.copy()

    if 'date' in coin_tickers:  # 'date' 키는 코인 정보가 아니므로 제거
        del coin_tickers['date']

    # 거래대금을 기준으로 코인들을 정렬하기 위해 리스트로 변환
    sorted_coins = []
    for symbol, ticker_data in coin_tickers.items():
        try:
            trade_value = float(ticker_data.get('acc_trade_value_24H', 0))
            sorted_coins.append({'symbol': symbol, 'trade_value': trade_value})
        except (ValueError, TypeError):
            continue  # 거래대금 값이 숫자가 아니면 건너뛰기

    # 거래대금을 기준으로 내림차순 정렬
    sorted_coins.sort(key=lambda x: x['trade_value'], reverse=True)

    # 거래대금 상위 N개 코인 데이터 추출
    top_coins_data = sorted_coins[:top_n]
    # 코인 데이터에서 심볼(이름)만 뽑아서 리스트로 만들기
    target_coins = [coin['symbol'] for coin in top_coins_data]

    print("\n--- 💰 24시간 거래대금 상위 20개 관심 종목 ---")
    for i, coin in enumerate(top_coins_data):
        print(f"{i + 1:>2}. {coin['symbol']:<10} (거래대금: {coin['trade_value']:>15,.0f} KRW)")

    return target_coins

 

3). 테스트 진행

- main을 아래와 같이 입력하여 결과를 확인합니다.

if __name__ == "__main__":
    print(f"\n[{time.strftime('%Y-%m-%d %H:%M:%S')}] 전체 시장 데이터 스캔 시작...")

    # 'ALL'을 인자로 넣어 전체 ticker 정보 가져오기
    all_ticker_info = bithumb_api_client.get_ticker_info("ALL")

    # 전체 ticker 정보를 기준으로 상위 20개 종목 가져오기
    target_coins = filter_top_coins_by_trade_value(all_ticker_info, top_n=20)

    if not target_coins:
        print("분석할 대상 코인을 찾지 못했습니다. 프로그램을 종료합니다.")
    else:
        print("\n--- 🎯 최종 분석 대상 ---")
        print(target_coins)

- 아래와 같이 출력되면 성공!

 

 

끝!