🚴‍♂️
TIL
  • MAIN
  • : TIL?
  • : WIL
  • : Plan
  • : Retrospective
    • 21Y
      • Wait a moment!
      • 9M 2W
      • 9M1W
      • 8M4W
      • 8M3W
      • 8M2W
      • 8M1W
      • 7M4W
      • 7M3W
      • 7M2W
      • 7M1W
      • 6M5W
      • 1H
    • 새사람 되기 프로젝트
      • 2회차
      • 1회차
  • TIL : ML
    • Paper Analysis
      • BERT
      • Transformer
    • Boostcamp 2st
      • [S]Data Viz
        • (4-3) Seaborn 심화
        • (4-2) Seaborn 기초
        • (4-1) Seaborn 소개
        • (3-4) More Tips
        • (3-3) Facet 사용하기
        • (3-2) Color 사용하기
        • (3-1) Text 사용하기
        • (2-3) Scatter Plot 사용하기
        • (2-2) Line Plot 사용하기
        • (2-1) Bar Plot 사용하기
        • (1-3) Python과 Matplotlib
        • (1-2) 시각화의 요소
        • (1-1) Welcome to Visualization (OT)
      • [P]MRC
        • (2강) Extraction-based MRC
        • (1강) MRC Intro & Python Basics
      • [P]KLUE
        • (5강) BERT 기반 단일 문장 분류 모델 학습
        • (4강) 한국어 BERT 언어 모델 학습
        • [NLP] 문장 내 개체간 관계 추출
        • (3강) BERT 언어모델 소개
        • (2강) 자연어의 전처리
        • (1강) 인공지능과 자연어 처리
      • [U]Stage-CV
      • [U]Stage-NLP
        • 7W Retrospective
        • (10강) Advanced Self-supervised Pre-training Models
        • (09강) Self-supervised Pre-training Models
        • (08강) Transformer (2)
        • (07강) Transformer (1)
        • 6W Retrospective
        • (06강) Beam Search and BLEU score
        • (05강) Sequence to Sequence with Attention
        • (04강) LSTM and GRU
        • (03강) Recurrent Neural Network and Language Modeling
        • (02강) Word Embedding
        • (01강) Intro to NLP, Bag-of-Words
        • [필수 과제 4] Preprocessing for NMT Model
        • [필수 과제 3] Subword-level Language Model
        • [필수 과제2] RNN-based Language Model
        • [선택 과제] BERT Fine-tuning with transformers
        • [필수 과제] Data Preprocessing
      • Mask Wear Image Classification
        • 5W Retrospective
        • Report_Level1_6
        • Performance | Review
        • DAY 11 : HardVoting | MultiLabelClassification
        • DAY 10 : Cutmix
        • DAY 9 : Loss Function
        • DAY 8 : Baseline
        • DAY 7 : Class Imbalance | Stratification
        • DAY 6 : Error Fix
        • DAY 5 : Facenet | Save
        • DAY 4 : VIT | F1_Loss | LrScheduler
        • DAY 3 : DataSet/Lodaer | EfficientNet
        • DAY 2 : Labeling
        • DAY 1 : EDA
        • 2_EDA Analysis
      • [P]Stage-1
        • 4W Retrospective
        • (10강) Experiment Toolkits & Tips
        • (9강) Ensemble
        • (8강) Training & Inference 2
        • (7강) Training & Inference 1
        • (6강) Model 2
        • (5강) Model 1
        • (4강) Data Generation
        • (3강) Dataset
        • (2강) Image Classification & EDA
        • (1강) Competition with AI Stages!
      • [U]Stage-3
        • 3W Retrospective
        • PyTorch
          • (10강) PyTorch Troubleshooting
          • (09강) Hyperparameter Tuning
          • (08강) Multi-GPU 학습
          • (07강) Monitoring tools for PyTorch
          • (06강) 모델 불러오기
          • (05강) Dataset & Dataloader
          • (04강) AutoGrad & Optimizer
          • (03강) PyTorch 프로젝트 구조 이해하기
          • (02강) PyTorch Basics
          • (01강) Introduction to PyTorch
      • [U]Stage-2
        • 2W Retrospective
        • DL Basic
          • (10강) Generative Models 2
          • (09강) Generative Models 1
          • (08강) Sequential Models - Transformer
          • (07강) Sequential Models - RNN
          • (06강) Computer Vision Applications
          • (05강) Modern CNN - 1x1 convolution의 중요성
          • (04강) Convolution은 무엇인가?
          • (03강) Optimization
          • (02강) 뉴럴 네트워크 - MLP (Multi-Layer Perceptron)
          • (01강) 딥러닝 기본 용어 설명 - Historical Review
        • Assignment
          • [필수 과제] Multi-headed Attention Assignment
          • [필수 과제] LSTM Assignment
          • [필수 과제] CNN Assignment
          • [필수 과제] Optimization Assignment
          • [필수 과제] MLP Assignment
      • [U]Stage-1
        • 1W Retrospective
        • AI Math
          • (AI Math 10강) RNN 첫걸음
          • (AI Math 9강) CNN 첫걸음
          • (AI Math 8강) 베이즈 통계학 맛보기
          • (AI Math 7강) 통계학 맛보기
          • (AI Math 6강) 확률론 맛보기
          • (AI Math 5강) 딥러닝 학습방법 이해하기
          • (AI Math 4강) 경사하강법 - 매운맛
          • (AI Math 3강) 경사하강법 - 순한맛
          • (AI Math 2강) 행렬이 뭐예요?
          • (AI Math 1강) 벡터가 뭐예요?
        • Python
          • (Python 7-2강) pandas II
          • (Python 7-1강) pandas I
          • (Python 6강) numpy
          • (Python 5-2강) Python data handling
          • (Python 5-1강) File / Exception / Log Handling
          • (Python 4-2강) Module and Project
          • (Python 4-1강) Python Object Oriented Programming
          • (Python 3-2강) Pythonic code
          • (Python 3-1강) Python Data Structure
          • (Python 2-4강) String and advanced function concept
          • (Python 2-3강) Conditionals and Loops
          • (Python 2-2강) Function and Console I/O
          • (Python 2-1강) Variables
          • (Python 1-3강) 파이썬 코딩 환경
          • (Python 1-2강) 파이썬 개요
          • (Python 1-1강) Basic computer class for newbies
        • Assignment
          • [선택 과제 3] Maximum Likelihood Estimate
          • [선택 과제 2] Backpropagation
          • [선택 과제 1] Gradient Descent
          • [필수 과제 5] Morsecode
          • [필수 과제 4] Baseball
          • [필수 과제 3] Text Processing 2
          • [필수 과제 2] Text Processing 1
          • [필수 과제 1] Basic Math
    • 딥러닝 CNN 완벽 가이드 - Fundamental 편
      • 종합 실습 2 - 캐글 Plant Pathology(나무잎 병 진단) 경연 대회
      • 종합 실습 1 - 120종의 Dog Breed Identification 모델 최적화
      • 사전 훈련 모델의 미세 조정 학습과 다양한 Learning Rate Scheduler의 적용
      • Advanced CNN 모델 파헤치기 - ResNet 상세와 EfficientNet 개요
      • Advanced CNN 모델 파헤치기 - AlexNet, VGGNet, GoogLeNet
      • Albumentation을 이용한 Augmentation기법과 Keras Sequence 활용하기
      • 사전 훈련 CNN 모델의 활용과 Keras Generator 메커니즘 이해
      • 데이터 증강의 이해 - Keras ImageDataGenerator 활용
      • CNN 모델 구현 및 성능 향상 기본 기법 적용하기
    • AI School 1st
    • 현업 실무자에게 배우는 Kaggle 머신러닝 입문
    • 파이썬 딥러닝 파이토치
  • TIL : Python & Math
    • Do It! 장고+부트스트랩: 파이썬 웹개발의 정석
      • Relations - 다대다 관계
      • Relations - 다대일 관계
      • 템플릿 파일 모듈화 하기
      • TDD (Test Driven Development)
      • template tags & 조건문
      • 정적 파일(static files) & 미디어 파일(media files)
      • FBV (Function Based View)와 CBV (Class Based View)
      • Django 입문하기
      • 부트스트랩
      • 프론트엔드 기초다지기 (HTML, CSS, JS)
      • 들어가기 + 환경설정
    • Algorithm
      • Programmers
        • Level1
          • 소수 만들기
          • 숫자 문자열과 영단어
          • 자연수 뒤집어 배열로 만들기
          • 정수 내림차순으로 배치하기
          • 정수 제곱근 판별
          • 제일 작은 수 제거하기
          • 직사각형 별찍기
          • 짝수와 홀수
          • 체육복
          • 최대공약수와 최소공배수
          • 콜라츠 추측
          • 크레인 인형뽑기 게임
          • 키패드 누르기
          • 평균 구하기
          • 폰켓몬
          • 하샤드 수
          • 핸드폰 번호 가리기
          • 행렬의 덧셈
        • Level2
          • 숫자의 표현
          • 순위 검색
          • 수식 최대화
          • 소수 찾기
          • 소수 만들기
          • 삼각 달팽이
          • 문자열 압축
          • 메뉴 리뉴얼
          • 더 맵게
          • 땅따먹기
          • 멀쩡한 사각형
          • 괄호 회전하기
          • 괄호 변환
          • 구명보트
          • 기능 개발
          • 뉴스 클러스터링
          • 다리를 지나는 트럭
          • 다음 큰 숫자
          • 게임 맵 최단거리
          • 거리두기 확인하기
          • 가장 큰 정사각형 찾기
          • H-Index
          • JadenCase 문자열 만들기
          • N개의 최소공배수
          • N진수 게임
          • 가장 큰 수
          • 124 나라의 숫자
          • 2개 이하로 다른 비트
          • [3차] 파일명 정렬
          • [3차] 압축
          • 줄 서는 방법
          • [3차] 방금 그곡
          • 거리두기 확인하기
        • Level3
          • 매칭 점수
          • 외벽 점검
          • 기지국 설치
          • 숫자 게임
          • 110 옮기기
          • 광고 제거
          • 길 찾기 게임
          • 셔틀버스
          • 단속카메라
          • 표 편집
          • N-Queen
          • 징검다리 건너기
          • 최고의 집합
          • 합승 택시 요금
          • 거스름돈
          • 하노이의 탑
          • 멀리 뛰기
          • 모두 0으로 만들기
        • Level4
    • Head First Python
    • 데이터 분석을 위한 SQL
    • 단 두 장의 문서로 데이터 분석과 시각화 뽀개기
    • Linear Algebra(Khan Academy)
    • 인공지능을 위한 선형대수
    • Statistics110
  • TIL : etc
    • [따배런] Kubernetes
    • [따배런] Docker
      • 2. 도커 설치 실습 1 - 학습편(준비물/실습 유형 소개)
      • 1. 컨테이너와 도커의 이해 - 컨테이너를 쓰는이유 / 일반프로그램과 컨테이너프로그램의 차이점
      • 0. 드디어 찾아온 Docker 강의! 왕초보에서 도커 마스터로 - OT
    • CoinTrading
      • [가상 화폐 자동 매매 프로그램] 백테스팅 : 간단한 테스팅
    • Gatsby
      • 01 깃북 포기 선언
  • TIL : Project
    • Mask Wear Image Classification
    • Project. GARIGO
  • 2021 TIL
    • CHANGED
    • JUN
      • 30 Wed
      • 29 Tue
      • 28 Mon
      • 27 Sun
      • 26 Sat
      • 25 Fri
      • 24 Thu
      • 23 Wed
      • 22 Tue
      • 21 Mon
      • 20 Sun
      • 19 Sat
      • 18 Fri
      • 17 Thu
      • 16 Wed
      • 15 Tue
      • 14 Mon
      • 13 Sun
      • 12 Sat
      • 11 Fri
      • 10 Thu
      • 9 Wed
      • 8 Tue
      • 7 Mon
      • 6 Sun
      • 5 Sat
      • 4 Fri
      • 3 Thu
      • 2 Wed
      • 1 Tue
    • MAY
      • 31 Mon
      • 30 Sun
      • 29 Sat
      • 28 Fri
      • 27 Thu
      • 26 Wed
      • 25 Tue
      • 24 Mon
      • 23 Sun
      • 22 Sat
      • 21 Fri
      • 20 Thu
      • 19 Wed
      • 18 Tue
      • 17 Mon
      • 16 Sun
      • 15 Sat
      • 14 Fri
      • 13 Thu
      • 12 Wed
      • 11 Tue
      • 10 Mon
      • 9 Sun
      • 8 Sat
      • 7 Fri
      • 6 Thu
      • 5 Wed
      • 4 Tue
      • 3 Mon
      • 2 Sun
      • 1 Sat
    • APR
      • 30 Fri
      • 29 Thu
      • 28 Wed
      • 27 Tue
      • 26 Mon
      • 25 Sun
      • 24 Sat
      • 23 Fri
      • 22 Thu
      • 21 Wed
      • 20 Tue
      • 19 Mon
      • 18 Sun
      • 17 Sat
      • 16 Fri
      • 15 Thu
      • 14 Wed
      • 13 Tue
      • 12 Mon
      • 11 Sun
      • 10 Sat
      • 9 Fri
      • 8 Thu
      • 7 Wed
      • 6 Tue
      • 5 Mon
      • 4 Sun
      • 3 Sat
      • 2 Fri
      • 1 Thu
    • MAR
      • 31 Wed
      • 30 Tue
      • 29 Mon
      • 28 Sun
      • 27 Sat
      • 26 Fri
      • 25 Thu
      • 24 Wed
      • 23 Tue
      • 22 Mon
      • 21 Sun
      • 20 Sat
      • 19 Fri
      • 18 Thu
      • 17 Wed
      • 16 Tue
      • 15 Mon
      • 14 Sun
      • 13 Sat
      • 12 Fri
      • 11 Thu
      • 10 Wed
      • 9 Tue
      • 8 Mon
      • 7 Sun
      • 6 Sat
      • 5 Fri
      • 4 Thu
      • 3 Wed
      • 2 Tue
      • 1 Mon
    • FEB
      • 28 Sun
      • 27 Sat
      • 26 Fri
      • 25 Thu
      • 24 Wed
      • 23 Tue
      • 22 Mon
      • 21 Sun
      • 20 Sat
      • 19 Fri
      • 18 Thu
      • 17 Wed
      • 16 Tue
      • 15 Mon
      • 14 Sun
      • 13 Sat
      • 12 Fri
      • 11 Thu
      • 10 Wed
      • 9 Tue
      • 8 Mon
      • 7 Sun
      • 6 Sat
      • 5 Fri
      • 4 Thu
      • 3 Wed
      • 2 Tue
      • 1 Mon
    • JAN
      • 31 Sun
      • 30 Sat
      • 29 Fri
      • 28 Thu
      • 27 Wed
      • 26 Tue
      • 25 Mon
      • 24 Sun
      • 23 Sat
      • 22 Fri
      • 21 Thu
      • 20 Wed
      • 19 Tue
      • 18 Mon
      • 17 Sun
      • 16 Sat
      • 15 Fri
      • 14 Thu
      • 13 Wed
      • 12 Tue
      • 11 Mon
      • 10 Sun
      • 9 Sat
      • 8 Fri
      • 7 Thu
      • 6 Wed
      • 5 Tue
      • 4 Mon
      • 3 Sun
      • 2 Sat
      • 1 Fri
  • 2020 TIL
    • DEC
      • 31 Thu
      • 30 Wed
      • 29 Tue
      • 28 Mon
      • 27 Sun
      • 26 Sat
      • 25 Fri
      • 24 Thu
      • 23 Wed
      • 22 Tue
      • 21 Mon
      • 20 Sun
      • 19 Sat
      • 18 Fri
      • 17 Thu
      • 16 Wed
      • 15 Tue
      • 14 Mon
      • 13 Sun
      • 12 Sat
      • 11 Fri
      • 10 Thu
      • 9 Wed
      • 8 Tue
      • 7 Mon
      • 6 Sun
      • 5 Sat
      • 4 Fri
      • 3 Tue
      • 2 Wed
      • 1 Tue
    • NOV
      • 30 Mon
