"피포리오" 도구를 사용하여 백테스트 자본 곡선의 평가

저자:선함, 2020-06-23 09:55:35, 업데이트: 2023-10-31 21:02:34

img

전문

며칠 전에 FMZ 전략 백테스트 결과의 이익과 손실 곡선 출력이 비교적 간단하다는 것이 밝혀졌습니다. 그래서 수익 결과 데이터를 얻고 직접 처리하여 보다 자세한 자본 곡선 평가 보고서를 얻고 그래픽으로 표시 할 수 있는지 생각했습니다. 아이디어를 작성하기 시작했을 때 그렇게 쉬운 일이 아니라는 것을 알게되었습니다. 그래서 누군가가 동일한 아이디어를 가지고 있으며 해당 도구를 이미 만들었는지 궁금합니다. 그래서 인터넷을 검색하고 실제로 그러한 도구가 있음을 발견했습니다.pyfolio.

피포리오란 무엇입니까?

pyfolioquantinc이 개발한 금융 포트폴리오 성과 및 위험 분석을 위한 파이썬 라이브러리입니다. Zipline 오픈 소스 백테스트 라이브러리와 잘 작동합니다.Zipline, Alphalens, Pyfolio, FactSet데이터 등

그 핵심pyfolio이 그래프는 다양한 독립적인 그래프로 구성되어 거래 알고리즘의 성능에 대한 포괄적인 그림을 제공합니다.

GitHub address: https://github.com/quantopian/pyfolio

파이폴리오 사용법을 배우세요.

이 도구에 대한 온라인 학습 자료가 거의 없기 때문에 쉽게 사용하기에는 시간이 오래 걸립니다.

PyFolioAPI 참조:

https://www.quantopian.com/docs/api-reference/pyfolio-api-reference#pyfolio-api-reference

다음은 보다 상세한 소개입니다pyfolio이 플랫폼은 미국 주식의 백테스팅을 위해 사용될 수 있습니다. 백테스팅 결과는pyfolio저는 대략적으로 배웠어요. 다른 기능들이 상당히 강력해 보입니다.

pyfolio를 설치합니다

설치pyfolio비교적 간단합니다. 그냥 GitHub에 있는 지침을 따르세요.

pyfolio로 표시된 FMZ 백테스트 결과

먼저 FMZ 플랫폼에서 자본 곡선 데이터를 얻습니다.

img

위 그림의 전체 화면 옆에 있는 버튼을 클릭하고, Download CSV를 선택합니다. 얻은 CSV 데이터의 형식은 다음과 같습니다 (파일 이름은 필요에 따라 변경할 수 있습니다):

img

분석 결과에 대한 비교 벤치마크를 가지고 싶다면 거래 목표의 K-라인 일일 데이터를 준비해야합니다. K-라인 데이터가 없으면 소득 데이터만 분석 할 수 있지만 벤치마크 데이터 분석 결과에 대한 몇 가지 더 많은 지표가있을 것입니다. 예를 들어: 알파, 베타 등. 다음 내용은 기본 K-라인 데이터에 따라 작성됩니다.

우리는 FMZ 연구 환경을 통해 플랫폼에서 직접 K-라인 데이터를 얻을 수 있습니다:

# Use the API provided by the FMZ research environment to obtain K-line data which equal to the revenue data
dfh = get_bars('bitfinex.btc_usd', '1d', start=str(startd), end=str(endd))

데이터가 준비된 후, 우리는 코딩을 시작할 수 있습니다. 우리는 수집 된 데이터를 처리하여pyfolio그리고 그 다음 전화create_returns_tear_sheet인터페이스pyfolio계산하고 결과물을 내보낼 수 있습니다returns, benchmark_rets=None그리고live_start_date=None세 개의 매개 변수

return매개 변수 (parameter) 는 소득 데이터가 필요합니다.benchmark_rets기준값 데이터인 경우, 필요 없습니다.live_start_datelive_start_date필요없습니다.

