728x90
리처드 돈키언이 트레이딩 기법에 사용하여 명명된
‘돈키언 채널 돌파’의 기본 논리는
특정 기간 동안 가격이 최고가를 경신할 때 매수,
특정 기간 동안 가격이 최저가를 경신할 때 매도
하는것이다
오늘의 주제는!
월스트리트의 트래이딩 기법
돈키언 채널돌파를 적용하여 운영했을떄의
결과를 시뮬레이션해보자 입니다!!
0. Target Data
- 투자금액 : $1,000 (가정)
- Asset : Binance의 비트코인 선물거래
- Duration : 2019-12-23 ~ 2022-01-15 (일간, 757개 Data Set)
(참고 : 2022.01.15 -Binance의 코인 현물&선물 과거 가격 데이터 수집하기 (Feat. python)
1. 결론!
BTC 장기투자 | 돈키언 | |
수익률 | 469.6% | 694.1% |
승률 | - | 46.2% |
거래횟수 | - | 26회 |
소유기간 | 100% | 59.8% |
CAGR | 77.2% | 97.7% |
MDD | 38.5% | 24.7% |
2. Python Code
- 데이터 수집
from datetime import datetime
import pandas as pd
import requests
import time
import pickle
import numpy as np
coin = 'BTC'
start_time_ori = int (datetime(2019,1,1).timestamp()*1000)
target_time = int (datetime(2022,1,15).timestamp()*1000)
interval = "1d"
start_time = start_time_ori
df = pd.DataFrame()
while True:
us_xrp_price = requests.get("https://fapi.binance.com/fapi/v1/markPriceKlines",
params={'symbol':coin + 'USDT', 'interval' : interval , 'startTime' :start_time, 'limit':1500 } )
df_imsi = pd.DataFrame(us_xrp_price.json())
df_imsi.columns = ['open_timestamp','OPEN','HIGH','LOW','CLOSE','ignore','close_timestamp','quote_asset_volume','number_of_trades','taker_buy_base_asset_volume','taker_buy_quote_asset_volume','ignore']
df_imsi['datetime'] = df_imsi['open_timestamp'].apply(lambda x: datetime.fromtimestamp(x/1000))
df = df.append(df_imsi)
start_time = us_xrp_price.json()[-1][0] + 5*60*1000
start_time
if start_time > target_time:
break
df_target = df.sort_values('datetime').reset_index(drop=True)
df_target = df_target[['datetime', 'OPEN','HIGH','LOW','CLOSE',
'quote_asset_volume', 'number_of_trades',
'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore','open_timestamp','close_timestamp',
]]
#datetime 은 한국시간기준!!
df_target
- signal 시작 및 끝 고르기
df = df_target[['datetime','OPEN','CLOSE','HIGH','LOW']]
df['OPEN'] = df['OPEN'].astype(float)
df['CLOSE'] = df['CLOSE'].astype(float)
df['HIGH'] = df['HIGH'].astype(float)
df['LOW'] = df['LOW'].astype(float)
df['signal'] = 0
for i in range(len(df)):
if df.loc[i-9:i,'HIGH'].max() == df.loc[i,'HIGH']:
df.loc[i,'signal'] = 1
df['end'] = 0
for i in range(len(df)):
if df.loc[i-9:i,'LOW'].min() == df.loc[i,'LOW']:
df.loc[i,'end'] = 1
df['MY_ASSET'] = df['OPEN'] *(1000 / df.loc[0,'OPEN'])
df.loc[:10,['signal','end']] = 0
df['signal_real'] = 0
df['dolpa'] = 0
chance_num = 1
for i in range(len(df)):
if (df.loc[i,'signal_real'] == chance_num) & (df.loc[i,'end'] == 1):
df.loc[i+1:,'signal_real'] = 0
chance_num +=1
elif (df.loc[i,'signal'] == 1) & (df.loc[i,'signal_real'] == 0):
df.loc[i:,'signal_real'] = chance_num
df.loc[i,'dolpa'] = df.loc[i-9:i-1,'HIGH'].max()
df
- 돈키언 실행 구간 DF 구하기
chance_num_l = []
long_price_l = []
short_price_l = []
tiempo_l = []
long_date_l = []
short_date_l = []
for k in range(df.signal_real.max()):
k += 1
df_target = df[df['signal_real'] == k].reset_index(drop=True)
buying_price = df_target.loc[0,'dolpa_long']
selling_price = df_target.loc[len(df_target) -2,'LOW']
tiempo = len(df_target)
chance_num_l .append(k )
long_price_l .append(buying_price )
short_price_l.append(selling_price)
tiempo_l .append(tiempo )
long_date_l.append(df_target.loc[0,'dolpa_long_date'])
short_date_l.append(df_target.loc[len(df_target)-1,'dolpa_short_date'])
df_result = pd.DataFrame()
df_result['chance_num'] = chance_num_l
df_result['long_price'] = long_price_l
df_result['short_price'] = short_price_l
df_result['long_date'] = long_date_l
df_result['short_date'] = short_date_l
df_result['tiempo'] = tiempo_l
df_result['earn'] = df_result['short_price'] - df_result['long_price']
df_result['earn_binary'] = df_result['earn'] .apply(lambda x: 1 if x>0 else 0)
print("승률 : ", round(df_result['earn_binary'].sum() * 100 / len(df_result),2))
df_result['ASSET_desde'] = 1000
df_result['ASSET_antes'] = 0
for j in range(len(df_result)):
df_result.loc[j,'ASSET_antes'] = df_result.loc[j,'ASSET_desde'] / df_result.loc[j,'long_price'] * df_result.loc[j,'short_price']
df_result.loc[j+1,'ASSET_desde'] = df_result.loc[j,'ASSET_antes']
df_result
- 결과 DataFrame
3. 해석
돈키언!! 재미있는걸!! 앞으도 계속 탐구해봅시다!!
728x90
'Coin Market Review > 자동매매알고리즘탐구' 카테고리의 다른 글
돈키언채널돌파 롱&숏(1일) - 하락장에서는? (0) | 2022.02.04 |
---|---|
돈키언채널돌파 롱&숏(1일) 을 통한 비트코인 자동매매!! (0) | 2022.01.18 |
돈키언채널돌파전략(12시간)을 통한 비트코인 자동매매!!(with Python) (0) | 2022.01.17 |
나만의 코인 ETF를 운영해보자!! (2) (1) | 2021.12.18 |
나만의 코인 ETF를 운영해보자!! (1) (2) | 2021.12.16 |
댓글