Powered by GitBook
On this page
  • 설명
  • 코드
  • 분석

Was this helpful?

  1. TIL : etc
  2. CoinTrading

[가상 화폐 자동 매매 프로그램] 백테스팅 : 간단한 테스팅

본격적으로 전략에 대한 백테스팅을 진행하겠다. 백테스팅은 다음과 같은 여러개의 백테스팅을 진행할 예정이다.

설명

이 중 평균적인 결과를 얻을 수 있는 기초 백테스팅이 이번 포스팅이 되겠다! 평균이라 함은 특정 시간대를 정하거나 혼용하지 않고 기본 전략 중 일부가 삭제되거나 다른 조건이 추가되지 않은 상태를 의미한다. 현재 백테스팅을 진행하는 시간은 오전 0시를 기준으로 진행했다.

코드

코드에서는 단일 화폐로 가정한다!

또, 전략 설명에는 오전 0시에 매수한다고 명시했지만, 이 부분을 trading_time 이라는 변수로 선언했다.

import pyupbit
import pandas as pd
import datetime
import time
import numpy as np
pd.set_option('display.max_rows', None) # print all rows
pd.set_option('display.max_columns', None) # print all columns
pd.set_option('expand_frame_repr', False) # print df on single line
ma_score_weight = [1.1, 1.05, 0.95, 0.9]