이 매개 변수의 의미는returns실제 시장에서 시작합니까? 예를 들어, 우리의returns위와 같이, 우리가 2019-12-01 이후 실제 시장을 시작한다고 가정하고, 이전 시뮬레이션 시장 또는 백테스트의 결과라고 가정하면 다음과 같이 설정할 수 있습니다.live_start_date = '2019-12-01'.

매개 변수를 설정함으로써, 우리는 이론적으로 우리의 전략이 과장되어 있는지 분석할 수 있습니다. 샘플의 내부와 외부의 차이가 크다면, 이것은 과장되어 있는 가능성이 높습니다.

우리는 FMZ 연구 환경에서 이 분석 기능을 구현할 수 있습니다. 또는 우리는 지역적으로 구현할 수 있습니다. 다음은 FMZ 연구 환경에서 구현을 예로 들 수 있습니다.

https://www.fmz.com/upload/asset/1379deaa35b22ee37de23.ipynb?name=%E5%88%A9%E7%94%A8pyfolio%E5%B7%A5%E5%85%B7%E8%AF%84%E4%BB%B7%E5%9B%9E%E6%B5%8B%E8%B5%84%E9%87%91%E6%9B%B2%E7%BA%BF(%E5%8E%9F%E5%88%9B).ipynb
# First, create a new "csv to py code.py" python file locally and copy the following code to generate the py code containing the CSV file of the fund curve downloaded from FMZ. Running the newly created py file locally will generate "chart_hex.py" file.

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import binascii

# The file name can be customized as needed, this example uses the default file name
filename = 'chart.csv'
with open(filename, 'rb') as f:
    content = f.read()
# csv to py
wFile = open(filename.split('.')[0] + '_hex.py', "w")
wFile.write("hexstr = bytearray.fromhex('" +
            bytes.decode(binascii.hexlify(content))
            + "').decode()\nwFile = open('" + filename + "', 'w')\nwFile.write(hexstr)\nwFile.close()")
wFile.close()
# Open the "chart_hex.py" file generated above, copy all the contents and replace the following code blocks, and then run the following code blocks one by one to get the chart.csv file

