BIBOT
BIBOT
BIBOT
전체 방문자
오늘
어제
  • 분류 전체보기 (79)
    • 경제뉴스 일기 (11)
    • 바이낸스 (17)
    • 코딩 (15)
    • 기술적 트레이딩 (27)
    • 기타 (1)
    • 경제상식 (6)
    • 일상 (1)

블로그 메뉴

  • 홈
  • 선물거래 계산기
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 우분투
  • 서버
  • 파이썬 바이낸스
  • 파이썬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
BIBOT

BIBOT

코딩

파이썬 - 엘리어트 파동이론(Elliot Wave Theory) 마지막 파동 출력하기

2023. 3. 1. 03:51

바이낸스 api를 통해 BTCUSDT의 5분봉 데이터를 받아와 파동의 마지막을 출력하는 코드입니다

EX) 현재 파동: 1    <- 상승장 첫 번째 파동을 의미
EX) 현재 파동: -6  <- 하락장 여섯 번째 파동을 의미

 

import pandas as pd
import plotly.graph_objects as go
import numpy as np
from binance.client import Client
from binance.enums import *

# 바이낸스 API 인증 정보 입력
api_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
api_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

# 바이낸스 API 클라이언트 생성
client = Client(api_key, api_secret)

# BTCUSDT 데이터 받아오기 - 5분봉
klines = client.futures_klines(symbol='BTCUSDT', interval=Client.KLINE_INTERVAL_5MINUTE)

# 데이터프레임 생성
df = pd.DataFrame(klines, columns=['Open time', 'Open', 'High', 'Low', 'Close', 'Volume', 'Close time', 'Quote asset volume', 'Number of trades', 'Taker buy base asset volume', 'Taker buy quote asset volume', 'Ignore'])

# 필요한 칼럼만 추출
df = df[['Open time', 'Open', 'High', 'Low', 'Close']]

# 데이터 타입 변경
df['Open time'] = pd.to_datetime(df['Open time'], unit='ms')
df['Open'] = df['Open'].astype(float)
df['High'] = df['High'].astype(float)
df['Low'] = df['Low'].astype(float)
df['Close'] = df['Close'].astype(float)

# 날짜 칼럼을 인덱스로 설정
df.set_index('Open time', inplace=True)

# 엘리어트 파동 분석 함수 정의
def elliot_wave_analysis(data, wave):
    # 추세선 계산
    ema_20 = data['Close'].ewm(span=20, adjust=False).mean()
    ema_50 = data['Close'].ewm(span=50, adjust=False).mean()
    ema_200 = data['Close'].ewm(span=200, adjust=False).mean()
    
    # 파동 분석을 위한 이동평균선 계산
    ema_8 = data['Close'].ewm(span=8, adjust=False).mean()
    ema_34 = data['Close'].ewm(span=34, adjust=False).mean()
    
    # 파동 시작점 찾기 위한 필터링 함수 정의
    def find_start_points(wave):
        peak = np.argmax(wave)
        start_points = []
        for i in range(1, peak+1):
            if wave[i] < 0 and wave[i-1] > 0:
                start_points.append(i)
        return start_points
    
    # 파동 분석 결과를 저장할 리스트 초기화
    analysis = []
    
    # 파동 분석 수행
    for i in range(1, len(wave)):
        wave_data = wave[:i+1]
        start_points = find_start_points(wave_data)
        for j in range(len(start_points)-1):
            start = start_points[j]
            end = start_points[j+1]-1
            if end - start < 2:
                continue
            wave_type = '상승파동' if wave[end] > wave[start] else '하락파동'
            analysis.append((start, end, wave_type))
    
    # 현재 파동
    wave = []
    for i in range(len(data)):
        if i < 2:
            wave.append(0)
        else:
            # 파동 종류 판단을 위한 고가와 저가 계산
            high = max(data['High'][i-2:i+1])
            low = min(data['Low'][i-2:i+1])
            if high == data['High'][i-1]:
                if low == data['Low'][i-1]:
                    wave.append(wave[-1])
                else:
                    wave.append(wave[-1]-1)
            elif low == data['Low'][i-1]:
                wave.append(wave[-1]+1)
            else:
                wave.append(wave[-1])
    current_wave = wave[-1]
    
    # 분석 결과 출력
    if current_wave == 0:
        print('파동 분석 불가')
    else:
        print('과거 ~ 현재까지 파동 분석 결과')
        print('---------------------------')
        for i in range(len(analysis)):
            start_idx = analysis[i][0]
            end_idx = analysis[i][1]
            wave_type = analysis[i][2]
            if end_idx >= len(data):
                continue
            print(f'{i+1}번째 {wave_type} 파동: {data.index[start_idx]} ~ {data.index[end_idx]}, {end_idx-start_idx+1}일')
        print(f'현재 파동: {current_wave}')



elliot_wave_analysis(df, df['Close'].rolling(window=34).mean())
반응형
저작자표시 비영리 변경금지 (새창열림)
    '코딩' 카테고리의 다른 글
    • 바이낸스 선물 거래에서 사용할 수 있는 페어 트레이딩(Pair Trading) 전략의 예제
    • 24시간 작동하는 이동평균(Moving Average) 전략 바이낸스 선물거래 알고리즘 예시
    • CentosOS 7 에서 Error: rpmdb open failed의 오류가 발생한다면?
    • sudo yum install mysql-server 실행 시 No package mysql-server available. 오류가 발생한다면?
    BIBOT
    BIBOT

    티스토리툴바