기본적인 라이브러리와 출력 세팅을 했다. 그리고 이동평균선 점수도 가중치를 둬서 선언했다.

지금부터 설명하는 코드는 너무 길어서 3개의 부분으로 나눈다. 3개의 부분은 모두 한 함수내에 있는 코드라고 생각하면 된다.

def get_ohlcv(ticker, trading_time, target_volatility):
    date = trading_time
    dfs = []
    for i in range(52):
        df = pyupbit.get_ohlcv(ticker, interval="minute60", to=date, count=24*7)
        if len(df) == 0: break
        dfs.append(df)

        date = df.index[0]
        time.sleep(0.1)

    df = pd.concat(dfs).sort_index()
    df.index.name = 'datetime'
    df.reset_index(inplace=True)

원하는 거래 시간대와 목표 변동성을 입력받고 52주(1년)의 데이터를 가져온다.

    df['hour'] = df['datetime'].dt.hour
    df['selling_price'] = df['open'].shift(-12)
    df["prev_pm_cum_volume"] = df['volume'].rolling(window=12).sum().shift(1)
    df['prev_pm_return'] = df['close'].shift(1)-df['open'].shift(12)
    df["prev_am_cum_volume"] = df['volume'].rolling(window=12).sum().shift(13)

    high_price_24 = df['high'].rolling(window=24).max().shift(1)
    low_price_24 = df['low'].rolling(window=24).min().shift(1)
    open_price_24 = df['open'].shift(24)

    df['range'] = (high_price_24 - low_price_24)/open_price_24
    df['noise1'] = 1 - (abs(open_price_24-df['open'])/(high_price_24-low_price_24))
    df = df[(df.hour == trading_time.hour)]

    df['ma3'] = df['close'].rolling(window=3).mean().shift(1)
    df['ma5'] = df['close'].rolling(window=5).mean().shift(1)
    df['ma10'] = df['close'].rolling(window=10).mean().shift(1)
    df['ma20'] = df['close'].rolling(window=20).mean().shift(1)
    df['ma_score'] = sum([ma.astype(int) * score for ma, score in zip
                          ([df['ma3'] < df['close'], df['ma5'] < df['close'],
                            df['ma10'] < df['close'], df['ma20'] < df['close']], ma_score_weight)]) / 4