hexstr = bytearray.fromhex('efbbbf224461746554696d65222c22e6b5aee58aa8e79b88e4ba8f222c22e4ba8be4bbb6220a22323031392d31302d33312030303a30303a3030222c300a22323031392d31312d30312030303a30303a3030222c300a22323031392d31312d30322030303a30303a3030222c2d302e3032383434353837303635373338383930350a22323031392d31312d30332030303a30303a3030222c302e3030373431393439393432333839363936390a22323031392d31312d30342030303a30303a3030222c2d302e30323234373732373731373434313231370a22323031392d31312d30352030303a30303a3030222c2d302e30323033393930383333363836353735390a22323031392d31312d30362030303a30303a3030222c2d302e3034393935353039333230393332303435360a22323031392d31312d30372030303a30303a3030222c2d302e303434333232333634383035363033370a22323031392d31312d30382030303a30303a3030222c2d302e3032353631313934393330353935313637360a22323031392d31312d30392030303a30303a3030222c302e3032363331303433393432313739303536360a22323031392d31312d31302030303a30303a3030222c302e3033303232303332383333303436333137350a22323031392d31312d31312030303a30303a3030222c302e3033313230373133363936363633313133330a22323031392d31312d31322030303a30303a3030222c2d302e3031383533323831363136363038333135350a22323031392d31312d31332030303a30303a3030222c2d302e30313736393032353136363738333732320a22323031392d31312d31342030303a30303a3030222c2d302e3032323339313034373338373637393338360a22323031392d31312d31352030303a30303a3030222c2d302e3030383433363137313736363631333438370a22323031392d31312d31362030303a30303a3030222c302e3031373430363536343033313836383133330a22323031392d31312d31372030303a30303a3030222c302e303232393131353234343739303732330a22323031392d31312d31382030303a30303a3030222c302e3033323032363631303538383035373131340a22323031392d31312d31392030303a30303a3030222c302e303138393230323836383338373438380a22323031392d31312d32302030303a30303a3030222c302e30363632363938393337393232363738390a22323031392d31312d32312030303a30303a3030222c302e3036303835343430303337353130313033370a22323031392d31312d32322030303a30303a3030222c302e31343432363035363831333031303231330a22323031392d31312d32332030303a30303a3030222c302e32343239343037303935353332323336370a22323031392d31312d32342030303a30303a3030222c302e32313133303432303033353237373934310a22323031392d31312d32352030303a30303a3030222c302e323735363433303736313138343937380a22323031392d31312d32362030303a30303a3030222c302e323532343832323739343237363235360a22323031392d31312d32372030303a30303a3030222c302e32343931313136313839303039383437370a22323031392d31312d32382030303a30303a3030222c302e31313038373135373939323036393134310a22323031392d31312d32392030303a30303a3030222c302e313633343530313533373233393139390a22323031392d31312d33302030303a30303a3030222c302e31393838303132323332343735393737350a22323031392d31322d30312030303a30303a3030222c302e31363633373536393939313635393038350a22323031392d31322d30322030303a30303a3030222c302e32303638323732383333323337393630370a22323031392d31322d30332030303a30303a3030222c302e32303434323831303032303830393033320a22323031392d31322d30342030303a30303a3030222c302e323030353636323836353230383830360a22323031392d31322d30352030303a30303a3030222c302e31323434363439343330303739303635360a22323031392d31322d30362030303a30303a3030222c302e31303032343339383239393236303637332c302e31303032343339383239393236303637330a22323031392d31322d30372030303a30303a3030222c302e31303637313232383937343130373831360a22323031392d31322d30382030303a30303a3030222c302e31323839363336313133333032313036310a22323031392d31322d30392030303a30303a3030222c302e313337393030323234303239323136320a22323031392d31322d31302030303a30303a3030222c302e31313432333735383637323436303130350a22323031392d31322d31312030303a30303a3030222c302e31323638353037323134353130343038320a22323031392d31322d31322030303a30303a3030222c302e31343139333631313738343432333234330a22323031392d31322d31332030303a30303a3030222c302e31333838333632383537383138383536370a22323031392d31322d31342030303a30303a3030222c302e313136323031343031393435393734350a22323031392d31322d31352030303a30303a3030222c302e31363135333931303631363930313932330a22323031392d31322d31362030303a30303a3030222c302e31343937383138343836363238323231380a22323031392d31322d31372030303a30303a3030222c302e31353734393833333435363438393438320a22323031392d31322d31382030303a30303a3030222c302e32343234393031303233333139323635380a22323031392d31322d31392030303a30303a3030222c302e32313830363838353631363039303035350a22323031392d31322d32302030303a30303a3030222c302e323938383636303034333936303139340a22323031392d31322d32312030303a30303a3030222c302e33303135333036303934383834370a22323031392d31322d32322030303a30303a3030222c302e323938363835393334383634363038370a22323031392d31322d32332030303a30303a3030222c302e333039333035323733383735393130310a22323031392d31322d32342030303a30303a3030222c302e333834363231343935353136383931320a22323031392d31322d32352030303a30303a3030222c302e33343532373534363233383138313130360a22323031392d31322d32362030303a30303a3030222c302e33363235323332383833363737313035330a22323031392d31322d32372030303a30303a3030222c302e33343937363331393933333834333133360a22323031392d31322d32382030303a30303a3030222c302e33303732393733373234353434373938360a22323031392d31322d32392030303a30303a3030222c302e33323238383132323432363135363530370a22323031392d31322d33302030303a30303a3030222c302e33343134363537343239333438363535330a22323031392d31322d33312030303a30303a3030222c302e333435323733393139363237303738320a22323032302d30312d30312030303a30303a3030222c302e33353730313633323035353433343337340a22323032302d30312d30322030303a30303a3030222c302e33343937353937393034363236373934370a22323032302d30312d30332030303a30303a3030222c302e33373032333633333138303534353335370a22323032302d30312d30342030303a30303a3030222c302e33383636373137373837343037313635370a22323032302d30312d30352030303a30303a3030222c302e33383834373536373836393031343634330a22323032302d30312d30362030303a30303a3030222c302e34313331323236353139383433373731340a22323032302d30312d30372030303a30303a3030222c302e34323335323332383237303436333733350a22323032302d30312d30382030303a30303a3030222c302e34363837333531323838353035333330330a22323032302d30312d30392030303a30303a3030222c302e353436373135313832363033383332380a22323032302d30312d31302030303a30303a3030222c302e353530373037323136333937383830310a22323032302d30312d31312030303a30303a3030222c302e35353531373436393236393938310a22323032302d30312d31322030303a30303a3030222c302e353632323130363337343737323731330a22323032302d30312d31332030303a30303a3030222c302e353734373831373030393536383631370a22323032302d30312d31342030303a30303a3030222c302e353632383330303731353536353831350a22323032302d30312d31352030303a30303a3030222c302e363538323839383038313031393136380a22323032302d30312d31362030303a30303a3030222c302e363732323034393830303331333936370a22323032302d30312d31372030303a30303a3030222c302e363537313832383237323238323335380a22323032302d30312d31382030303a30303a3030222c302e363734393831383838383639373536330a22323032302d30312d31392030303a30303a3030222c302e363739373632303637393239383131330a22323032302d30312d32302030303a30303a3030222c302e363334313332373332393636313231370a22323032302d30312d32312030303a30303a3030222c302e363237353837313436323430323734370a22323032302d30312d32322030303a30303a3030222c302e363331313336373230353334393834370a22323032302d30312d32332030303a30303a3030222c302e3630313936323331393931343334360a22323032302d30312d32342030303a30303a3030222c302e363036343239313935383633313431360a22323032302d30312d32352030303a30303a3030222c302e35383130363933393531373337390a22323032302d30312d32362030303a30303a3030222c302e363133313034353130383436353937380a22323032302d30312d32372030303a30303a3030222c302e3632393938323638373737383035350a22323032302d30312d32382030303a30303a3030222c302e363831333134363734333130313533350a22323032302d30312d32392030303a30303a3030222c302e373134303533393533383834313233350a22323032302d30312d33302030303a30303a3030222c302e373433383032353331363031313135360a22323032302d30312d33312030303a30303a3030222c302e373535393639303935383539313330370a22323032302d30322d30312030303a30303a3030222c302e373533383030313630323737353438310a22323032302d30322d30322030303a30303a3030222c302e373534343434333437323732343132350a22323032302d30322d30332030303a30303a3030222c302e373435373138393532343434373738330a22323032302d30322d30342030303a30303a3030222c302e3738373636303035313130343530340a22323032302d30322d30352030303a30303a3030222c302e373935393939343930353732393834360a22323032302d30322d30362030303a30303a3030222c302e373935323037323039363636373034390a22323032302d30322d30372030303a30303a3030222c302e3832393234363232343838363336350a22323032302d30322d30382030303a30303a3030222c302e383239393034373635353939363035350a22323032302d30322d30392030303a30303a3030222c302e383338363639323137313033313436350a22323032302d30322d31302030303a30303a3030222c302e38353830313634373631380a22323032302d30322d31312030303a30303a3030222c302e383130323530393437393936313938330a22323032302d30322d31322030303a30303a3030222c302e383433323631313436333636313030320a22323032302d30322d31332030303a30303a3030222c302e383535383536353834363731333632320a22323032302d30322d31342030303a30303a3030222c302e383337323730363631383738303935360a22323032302d30322d31352030303a30303a3030222c302e383333353332343038383538303234330a22323032302d30322d31362030303a30303a3030222c302e383636383832343034353334343633320a22323032302d30322d31372030303a30303a3030222c302e383836363634323232323038333831310a22323032302d30322d31382030303a30303a3030222c302e393032363430303937303731373033390a22323032302d30322d31392030303a30303a3030222c302e383832373838333631373939333438380a22323032302d30322d32302030303a30303a3030222c302e383530303035363732363738333734320a22323032302d30322d32312030303a30303a3030222c302e3737383436363530373530313739360a22323032302d30322d32322030303a30303a3030222c302e373737383734393835393335313437350a22323032302d30322d32332030303a30303a3030222c302e373731333834393530303532383132330a22323032302d30322d32342030303a30303a3030222c302e373937383030363936353434323134340a22323032302d30322d32352030303a30303a3030222c302e373736383231373934313333363939370a22323032302d30322d32362030303a30303a3030222c302e373938353333313136353336313831310a22323032302d30322d32372030303a30303a3030222c302e383530343335363139343238353239390a22323032302d30322d32382030303a30303a3030222c302e383734333333393138383334393638310a22323032302d30322d32392030303a30303a3030222c302e3838383336363333393338343837380a22323032302d30332d30312030303a30303a3030222c302e383933393737393637343631333438380a22323032302d30332d30322030303a30303a3030222c302e3931323431323035313530303336362c302e3931323431323035313530303336360a22323032302d30332d30332030303a30303a3030222c302e383733353632323939353238363532330a22323032302d30332d30342030303a30303a3030222c302e383532353336353235333030343039310a22323032302d30332d30352030303a30303a3030222c302e383633323633313830363733313335350a22323032302d30332d30362030303a30303a3030222c302e383734303237343632353730373730350a22323032302d30332d30372030303a30303a3030222c302e383634323439323631363431353135360a22323032302d30332d30382030303a30303a3030222c302e38373630353132313331363135333031').decode()
wFile = open('chart.csv', 'w')
wFile.write(hexstr)
wFile.close()

