하나의 기사에서 Python이 Coinbase에 어떻게 적용되는지 알아보십시오.
암호화 공간은 다양한 기술을 실험할 수 있는 좋은 방법입니다. 이 문서에서는 다음 내용을 다룹니다.
Coinbase Pro에서 Pandas 데이터 프레임으로 데이터를 로드하는 방법은 무엇입니까?
과거 암호화폐 시장 데이터를 변환하고 분석하는 방법은 무엇입니까?
단순 이동 평균(SMA), 지수 이동 평균(EMA), MACD, MACD 신호를 추가하는 방법은 무엇입니까?
Plotly와 Python을 사용하여 암호화폐 시장 데이터를 시각화하는 방법은 무엇입니까?
이 문서는 가장 관련성이 높은 Python 코드만 보여줍니다.

기사의 끝에서 다음과 같은 다양한 성과 지표 및 시장 동향을 포함하는 암호 화폐 캔들 스틱 차트를 생성할 수 있습니다.

최종 결과 - 시장 추세가 포함된 OHLC 캔들스틱 차트
1단계: Coinbase Pro에 연결
cbpro 라이브러리의 도움으로 Coinbase Pro에 연결하는 것은 한 줄입니다.
import cbpro
public_client = cbpro.PublicClient()
server_time = public_client.get_time()
# Server time does not comply to iso format, therefore slight modification of string needed
server_time_now = datetime.fromisoformat(server_time['iso'].replace('T', ' ', 1)[0:19])
print(server_time_now)
Coinbase Pro에 퍼블릭 클라이언트 실행
분석하려는 통화의 수를 제한하고 싶기 때문에 몇 가지 상수를 정의합니다. 또한 각 통화의 가치를 표시하는 데 사용할 기본 통화(예: USD 또는 EUR)를 선택하겠습니다.
FIAT_CURRENCIES = ['EUR','USD']
MY_BASE_CURRENCY = FIAT_CURRENCIES[0]
MY_CRYPTO_CURRENCIES = ["BTC","ETH","LTC","ALGO","SHIB","MANA"]
GRANULARITIES = ['daily','60min','15min','1min']
상수 정의
2단계: 지난 24시간 동안의 통계 로드
다음으로 지난 24시간 동안 각 암호화폐에 대한 기본 통계를 검토합니다. 또한 처음부터 끝까지 보고 기간의 성과를 보여주는 사용자 정의 열 "성과"를 추가할 것입니다. 나머지 코드는 숫자 형식을 처리합니다.
currency_rows = []
for currency in MY_CRYPTO_CURRENCIES:
data = public_client.get_product_24hr_stats(currency+'-'+MY_BASE_CURRENCY)
currency_rows.append(data)
df_24hstats = pd.DataFrame(currency_rows, index = MY_CRYPTO_CURRENCIES)
df_24hstats['currency'] = df_24hstats.index
df_24hstats['open'] = df_24hstats['open'].astype(float)
df_24hstats['high'] = df_24hstats['high'].astype(float)
df_24hstats['low'] = df_24hstats['low'].astype(float)
df_24hstats['volume'] = df_24hstats['volume'].astype(float)
df_24hstats['last'] = df_24hstats['last'].astype(float)
df_24hstats['volume_30day'] = df_24hstats['volume_30day'].astype(float)
df_24hstats['performance'] = ((df_24hstats['last']-df_24hstats['open']) / df_24hstats['open']) * 100
df_24hstats_formatted = df_24hstats.copy()
df_24hstats_formatted['performance'] = df_24hstats_formatted['performance'].apply(lambda x: "{:.2f}%".format((x)))
df_24hstats_formatted['open'] = df_24hstats_formatted['open'].apply(lambda x: "{:,.2f}€".format((x)))
df_24hstats_formatted['high'] = df_24hstats_formatted['high'].apply(lambda x: "{:,.2f}€".format((x)))
df_24hstats_formatted['low'] = df_24hstats_formatted['low'].apply(lambda x: "{:,.2f}€".format((x)))
df_24hstats_formatted['last'] = df_24hstats_formatted['last'].apply(lambda x: "{:,.2f}€".format((x)))
df_24hstats_formatted.style.hide_columns(['volume','volume_30day'])
Coinbase Pro에서 모든 암호화폐에 대한 24시간 시장 데이터 로드 및 형식 지정
이미지 설명