ndex가 2021:05:13 12:00:00로 되어있는데 시간에 해당하는 '12' 부분만을 따로 컬럼으로 만든다! 나중에 원하는 시간대에 대한 거래로 추리기 위해서이다.

이후, 오전 오후 거래량을 비교하기 위해 거래량을 구하고, 오후 수익률이 오전 수익률보다 더 큰지 확인하기 위해 차를 구한다. 그외의 고가, 저가, 시가, 변동성, 노이즈 이동평균선 점수를 구한다.

이후, 원하는 trading time 정보만 보기 위해서 df를 축소한다.

이 코드는 원하는 구매 시점이 지난 이후에 돌리는 코드이기 때문에 shift(1)을 모두 사용한다. 왜냐하면 12시 5분에 12시 거래에 대해 코드를 돌리면 마지막 데이터가 12시부터 12시 5분까지의 단 5분의 데이터밖에 존재하지 않기 때문에 12시 5분에 돌리더라도 12시(정확히는 11시 59분)를 현재라고 가정한다.

    df['noise20'] = df['noise1'].rolling(window=20).mean()
    df['target'] = open_price_24 + df['range'] * df['noise20']
    cond = (df['ma_score'] > 0) & (df['noise1'] <= 0.55) & (df['close'] >= df['target']) & (df['prev_pm_return'] > 0) & (df["prev_pm_cum_volume"] > df["prev_am_cum_volume"])
    df['can_order'] = np.where(cond, 1, 0)
    df['target_price_priority'] = (target_volatility / df['range']) * df['ma_score']
    df['target_price_priority'] = np.where(df['target_price_priority'] > 1, 1, df['target_price_priority'])

    df['performance'] = 1 - df['target_price_priority'] + df.loc[df['can_order'] == 1, 'selling_price'] / df.loc[df['can_order'] == 1, 'close'] * df['target_price_priority']
    df['performance'] = df['performance'] - 0.001
    df['cum_performance'] = df['performance'].dropna().cumprod()

    return pd.DataFrame(
        data=[[ticker, len(df), len(df[df['can_order'] == True]), 100*(round(df[df['performance'] >= 1].count()['performance'] / len(df[df['can_order'] == True]), 2)),
                df['cum_performance'].dropna().iloc[-1], df['cum_performance'].max(),
               -round(100 * (1 - df['performance'].min()), 2), df['performance'].loc[df['performance'] > 1].sum() / (df['performance'].loc[df['performance'] < 1].sum() + 1e-5)]],
        columns=['ticker', 'trade_period', 'order_period', 'win_rate',
                 'cur_performance', 'max_performance',
                 'mdd', 'loss_cut'])