!ls -la

cat chart.csv
# Install pyfolio library in research environment

!pip3 install --user pyfolio
import pandas as pd
import sys
sys.path.append('/home/quant/.local/lib/python3.6/site-packages')
import pyfolio as pf
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
from fmz import * # import all FMZ functions

# Read fund curve data, FMZ platform download, cumulative income data
df=pd.read_csv(filepath_or_buffer='chart.csv')
# Convert to date format
df['Date'] = pd.to_datetime(df['DateTime'],format='%Y-%m-%d %H:%M:%S')
# Get start and end time
startd = df.at[0,'Date']
endd = df.at[df.shape[0]-1,'Date']

# Read the target asset daily K-line data, and use it as the benchmark income data
# Use the API provided by the FMZ research environment to obtain K-line data equal to the revenue data
dfh = get_bars('bitfinex.btc_usd', '1d', start=str(startd), end=str(endd))
dfh=dfh[['close']]
# Calculate the daily rise and fall based on the closing price of k-line data
dfh['close_shift'] = dfh['close'].shift(1)
dfh = dfh.fillna(method='bfill') #  Look down for the nearest non-null value, fill the exact position with this value, full name "backward fill"
dfh['changeval']=dfh['close']-dfh['close_shift']
dfh['change']=dfh['changeval']/dfh['close_shift']
# Frequency changes keep 6 decimal places
dfh = dfh.round({'change': 6})