24시간 암호화폐 데이터 및 성능
3단계: 서로 다른 세분성의 기록 데이터 로드
다음으로, 다양한 타임 슬라이스 세분성을 사용하여 과거 시장 데이터를 다운로드합니다. 따라서 2단계와 같이 모든 통화를 반복해야 합니다. 다음은 일일 데이터를 검색하는 방법의 예입니다.
currency_history_rows = []
for currency in MY_CRYPTO_CURRENCIES:
start_date = (server_time_now - timedelta(days=90)).isoformat()
end_date = server_time_now.isoformat()
data = public_client.get_product_historic_rates(currency+'-'+MY_BASE_CURRENCY, start=start_date, end=end_date, granularity=86400)
[x.append(currency) for x in data]
[x.append('daily') for x in data]
currency_history_rows.extend(data)
df_history = pd.DataFrame(currency_history_rows)
df_history.columns = ['time','low','high','open','close','volume','currency','granularity']
df_history['date'] = pd.to_datetime(df_history['time'], unit='s')
타임 슬라이스 데이터를 검색하려면 다음 정보가 필요합니다.
원하는 기간의 ISO 형식 시작 날짜
원하는 기간 동안 ISO 형식의 종료 날짜
세분성(이 경우 86400초, 24시간과 같음)
지난 300시간 동안의 시간별 데이터를 얻으려면 다음을 수행할 수 있습니다.
start_date = (server_time_now - timedelta(hours=300)).isoformat()
end_date = server_time_now.isoformat()
data = public_client.get_product_historic_rates(currency+'-'+MY_BASE_CURRENCY, start=start_date, end=end_date, granularity=3600)
이미지 설명

일일 타임 슬라이스가 포함된 암호화폐 과거 시장 데이터
4단계: 지표 추가
이제 가장 어려운 부분이 있습니다. 우리는 데이터에 몇 가지 사용자 지정 투자 지표를 추가하려고 합니다. 이렇게 하면 간단한 시장 데이터에서 얻는 정보가 향상됩니다. 다음 정보를 추가하겠습니다.
SMA3 및 SMA7(지난 3개 및 7개 시간 조각에 대한 단순 이동 평균): 특정 기간 동안 증권의 평균 가격을 보여주는 가격 기반 후행(또는 반응) 지표입니다. 이동 평균은 차트를 해석할 때 "노이즈"를 제거합니다. 소음은 가격과 볼륨 변동으로 구성됩니다. 단순 이동 평균은 비가중 이동 평균입니다. 이는 데이터 세트의 각 기간이 동일한 중요도를 가지며 동일한 가중치가 부여됨을 의미합니다.
EMA12 및 EMA26(지난 12개 및 26개 시간 조각에 대한 지수 이동 평균): EMA는 최근 가격에 더 많은 가중치를 부여하기 때문에 SMA보다 시차가 훨씬 적습니다. 따라서 SMA보다 빠르게 회전합니다. 다른 시간 조각을 선택할 수 있지만 12와 26이 일반적으로 사용되는 기간이므로 예제에서 사용할 것입니다.
MACD(이동 평균 수렴/발산): 모든 증권의 일반적인 추세를 결정하는 좋은 지표입니다. 단기 EMA와 장기 EMA의 차이가 필요합니다. 긍정적인 MACD 값은 긍정적인 시장 추세를 나타내는 지표입니다. 음수 MACD 값은 음수 시장 추세를 나타내는 지표입니다.
MACD 신호: MACD 신호 라인은 MACD 라인의 특정 타임 슬라이스 그룹에 있는 EMA입니다. 일반적으로 이 값은 9개의 시간 조각으로 설정됩니다.
MACD 히스토그램: MACD 라인과 MACD 신호 라인의 차이입니다. 강세 교차는 MACD 선이 MACD 신호선 위로 교차할 때 발생합니다. 약세 교차는 MACD 선이 MACD 신호 선 아래로 교차할 때 발생합니다. 나중에 데이터를 시각화할 때 이것이 무엇을 의미하는지 정확히 알 수 있습니다.
Open-to-Close performance: 각 타임 슬라이스에 대해 특정 기간의 종가와 시가 사이의 차이가 백분율로 표시됩니다.
High-Low Span: 기간 내 최고 가격과 최저 가격 사이의 백분율 편차. 이것은 시간 조각 내의 변동을 보여줍니다.
지난 3개 기간 동안의 절대 성과: 이 지표는 마지막 3개 시간 조각의 성과를 절대값으로 취합니다(상수에서 정의한 기본 통화로 측정됨).
지난 3개 기간 동안의 성능 백분율: 이 표시기는 상대적 값(백분율)의 형태로 마지막 3개 시간 조각의 성능을 제공합니다.
Bull 또는 Bear: MACD 히스토그램이 양수이면 "bull"이라고 쓰고, MACD 히스토그램이 음수이면 "bear"라고 씁니다.
계속되는 시장 추세: 강세에서 약세로 또는 그 반대로의 전환을 식별하기 위해 이전 시간 조각의 추세가 계속되면 이 열은 "참"이고 추세가 변경된 경우 "거짓"입니다.
Panda의 강력한 벡터 연산과 내장 함수 덕분에 단 몇 줄의 코드로 이를 달성했습니다.
currency_history_rows_enhanced = []
for currency in MY_CRYPTO_CURRENCIES:
for granularity in GRANULARITIES:
df_history_currency = df_history.query('granularity == @granularity & currency == @currency').copy()
df_history_currency = df_history_currency.sort_values(['date'], ascending=True)
df_history_currency['SMA3'] = df_history_currency['close'].rolling(window=3).mean()
df_history_currency['SMA7'] = df_history_currency['close'].rolling(window=7).mean()
df_history_currency['EMA12'] = df_history_currency['close'].ewm(span=12, adjust=False).mean()
df_history_currency['EMA26'] = df_history_currency['close'].ewm(span=26, adjust=False).mean()
df_history_currency['MACD'] = df_history_currency['EMA12'] - df_history_currency['EMA26']
df_history_currency['MACD_signal'] = df_history_currency['MACD'].ewm(span=9, adjust=False).mean()
df_history_currency['macd_histogram'] = ((df_history_currency['MACD']-df_history_currency['MACD_signal']))
df_history_currency['open_to_close_perf'] = ((df_history_currency['close']-df_history_currency['open']) / df_history_currency['open'])
df_history_currency['high_low_span'] = ((df_history_currency['high']-df_history_currency['low']) / df_history_currency['high'])
df_history_currency['open_perf_last_3_period_abs'] = df_history_currency['open'].rolling(window=4).apply(lambda x: x.iloc[1] - x.iloc[0])
df_history_currency['open_perf_last_3_period_per'] = df_history_currency['open'].rolling(window=4).apply(lambda x: (x.iloc[1] - x.iloc[0])/x.iloc[0])
df_history_currency['bull_bear'] = np.where(df_history_currency['macd_histogram']< 0, 'Bear', 'Bull')
currency_history_rows_enhanced.append(df_history_currency)
df_history_enhanced = pd.concat(currency_history_rows_enhanced, ignore_index=True)
df_history_enhanced = df_history_enhanced.sort_values(['currency','granularity','date'], ascending=True)
df_history_enhanced['market_trend_continued'] = df_history_enhanced.bull_bear.eq(df_history_enhanced.bull_bear.shift()) & df_history_enhanced.currency.eq(df_history_enhanced.currency.shift()) & df_history_enhanced.granularity.eq(df_history_enhanced.granularity.shift())
5단계: 의사 결정을 위해 정보 사용
이미지 설명

