Zipline은 알고리즘 트레이딩 라이브러리로서 백테스팅 기능을 제공합니다
Zipline 은 quantopian 에서 만든 오픈소스이다.
quantopian
https://www.quantopian.com/
zipline
https://github.com/quantopian/zipline
기본 사용법
https://www.zipline.io/beginner-tutorial
conda 를 통한 가상환경 설정....
집라인은 python 3.5 버전까지 지원하여,
최신버전(3.7)에서는 conda env 를 통하여 3.5버전을 사용하면 쉽게 할수 있다.
$ conda create -n py35 python=3.5 anaconda
마지막에 anaconda 는 아나콘다 페키지를 설치 하는듯함.
env list
$ conda env list
env 활성화
$ conda activate 이름
env 삭제
$ conda env remove -n 이름
1. 설치 ( os: ubuntu 18.04 ) (콘다를 이용하여 설치 하는것을 추천함.)
conda env 를 통하여 3.5 python 환경을 만들자.
$ conda create -n zipline_env python=3.5
- install with pip
$ pip install zipline
- pip uninstall 페키지
$ pip uninstall (페키지명)
https://www.zipline.io/install 에 보면 pip 를 사용하여 설치 하는것이 복잡하다고 나와있다.
자세한 사항은 링크를 통해 확인 필요합니다.
(설치는 되는데 아무것도 안되는듯 하다...)
- install with conda
$ conda install -c Quantopian zipline
conda install 로 하면 zipline 에서 필요한 페키지 들을
- conda version 4.7.11 에서 문제가 있는 듯 //
https://github.com/quantopian/zipline/issues/2514 )
- conda version 4.7.12 에서는 설치 됨.
conda 페키지 설치 (해당 버전)
$ conda install 페키지이름=버전이름
$ conda install -c conda-forge 페키지이름=버전이름
conda 페키지 삭제
$ conda remove 페키지이름
2. Tutorial
import pandas_datareader.data as web
import datetime
import matplotlib.pyplot as plt
from zipline.api import order, symbol
from zipline.algorithm import TradingAlgorithm
# datastart = datetime.datetime(2010, 1, 1)
end = datetime.datetime(2016, 3, 19)
data = web.DataReader("AAPL", "yahoo", start, end)
data = data[['Adj Close']]
data.columns = ['AAPL']
data = data.tz_localize('UTC')
def initialize(context):
pass
def handle_data(context, data):
order(symbol('AAPL'), 1)
algo = TradingAlgorithm(initialize=initialize, handle_data=handle_data)
result = algo.run(data)
plt.plot(result.index, result.portfolio_value)
plt.show()
참고:
https://wikidocs.net/4429
zipline 1.3.0 기준입니다.
위와 같이 하면 아래와 같은 에러가 나옴.
$ /home/kj/anaconda3/envs/zipline/bin/python /home/kj/PycharmProjects/stock/zipline_.py
Traceback (most recent call last):
File "/home/kj/PycharmProjects/stock/zipline_.py", line 40, in <module>
algo = TradingAlgorithm(initialize=initialize, handle_data=handle_data)
File "/home/kj/anaconda3/envs/zipline/lib/python3.5/site-packages/zipline/algorithm.py", line 279, in __init__
self.trading_environment = TradingEnvironment()
File "/home/kj/anaconda3/envs/zipline/lib/python3.5/site-packages/zipline/finance/trading.py", line 103, in __init__
self.bm_symbol, File "/home/kj/anaconda3/envs/zipline/lib/python3.5/site-packages/zipline/data/loader.py", line 149, in load_market_data
environ, File "/home/kj/anaconda3/envs/zipline/lib/python3.5/site-packages/zipline/data/loader.py", line 216, in ensure_benchmark_data
data = get_benchmark_returns(symbol)
File "/home/kj/anaconda3/envs/zipline/lib/python3.5/site-packages/zipline/data/benchmarks.py", line 35, in get_benchmark_returns
data = r.json()
File "/home/kj/anaconda3/envs/zipline/lib/python3.5/site-packages/requests/models.py", line 897, in json
return complexjson.loads(self.text, **kwargs)
File "/home/kj/anaconda3/envs/zipline/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "/home/kj/anaconda3/envs/zipline/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/home/kj/anaconda3/envs/zipline/lib/python3.5/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
json.decoder.JSONDecodeError 의 에러 가 난다.
해당 에러는 아래 링크를 통해 해결해 볼수 있을 것 같다.
https://github.com/quantopian/zipline/issues/2480
https://blog.naver.com/rhgkrsus1/221621557450
윗 링크에 따르면,
Zipline에서 benchmark.py 통하여 데이터를 받아오는 것에 실패
-> None 를 Json으로 전달해서 에러가 나는 것으로 보여진다.
해당 에러를 고치는 방법은
1. https://iextrading.com/developer/#sunset-schedule 회원 가입(무료), PUBLISHABLE 토큰을 받는다.
2. zipline 이 설치 되어 있는 폴더에서 zipline\data\benchmark.py 파일을 열어서
r = requests.get(
'https://api.iextrading.com/1.0/stock/{}/chart/5y'.format(symbol)
)
해당 소스를 수정한다.
~~ 요기서 중요~~~
conda 가상환경을 사용중이라면
anaconda 설치 폴더에 가상 envs 라는 폴더안에 있는 zipline 에서 수정해야 한다
ex) 우분투 anaconda3/envs/(가상환경이름)/lib/python3.5/site-packages/zipline/data/benchmarks.py
IEX_KEY = '키키키키키키키'
r = requests.get(
"https://cloud.iexapis.com/stable/stock/{}/chart/5y?chartCloseOnly=True&token={}".format(symbol, IEX_KEY)
)
# r = requests.get(
# 'https://api.iextrading.com/1.0/stock/{}/chart/5y'.format(symbol)
# )
해당 파일을 수정 하고 실행 하면 정상적으로 동작한다..
마지막 수정 : 19년 11월 08일