# Revenue data processing, the FMZ platform obtains the cumulative revenue, and converts it to the daily revenue change rate
df['return_shift'] = df['Floating Profit and Loss'].shift(1)
df['dayly']=df['Floating P&L']-df['return_shift']
chushizichan = 3 #  Initial asset value in FMZ backtest
df['returns'] = df['dayly']/(df['return_shift']+chushizichan)
df=df[['Date','Floating Profit and Loss','return_shift','dayly','returns']]
df = df.fillna(value=0.0)
df = df.round({'dayly': 3}) # retain three decimal places
df = df.round({'returns': 6})

# Convert pd.DataFrame to pd.Series required for pyfolio earnings
df['Date'] = pd.to_datetime(df['Date'])
df=df[['Date','returns']]
df.set_index('Date', inplace=True)
# Processed revenue data
returns = df['returns'].tz_localize('UTC')

# Convert pd.DataFrame to pd.Series required for pyfolio benchmark returns
dfh=dfh[['change']]
dfh = pd.Series(dfh['change'].values, index=dfh.index)
# Processed benchmark data
benchmark_rets = dfh

# The point in time when real-time trading begins after the strategy's backtest period.
live_start_date = '2020-02-01'

# Call pyfolio's API to calculate and output the fund curve analysis result graph
# "returns" Parameters are required, the remaining parameters can not be entered
pf.create_returns_tear_sheet(returns,benchmark_rets=benchmark_rets,live_start_date=live_start_date)

