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일
감사합니다
답글삭제IEX API 토큰까지는 수정을 했는데 하기와 같은 error가 발생합니다.
답글삭제혹시 어떤 문제인지 아시나요? ;;
File "D:\Anaconda3\envs\py35\lib\site-packages\pandas\io\parsers.py", line 1807, in _set
x = names.index(x)
ValueError: 'Time Period' is not in list
저도 이러한 문제가 발생되었는데 어찌 해결하셨는지요?
삭제