지난 90일 동안 다양한 암호화폐의 성능
6단계: 암호화폐 시장 데이터 시각화
마지막 단계에서는 지금까지 구축된 기본 데이터를 시각화하려고 합니다. 시각화를 위해 강력한 Plotly 라이브러리를 사용합니다.
데이터를 시각화하기 전에 아래 이미지에서 약세(빨간색) 및 강세(녹색) 상자를 그리는 데 필요한 정보를 포함할 Pandas 데이터 프레임을 하나 더 생성해야 합니다. 따라서 시작 및 종료 기간을 포함하여 강세장 및 약세장 기간을 제공하는 테이블을 구성해야 합니다. Pandas 덕분에 다음 코드 스니펫으로 이를 쉽게 달성할 수 있습니다.
market_trend_interval_rows = []
for currency in MY_CRYPTO_CURRENCIES:
for granularity in GRANULARITIES:
df_history_market_trend_intervals = df_history_enhanced.query('currency == @currency and market_trend_continued == False and granularity == @granularity').copy()
df_history_market_trend_intervals['next_period_date'] = df_history_market_trend_intervals.date.shift(-1)
df_history_market_trend_intervals['next_period_date'] = df_history_market_trend_intervals['next_period_date']
df_history_market_trend_intervals.next_period_date = df_history_market_trend_intervals.next_period_date.fillna(datetime.now())
df_history_market_trend_intervals['color'] = df_history_market_trend_intervals['bull_bear'].apply(lambda x: GREEN_COLOR if x == 'Bull' else RED_COLOR)
df_history_market_trend_intervals = df_history_market_trend_intervals[['currency','granularity','bull_bear','color','date','next_period_date']].rename(columns={"date": "start_date", "next_period_date": "finish_date"})
market_trend_interval_rows.append(df_history_market_trend_intervals)
df_history_market_trend_intervals = pd.concat(market_trend_interval_rows, ignore_index=True)
시간 조각을 변환하는 강력한 Pandas 기능
이미지 설명

강세 및 약세 기간이 압축된 Pandas 데이터 프레임
이미지 설명

성과 지표 및 시장 동향을 포함한 정교한 암호화폐 캔들스틱 차트
이 차트는 Plotly에서 두 개의 y축을 사용합니다. 오른쪽의 y축은 촛대를 그리는 데 사용됩니다. 왼쪽 y축은 MACD 및 MACD 신호선을 그리는 데 사용됩니다.
요약
요약
원본 링크