20일간 노이즈 평균을 구하고 목표 가격을 구한다(목표 가격 이상일 때 구매). 그 뒤 거래가 가능한지 여부와 목표 변동성을 적용한 가격 가중치 결정, 수익률을 구하고 반환한다.

구매 조건을 다시 말하자면 이동평균선이 0보다 큰지, 1일 노이즈가 0.55보다 작은지, 오후 거래량(12시간전부터 지금까지)이 오전 거래량(24시간전부터 12시간전까지)보다 높은지, 오후 수익률(24시간 전 시가 - 현재 종가)이 0보다 큰지, 그리고 마지막으로 현재 종가가 목표가보다 높은지이다.

target_price_priority 같은 경우는 목표 변동성이 5%인데 전일 변동성이 3% 라면 1이상의 수치를 가지는 값이 되므로 최대 1로 제한했다.

수익률은 전체 1 중에서 target_price_priority가 적용안되는(현금으로 보유하는) 부분과 target_price_priority가 적용되는 부분으로 나누고 후자의 수익률을 구해서 전체 수익률을 구했다. 거래비용 0.001 까지 제했다.

이 때 반환값으로는 총 거래 기간, 조건을 만족한 거래 기간, 승률, 현재 수익률, 최대 수익률, MDD, 손익비이다.