출력 분석 결과:

img img

결과 해석

많은 출력 데이터가 있습니다, 우리는 진정하고 이러한 지표가 무엇을 의미하는지 알아야합니다. 몇 가지를 소개해 드리겠습니다. 관련 지표에 대한 소개를 찾고 지표의 의미를 이해하면 거래 전략 상태를 해석 할 수 있습니다.

  • 연간 수익

연간수익률은 현재의 수익률 (일일 수익률, 주간수익률, 월간수익률 등) 을 연간수익률으로 변환하여 계산된다. 이것은 이론적 수익률이며 실제로 달성된 수익률이 아니다. 연간수익률은 연간수익률과 구별되어야 한다. 연간수익률은 전략 실행의 1년 동안의 수익률을 가리키며 실제 수익률이다.

  • 누적 수익

가장 이해하기 쉬운 개념은 전략의 수익률입니다. 전략의 시작부터 끝까지 총 자산의 변화율입니다. 연간 변동성 연간 변동율은 투자 목표의 변동 위험을 측정하는 데 사용됩니다.

  • 샤프 비율

전체 유닛 리스크에서 전략이 얻을 수 있는 초과 수익을 설명합니다.

  • 최대 수요

전략의 가장 큰 손실을 설명합니다. 최대 인출은 보통 더 작을수록 더 좋습니다.

  • 오메가 비율

또 다른 위험 보상 성능 지표입니다. 샤프 비율에 대한 가장 큰 장점은-구조에 의해-모든 통계적 순간을 고려하고, 샤프 비율은 첫 두 순간을 고려합니다.

  • 소르티노 비율

이 전략이 유닛의 하향 위험 하에 얻을 수 있는 초과 수익을 설명합니다.

  • 일일 위험 가치

위험 당일 가치-다른 매우 인기있는 위험 지표. 이 경우 95%의 경우 지위 (포트폴리오) 는 또 다른 날로 유지되며 손실은 1.8%를 초과하지 않습니다.

참고:https://towardsdatascience.com/the-easiest-way-to-evaluate-the-performance-of-trading-strategies-in-python-4959fd798bb3

  • 꼬리 비율

일일 수익의 분포를 위해 95번째와 5번째 쿼틸을 선택하고, 절대 값을 얻기 위해 나눕니다. 본질적인 의미는 얻은 수익이 손실보다 몇 배나 크다는 것입니다.

  • 안정성

이것은 안정성이라고 불립니다. 사실, 그것은 매우 간단합니다. 즉, 시간 증가는 누적 순 가치를 설명합니다. 즉, 회귀의 r 제곱입니다. 이것은 약간 추상적입니다. 간단히 설명해 보겠습니다.

참고:https://blog.csdn.net/qtlyx/article/details/88724236

작은 제안

FMZ가 리치 캐피탈 곡선의 평가 기능을 높이고, 역사적인 백테스트 결과를 저장 기능을 높여서 백테스트 결과를 더 편리하고 전문적으로 표시할 수 있으며, 더 나은 전략을 만드는 데 도움이 될 수 있기를 바랍니다.


더 많은