target_volatility = 0.05
tickers = pyupbit.get_tickers(fiat="KRW")
print(tickers)

now = datetime.datetime.now()

trading_time = datetime.datetime(now.year, now.month, now.day, now.hour, 1)
dfs = []
for ticker in tickers:
    df = get_ohlcv(ticker, trading_time, target_volatility)
    dfs.append(df)
df = pd.concat(dfs).sort_values(by=['max_performance'], ascending=[False])
print(df)
df.to_excel('bactest.xlsx')

함수가 끝난뒤의 함수 호출 부분이다. 이제 목표 변동성을 정하고, 업비트 화폐를 모두 불러온 뒤 1년치의 정보를 종합한다. 이 때, 최대 수익률이 큰 순으로 정렬했고 이를 출력도 하면서 엑셀로도 저장했다.

분석

고 수익률 상위 30개 코인

  • 이 때의 목표 변동성은 설정하지 않았다. (100%라는 뜻)

  • MDD가 양수인 코인들은 손해를 본적이 없다는 뜻.

    • 사실 0%라고 설정했어야 했던 부분이다.

  • 최대 수익률은 9.18 이다. 즉 순 수익률 818%를 의미한다.

  • 30개 코인 중 제일 수익이 낮은 코인의 수익률도 2.40이다.

  • 수익률과 누적수익률은 비로 표현했으며 MDD는 %가 단위이다.

    • 수익률 5.0 => 500%

    • MDD 5.0 => 5%

전체 코인

수익률은 다음과 같다

  • 평균 수익률 : 199%

  • 최대 수익률 : 919%

MDD는 다음과 같다.

  • 평균 mdd : -11.3%

  • 최대 mdd : -27.4%

    • 이 mdd값은 양수값의 mdd까지 더해졌기 때문에 현재 값보다 살짝 더 높다. (예상 1% 내외)

    • 평균 MDD는 낮은 값은 아니지만 목표 변동성이 없는 것을 감안하면 굉장히 낮은편이다.

    • 그러나 최대 MDD는 무시할 수 있는 수치가 아니다. 따라서 우리는 다자화폐 혼용을 통해 리스크를 감소시킬 필요성을 느낀다.

PreviousCoinTradingNextGatsby

Last updated 3 years ago

Was this helpful?

13KB
bactest.xlsx
Backtest_allhour