Giter Site home page Giter Site logo

quantylab / rltrader Goto Github PK

View Code? Open in Web Editor NEW
342.0 36.0 354.0 11.83 MB

파이썬과 케라스를 이용한 딥러닝/강화학습 주식투자 - 퀀트 투자, 알고리즘 트레이딩을 위한 최첨단 해법 입문 (개정판)

Home Page: https://contents.premium.naver.com/misoncorp/quantylab

License: MIT License

Python 32.41% Batchfile 2.84% Jupyter Notebook 64.75%
tensorflow python deep-learning reinforcement-learning pytorch keras

rltrader's Introduction


파이썬를 이용한 딥러닝/강화학습 주식투자 - 파이토치와 케라스를 활용한 인공지능 퀀트 투자 시스템 (개정2판)

강화학습은 스스로 학습하는 머신러닝 기법으로서 주식 데이터 학습에 잘 적용되는 기법입니다. 이 책은 파이썬을 이용한 강화학습 기반의 주식투자 시뮬레이션 프로그램을 개발하는 방법을 설명합니다. 이를 위해 이론과 코드 수준에서 상세한 설명을 덧붙였습니다. 이 책을 통해 딥러닝과 강화학습을 이해하고 이를 주식투자를 비롯한 다양한 도메인에서 활용할 수 있을 것입니다.

구매 링크

표지

이 책에서 다루는 내용

  • 딥러닝과 강화학습 이론
  • 주식투자에 강화학습을 적용하는 법
  • 강화학습 기반의 주식투자 시스템 개발
  • 강화학습을 위한 실제 주식 데이터 획득 및 처리
  • 강화학습으로 주식 데이터를 학습하는 법
  • 학습한 강화학습 모델을 활용하는 법
  • 강화학습 기반의 주식투자 시스템을 커스터마이징하는 법

환경설정

개발 환경

  • Python 3.6+
  • PyTorch 1.10.1
  • TensorFlow 2.7.0
  • Keras 2.7.0 (TensorFlow에 포함되어 있음)

conda 환경에서 TF 설치

TF 1.15

TF 1.15 사용을 위해서 Python 3.6을 설치한다. TF 1.15 사용할 경우 cuda 10.0, cudnn 7.4.2 (7.3.1) 설치해야 한다. https://www.tensorflow.org/install/source#tested_build_configurations tensorflow/models#9706

conda create -n rltrader python=3.6
conda activate rltrader
pip install tensorflow-gpu==1.15
conda install cudatoolkit=10.0
conda install cudnn=7.3.1
pip install numpy
pip install pandas

TF 2.5

https://www.tensorflow.org/install/source_windows?hl=en#gpu

conda create -n rltrader2 python=3.6
conda activate rltrader2
pip install tensorflow==2.5

CUDA 11.2 cuDNN 8.1

PATH C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\bin C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\libnvvp

PyTorch

conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch

실행

  • main.py를 통해 Command Line에서 RLTrader 실행 가능합니다. run_e3.cmd를 참고해 주세요.
  • RLTrader 모듈들을 임포트하여 사용하는 것도 가능합니다. main.py 코드를 참고해 주세요.

예시

python main.py --mode train --ver v3 --name 005930 --stock_code 005930 --rl_method a2c --net dnn --start_date 20180101 --end_date 20191231

학습데이터

퀀티랩 네이버 카페에서 데이터 다운받을 수 있습니다. RLTrader 학습데이터 메뉴를 확인해 주세요.

학습데이터는 v1, v2, v3, v4 버전이 존재합니다. 주로 v3, v4를 사용하시면 됩니다. v3는 종목 데이터에 일부 중요한 시장 데이터를 추가한 학습데이터 입니다. v4는 v3에 시장데이터를 대량 추가한 데이터 입니다.

v3, v4 학습데이터는 시장 데이터와 종목 데이터를 합하여 사용하면 됩니다. data_manager.py를 참고해 주세요.

v3

  • 종목 데이터
    • date,open,high,low,close,volume,per,pbr,roe,open_lastclose_ratio,high_close_ratio,low_close_ratio,diffratio,volume_lastvolume_ratio,close_ma5_ratio,volume_ma5_ratio,close_ma10_ratio,volume_ma10_ratio,close_ma20_ratio,volume_ma20_ratio,close_ma60_ratio,volume_ma60_ratio,close_ma120_ratio,volume_ma120_ratio,ind,ind_diff,ind_ma5,ind_ma10,ind_ma20,ind_ma60,ind_ma120,inst,inst_diff,inst_ma5,inst_ma10,inst_ma20,inst_ma60,inst_ma120,foreign,foreign_diff,foreign_ma5,foreign_ma10,foreign_ma20,foreign_ma60,foreign_ma120
  • 시장 데이터
    • date, market_kospi_ma5_ratio,market_kospi_ma20_ratio,market_kospi_ma60_ratio,market_kospi_ma120_ratio,bond_k3y_ma5_ratio,bond_k3y_ma20_ratio,bond_k3y_ma60_ratio,bond_k3y_ma120_ratio

v4

  • 종목 데이터: v3 종목 데이터와 동일
  • 시장 데이터: v3 시장 데이터에 다음 시장 데이터 추가
    • TBD

프로파일링

  • python -m cProfile -o profile.pstats main.py ...
  • python profile.py

Tips

  • Windows Power Shell에서 로그 Tail 하는 방법
cat D:\dev\rltrader\output\train_000240_a2c_lstm\train_000240_a2c_lstm.log -Wait -Tail 100

Troubleshooting

TF 1.15에서 다음 에러가 나면 Python 3.6으로 맞춰준다.

NotImplementedError: Cannot convert a symbolic Tensor (lstm/strided_slice:0) to a numpy array.

original_keras_version = f.attrs['keras_version'].decode('utf8') AttributeError: 'str' object has no attribute 'decode'

https://github.com/keras-team/keras/issues/14265
https://pypi.org/project/h5py/#history
pip install h5py==2.10.0

rltrader's People

Contributors

dependabot[bot] avatar enval avatar ju1115kr avatar quantylab avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rltrader's Issues

개발중인 모듈, batch_shape에 관한 질문입니다.

안녕하세요 dev에 개발중이신 모듈을 돌려보고 있습니다.
현재, 추가 입력변수를 수집해서 실험중인데요, network 모듈의 lstm 부분에서
If using the functional API, specify the batch size by passing a batch_shape argument to your Input layer.
와 같은 오류가 발생해 해결 시도중에 있습니다. 혹시 이 모듈에서는 batch_shape를 정해줄 부분이 어디가 될 수 있을까요? 바쁘시더라도 답변 주시면 정말 감사하겠습니다.

개정판을 기다리는 독자 드림 ^^ -

main.py에서 delayed_reward_threshold 설정 값 질문

main.py에서 아래 코드를 보면 delayed_reward_threshold가 .2로 설정되어 있어 학습을 시켜보면 delayed_reward가 계속 0으로 나와 제대로 학습이 안되네요.
어느 정도로 설정하는 것이 좋을까요?

policy_learner = PolicyLearner(
stock_code=stock_code, chart_data=chart_data, training_data=training_data,
min_trading_unit=1, max_trading_unit=2, delayed_reward_threshold=.2, lr=.001)

시계열 데이터에서 training data와 test data의 기간 차이에 따른 정확성 문제

해당 교재 source code의 "main_notraining.py" 모듈에서는
투자 시뮬레이션 평가 데이터의 기간이 아래와 같이 1달로 설정 되어있습니다.
training_data = training_data[(training_data['date'] >= '2018-01-01') &
(training_data['date'] <= '2018-01-31')]

그런데 교재에는 2016년(1년)을 training data로 학습하고 2017년(1년)을 test data로 활용하셔서 monkey trader와 수익률을 비교하셨고요.

궁금한점은,
training data가 많으면 많을 수록 좋겠지만, 1년의 기간을 training data로 활용하여 비용함수를 최소가 되는 모델링을 한 후 이 모델을 가지고 1달의 test data에 적용하여 수익률을 평가하는게 논리적으로 문제가 없는지 궁금합니다.

학습모델 질문

사용한 Policy Gradient의 명칭을 알려주실수 있나요?
actor-critic 방식이 아닌것같아 질문드립니다.

mpl_finance 모듈 설치 에러

mpl_finance 모듈을 다운로드 후 Anaconda Prompt에서 python setup.py install 후
Anaconda Navigator의 환경에 mpl_finance 모듈이 보이지 않고
spyder에서 visualizer.py를 실행시키면 mpl_finance 모듈이 없다고 에러가 나옵니다
조언을 부탁드립니다

Docker 이미지 제공

코드 공개 후 1년이 넘어가다 보니 환경이 안맞아서 워닝/에러가 생기는 경우가 있음

  • 개발환경 및 코드를 Docker 이미지로 제공

코드 실행 에러

Using TensorFlow backend.
WARNING: Logging before flag parsing goes to stderr.

Process finished with exit code -1073740940 (0xC0000374)

main.py를 실행 했더니 위와 같은 에러가 뜨는데, 구글에서 찾아보니 트위터 이모지가있을때 자주 뜨는 에러인거 같습니다.

원인을 찾지 못했습니다. 도와주시면 정말 감사하겠습니다 ㅜ

Monkey Trader 구현방법에 대해서

학습을 진행할 수록 탐험 비율 감소 부분을 1로 고정하고 나머지를 비활성화 해서 구현해봤는데, 무작위적인 매매를 하고 있는것 같은 결과가 나오지 않아서 질문드립니다.

혹시 MT는 어떻게 구현하셨나요? 소스코드를 공개해주시면 정말 감사하겠습니다
image

테스트시 --net 파라미터 설정에 대한 질문입니다.

안녕하세요 ! 질문 드립니다.
모델 활용시, 테스트때 사용한 신경망 타입(--net)과 동일하게 커맨드를 넣는게 맞나요?
동일 데이터로 각기 다른 신경망 dnn cnnn lstm 을 이용해 학습했는데
모델 활용시에는 --net lstm 에서만 실행이 되는 증상을 발견했습니다.

혹시 제가 잘못 돌린 부분이 있으면 알려주시면 정말 감사드리겠습니다.
항상 답변주셔서 감사합니다.

  1. cnn으로 학습한 모델 --net cnn 적용 테스트시
    #TestDQN !python main.py --stock_code 005930 --net cnn --rl_method dqn --output_name test_005930 --num_epoches 1 --start_epsilon 0 --start_date 20190101 --end_date 20191231 --reuse_models --value_network_name dqn_cnn_value_005930
    image

  2. dnn으로 학습한 모델 --net dnn 적용 테스트시
    #TestDQN !python main.py --net dnn --stock_code 005930 --rl_method dqn --output_name test_005930 --num_epoches 1 --start_epsilon 0 --start_date 20190101 --end_date 20191231 --reuse_models --value_network_name dqn_dnn_value_005930
    image

[질문] agent.py에서 decide_action 메소드의 "confidence"에 대한 질문

agent.py :: decide_action() 에서
confidence = 1 + probs[action] 로 되어 있어
confidence는 항상 1 보다 큽니다.
그러면
agent.py :: decide_trading_unit() 에서
added_traiding = max(min(
int(confidence * (self.max_trading_unit - self.min_trading_unit)),
self.max_trading_unit-self.min_trading_unit
), 0)
에서
min( int(confidence * (self.max_trading_unit - self.min_trading_unit)), self.max_trading_unit-self.min_trading_unit )
항상 (self.max_trading_unit-self.min_trading_unit ) 만 선택 되어 "added_traiding" 이 동적으로 바뀌지 않습니다.
수정이 필요 할거 같습니다.

데이터에서 가격만 바꾸면 안되는 건가요?

안녕하세요 개정판 내주셔서 감사합니다 ^^
이전 판 공부하고나서 다른 이론들을 어떻게 적용해야하나 고민했었는데
많이 배울 수 있을 것 같습니다.

가격데이터를 일봉이 아니라 1분봉 데이터를 가지고 실행시켜봤는데 에이전트가 전혀 행동을 안하고 있어서 여쭙니당

데이터를 건드리면 안되는건지
삼성전자 데이터셋에서 시고저가 수치만 분봉의 시고저가로 고쳐서 해본건데 학습이 전혀 안되네욤..
제가 뭘 놓치고 있는지 잘 모르겠습니다..

아무쪼록 감사드립니다.

책개정판에대한 질문입니다.

책개정판은 언제쯤 출간될 예정인가요? 바쁘시더라도 답변해주시면 감사하겠습니다.

                                                                                         -개정판을 간절히 기다리고있는 독자올림-

p103 오탈자

p103에 오탈자가 있는것 같습니다.

7번과 8번 줄에서 파이썬 라이브러리인 NumPy와 Pandas를 임포트합니다.

Pandas에 대한 표시가 잘못된것 같습니다. ^^

10번 줄에서 14번 줄까지는 RLTrader...

이부분도 수정이 필요할것 같습니다.

도서의 예제 소스코드(branch) 문의

안녕하세요.

책에 나온대로 레포지토리를 clone 하여 소스코드 분석후 여러번 실험을 해보았습니다.

처음에 master branch를 사용해서 소스코드를 실행 해보았습니다.
실험은 도서의 7.1.3의 설정을 그대로 사용하였습니다.
하지만 도서epoch_summary와 비교해보니 너무 다른 형태의 그래프들을 확인 하였습니다.

혹시나 해서 v1 branch를 사용해 다시 실험을 해보았는데,
Agent그래프와 PG그래프가 뭔가 일률적으로 바뀐것 같으면서도 도서의 그래프와는 차이가 있었습니다.

master branchv1 branch를 비교 해보니 조금 수정된 부분을 확인 할 수 있었습니다.

도서와 동일한 그래프를 재현 해보려면 어떤 branch를 사용해야 하는지 문의 드립니다.

완전히 동일한 그래프를 원하는것은 아니지만 적어도 비슷한 형태의 그래프는 나와야 된다고 생각되는데.. 여러번 돌려 보아도 도서와 동일하게 재현 하기가 어렵네요..

v1 branch, master branch, 도서의 예제를 비교하여 이미지를 첨부 합니다.

어떻게 하면 도서와 동일한(최대한 비슷한) 결과를 얻을 수 있는지 답변 바랍니다.

image

image

image

image

image

코드 오류

2019-10-11 10:57:05.753075: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
LR: 0.001, DF: 0, TU: [1, 2], DRT: 0.2
C:\Users\PRO\PycharmProjects\RL AI TEST1\RLTRADER\visualizer.py:95: UserWarning: Attempting to set identical left == right == 0 results in singular transformations; automatically expanding.
ax.set_xlim(xlim) # x축 limit 재설정
Traceback (most recent call last):
File "C:/Users/PRO/PycharmProjects/RL AI TEST1/RLTRADER/main.py", line 61, in
discount_factor=0, start_epsilon=.5)
File "C:\Users\PRO\PycharmProjects\RL AI TEST1\RLTRADER\policy_learner.py", line 173, in fit
initial_balance=self.agent.initial_balance, pvs=memory_pv
File "C:\Users\PRO\PycharmProjects\RL AI TEST1\RLTRADER\visualizer.py", line 63, in plot
self.axes[2].plot(x, outvals[:, action], style)
IndexError: too many indices for array

이문제에 대한 해답을 아시는지요?

복수 지수/종목 학습 모델 구축

  • 각 종목별로 별도의 모델을 관리하기 힘들기 때문에 일반화 모델(복수 지수/종목 학습 모델)을 구축하고,
  • 시장에서 유효한지 검증한다. (알파 창출 검증이 가능)

학습 모델 가중치 가시화

  • 학습 모델의 가중치를 heatmap, bar chart 등으로 가시화
    • keras visualization 기능 가용한지 확인
  • 학습 모델 가시화하여 분석

에이전트 커스터마이징

커스터마이징 방식 중, 매 봉의 종가에 일률적으로 매매 결정을 하지 않고 어떤 특정 이벤트 발생 시(예를 들면 스토캐스틱, 혹은 단기/중기 이평선, 혹은 여러 오실레이터들의 상향돌파(매수), 혹은 하향돌파(매도) )에만 매매 결정을 하는 예제를 하나 보완해 주시면 크게 도움이 되겠습니다. 실전에서 매매회수를 줄여주고, "기다림"이라는, 보상조건 중 하나의 역할을 하겠지요. 짧은 코딩실력으로 도저히 궁리를 해봐도 답이 안나와서 여기에 직접 요청드려 봅니다.

예제 4.5, 예제 B.2 교정

예제 4.5의 79번째 줄, 예제 B.2의 79번 줄(2 군데)
confidence = 1 + probs[action]
->
confidence = probs[action]

텐서플로우 2.0과 GPU 적용 관련 질문

책을 구입해서 이해가 될 때까지 읽고 꾸역꾸역 따라가고 있는 컴알못입니다.
먼저 좋은책과 자료를 공유해 주셔서 감사드립니다.
공부를 하면서 스스로 해결하지 못하는 부분이 있어서 문의드립니다.

  1. 보다 빨리 학습을 실행시키기 위해 구글의 Colab에서 GPU를 적용하여 학습을 실행해 보면
    크게 시간이 단축되는 효과를 얻지 못하고 있습니다. 오히려 CPU를 통해 학습할 때보다 시간이 길어지는 경우도 있더군요. 다음은 테스트하여 시간을 측정한 결과입니다.

제공해주신 샘플데이터 중 한 종목을 학습하였을 때

  • CPU 통한 학습시간 : 35분 05초 26
  • GPU 통한 학습시간 : 38분 29초 92
  • TPU 통한 학습시간 : 37분 22 18

혹시, GPU를 이용하여 학습시간을 단축시키려면 별도 코드를 입력시켜줘야 하는지요 ?

  1. 구글 Colab에서 코드를 실행할 때 텐서플로우 2.0으로 업데이트를 추천하더라구요.
    그래서 텐서플로우 2.0으로 업데이트를 하면 텐서플로우 2.0을 지원하지 않는다는 메시지가 뜨고 코드가 실행 되지 않습니다.

텐서플로우 2.0에 맞게 코드를 변경해줘야 하는 것이 아닌가 생각이 들어
뚫어지게 코드를 쳐다봐도 도통 어디를 수정해야 하는지 알수가 없더군요. 컴알못의 한계인 것 같습니다.
혹시 텐서플로우 2에 맞게 코드를 변경하려면 어느 부분을 수정해야 하는지 알려 주실수 있는지요 ?

다양한 지표를 학습데이터에 추가

  • PBR, PER, ROE 등의 지표를 학습데이터에 추가
    • 쿼터별로 데이터가 변동되므로 해당되는 쿼터기간에 패딩
  • 지표를 추가하는 것이 도움이 되는지 비교 검증

policy_network에서 길이 1인 data를 왜 LSTM에 넣는지?

RNN 모델은 sequence data를 주로 다루는 모델입니다.

입력 데이터가 (N,T,D) 형태로 LSTM 모델에 들어갑니다.

구현 코드에서 T=1인 형태로 batch data가 입력되고 있습니다.
이런 경우에 굳이 LSTM 모델을 사용해서 얻는 장점이 전혀 없습니다.
Dense를 사용하면 되지 않나요?

모델에 관한 질문: 정책 경사 모델?

page 52에 이런 내용이 있습니다.
"본 책에서는 여러 강화학습 기법 중에 정책 경사를 주식투자에 적용합니다"

정책 경사라면, 정책을 예측하는 모델인데, page 86의 line23 코드에서는 (softmax가 아니고) sigmoid로 prediction을 만들어 내고 있습니다.

모델이 예측하는 것이 정책에 대한 확률은 아닌것 같습니다.
그리고, prediction과 결합하여 loss를 계산할 (PolicyLearner._get_batch()가 만들어 내는 ) target 값은 reward를 discount해서 만들어 내고 있습니다.

모델이 prediction하는 것이 정책이 아니고, Q-value를 예측하는 듯 합니다.
(정확히 Q-value도 아닙니다. default값으로 0.5가 들어가 있기 때문)

제가 잘 못 이해하고 있는 것인가요?

다양한 RL 방법 제공

  • 현재 PG만 적용되어 있는데, Actor-Critic, A2C, A3C 추가 제공
  • Strategy Pattern으로 재설계

p149 오탈자

오탈자에 대하여 이렇게 새로운 이슈로 등록해야 하는게 맞는지 잘 모르겠네요 ^^; 가이드를 주시면 거기에 따르도록 하겠습니다.

p149

open_lastclose_ratio 설명에 있어서..

시가/전일종가 비율을 구하는 방식은 **현재 종가**에 전일 종가를 빼고 전일 종가로 나누어 주는 것입니다.

현재 종가에서 전일 종가를 빼는것이 아니라,
현재 시가에서 전일 종가를 빼는것이 맞는것 같은데..

확인 부탁드립니다.

n_steps 옵션에 대해서 질문드립니다.

안녕하세요.
이 옵션이 무슨 뜻인지 잘 이해가 안되서 질문드립니다.

--num_steps

배치 사이즈를 고려해서 넣어야 하는 것으로 알고 있는데, 배치 사이즈를 파악하기가 어렵네요
수익률이나 학습의 품질에 큰 영향이 있는 옵션이 될까요??

테스트 실행, 성능에 대한 질문입니다.

안녕하십니까, 테스트 하는 와중에 궁금한게 생겨 질문 드립니다.

  1. 테스트시에 관망만 하는 에이전트가 가끔 관측되는데 올바른 학습결과라고 볼 수 있을까요?

  2. 초판 책에서는 테스트시 할인률을 0으로 두었는데 dev에서는 0으로 두지 않는 차이에 특별한 이유가 있을까요?

  3. 테스트시 학습된 신경망을 가져오는데 같은 종목, 같은 신경망인데도 실행시마다 결과(PV)가 달라지는 증상을 발견했습니다.(이런 결과가 일반적인가요?)

  4. dev 모듈에서 테스트 실행시 신경망이 저장되지 않았다는 오류가 계속 뜨는데 검토 부탁드립니다!
    (학습할 때와 다르게 save_model 하는 부분에서 경로가 잘 안잡히네요)

질문이 다소 두서없고 많았습니다만... 항상 답변해주셔서 정말 감사드립니다.
건강유의하십시오. jaylee4274 드림.
image

q_sample의 초기화

개정판 코드 내용에 관한 문의사항입니다
run() 함수의 while문 블록에서 저장된 q_sample의 데이터들은 memory 변수에 저장되고 언제 초기화가 되는 것인지 궁금하네요.
memory변수들에 q_sample 데이터를 저장하고 q_sample이 다시 신규 샘플들을 받을 때, q_sample에 있는 기존 샘플들을 지우지 않으면 신규 샘플 하나만 추가되도 num_stemps 개수(=2이상일 경우)가 충족되어 q_sample에 남아있는 기존 샘플들이 중복되어 memory에 저장되는 것이 아닌지 궁금하네요. 제가 잘못 알고 있는 것인가요 ?

policy_learner.py 질문이요

import settings 이라고 적혀있는데
이 settings 라는게 pip install 도 안되는데 어떻게 사용하죠..?

표 3.1, 표 3.2, 표 3.3 교정

(critical 하지는 않지만) 표 3.1, 표 3.2, 표 3.3의 오류를 교정합니다.

표 3.1

지점 종가(원) 매수 매도 보유 주식 수 보유 잔고 평가금 누적 손익률 보상 결정 매수 누적 보상 매도 누적 보상
1 791000 1   1 ₩9,209,000 ₩10,000,000 0   1 0
2 866000 1   2 ₩8,343,000 ₩10,075,000 0.0075   1 0
3 824000 1   3 ₩7,519,000 ₩9,991,000 -0.0009   1 0
4 960000 1   4 ₩6,559,000 ₩10,399,000 0.0399 1 -1 0
5 880000 1   5 ₩5,679,000 ₩10,079,000 0.0079 -1 -1 0
6 813000 1   6 ₩4,866,000 ₩9,744,000 -0.0256 -1 -1 0
7 810000 1   7 ₩4,056,000 ₩9,726,000 -0.0274   -1 0
8 767000 1   8 ₩3,289,000 ₩9,425,000 -0.0575 -1 0 0
9 783000 1   9 ₩2,506,000 ₩9,553,000 -0.0447   0 0
10 765000 1   10 ₩1,741,000 ₩9,391,000 -0.0609   0 0

표 3.2

지점 종가(원) 매수 매도 보유 주식 수 보유 잔고 평가금 누적 손익률 보상 결정 매수 누적 보상 매도 누적 보상
1 791000 1   1 ₩9,209,000 ₩10,000,000 0   2 0
2 866000 1   2 ₩8,343,000 ₩10,075,000 0.0075   2 0
3 824000 1   3 ₩7,519,000 ₩9,991,000 -0.0009   2 0
4 960000   1 2 ₩8,479,000 ₩10,399,000 0.0399 1 -1 -1
5 880000   1 1 ₩9,359,000 ₩10,239,000 0.0239   -1 -1
6 813000   1 0 ₩10,172,000 ₩10,172,000 0.0172 -1 -1 0
7 810000     0 ₩10,172,000 ₩10,172,000 0.0172   -1 0
8 767000 1   1 ₩9,405,000 ₩10,172,000 0.0172   0 0
9 783000 1   2 ₩8,622,000 ₩10,188,000 0.0188   0 0
10 765000 1   3 ₩7,857,000 ₩10,152,000 0.0152   0 0

표 3.3

지점 종가(원) 매수 매도 보유 주식 수 보유 잔고 평가금 누적 손익률 보상 결정 매수 누적 보상 매도 누적 보상
1 791000 1   1 ₩9,209,000 ₩10,000,000 0   3 0
2 866000 1   2 ₩8,343,000 ₩10,075,000 0.0075   3 0
3 824000 1   3 ₩7,519,000 ₩9,991,000 -0.0009   3 0
4 960000 1   4 ₩6,559,000 ₩10,399,000 0.0399 1 -2 -1
5 880000 1   5 ₩5,679,000 ₩10,079,000 0.0079 -1 -2 -1
6 813000   1 4 ₩6,492,000 ₩9,744,000 -0.0256 -1 -1 0
7 810000   1 3 ₩7,302,000 ₩9,732,000 -0.0268   -1 0
8 767000 1   4 ₩6,535,000 ₩9,603,000 -0.0397   0 0
9 783000 1   5 ₩5,752,000 ₩9,667,000 -0.0333   0 0
10 765000 1   6 ₩4,987,000 ₩9,577,000 -0.0423   0 0

76페이지 agent.py 소스 61번 라인 수정 요청 드립니다.

self.num_hold 를 self.num_stocks으로 변경하는 것이 옳을거 같습니다.

수정전
self.ratio_hold = self.num_hold / int(
self.portfolio_value / self.environment.get_price())

수정후
self.ratio_hold = self.num_stocks/ int(
self.portfolio_value / self.environment.get_price())

agent.py 문의

  1. agent.py의 line 98 added_traiding에서
    int(confidence * (self.max_trading_unit - self.min_trading_unit)) 과
    (self.max_trading_unit - self.min_trading_unit) 의 min값을 가져오는 부분이 있는데요.
    confidence가 softmax 확률값이라면 무엇을 곱해도 첫번째 value가 더 작을 것 같은데 min을 취하는 이유가 있나요?

  2. agent_custom.py 에서는 agent.py와는 다르게 act 후에 immediate_reward를 1로 넣어주는데 혹시 이유가 무엇인가요?

저장된 모델 파일의 크기와 관련하여

q_sample관련하여 LSTM신경망의 num_steps 개념을 정확히 이해하지 못한 상황에서 질문을 드렸음에도 친절하게 답변해 주셔서 많은 도움이 되었고 이에 감사드립니다. 덕분에 많은 공부가 된 것 같습니다.

아울러 또 한가지 궁금한 사항이 있어서 다시 문을 두드립니다.

인자값을 변경하고 학습을 완료한 후 저장된 모델의 파일 크기를 확인하니 모두 동일한 크기를 갖는다는 것을 확인하였습니다.
예를들면,
A2C강화학습 진행시, EPOCH(100에서 1000까지)를 변경하여도 policy와 value 파일의 크기는 각각 2,247,649byte입니다.
A3C강화학습 진행시에는 다른 인자들은 고정시키고 EPOCH(10에서 200까지)와 종목수(1종목에서 3종목 사이)까지 변경하였음에도 policy와 value 파일 각각의 크기가 2,247,640byte로 같습니다. 오히려 A2C의 파일크기가 A3C파일 크기보다 약간 더 큽니다.

epoch를 늘리거나 종목수가 늘어나면 학습량이 늘어나서 모델의 파일 크기가 커지는 줄 알았는데 그렇지가 않더군요. 이와같은 현상이 정상적인 것인가요 ? 책을 찾아봐도 관련된 설명이 없어서 다시 찾아뵙게 되었습니다.

MDP가 정책학습기(policy_learner.py)에 어떻게 적용된건가요?

마르코프 결정 프로세스가 강화학습의 핵심 알고리즘으로 알고있어요. policy_learner.py의 소스에 구체적으로 어떻게 반영되어 있는건가요? 혹시 아래 변수들이 관련있나요?

행동 및 행동에 대한 결과를 기억

            memory_sample.append(next_sample)
            memory_action.append(action)
            memory_reward.append(immediate_reward)
            memory_pv.append(self.agent.portfolio_value)
            memory_num_stocks.append(self.agent.num_stocks)
            memory = [(
                memory_sample[i],
                memory_action[i],
                memory_reward[i])
                for i in list(range(len(memory_action)))[-max_memory:]
            ]

책 오자(112페이지)

책 잘 읽고 있습니다.
112페이지 네번째 줄에 0.51 이 아니고 0.15 가 맞는건가요?

TensorFlow 1.15 vs 2.0 성능

TensorFlow 2.0을 써보니 tensorflow-gpu를 써서 GPU 활성화까지 되어도 너무 느림. RLTrader 1 epoch에 1분이 넘게 걸림. GPU 사용량을 보면 3%정도밖에 안쓰고 있어서 뭔가 이상함.

TensorFlow 1.15로 다시 설치해서 돌려보니 10배는 빨라짐 (1 epoch에 6초 정도)

원인 파악이 필요함... 일단은 TensorFlow 1.15 사용하는 걸로 결정.

기간 필터링 수정 시 발생 에러 질문

안녕하세요. 좋은 책 잘 읽고 있고, 미흡하지만 조금씩 배워나가고 있습니다.

질문은 제목처럼 기간 필터링 수정 시 발생하는 에러 문제인데요

기간을 늘리거나, 혹은 과거의 특정 기간을 학습하고 싶어서

예를들어, 아래와 같은 기간으로 설정을 실시하여 Run을 시켰을때,


training_data = training_data[(training_data['date'] >= '2015-09-23') &
(training_data['date'] <= '2015-10-14')]

아래와 같은 에러가 발생합니다.


File "D:/rltrader-master/rltrader-master/main_custom.py", line 63, in
discount_factor=0, start_epsilon=.5)
File "D:\rltrader-master\rltrader-master\policy_learner.py", line 178, in fit
initial_balance=self.agent.initial_balance, pvs=memory_pv
File "D:\rltrader-master\rltrader-master\visualizer.py", line 63, in plot
self.axes[2].plot(x, outvals[:, action], style)
IndexError: too many indices for array

여러 원인을 상상하여 혼자 힘으로 찾아보려는데 잘 되지 않아서 질문을 남깁니다.

답변 기다리겠습니다. 감사합니다.

예제 4.4 교정

예제 4.4의 61번줄을 다음과 같이 교정합니다.

  • 교정 전
    self.ratio_hold = self.num_hold / int(
  • 교정 후
    self.ratio_hold = self.num_stocks / int(

Policy gradient말고 다른 알고리즘 적용시

보통 A3C같은 알고리즘들은 게임용으로 제작됐는데요,
Policy gradient말고 다른 알고리즘 적용시 policy_learner, policy_network 부분만 수정해주면 될까요?
어떤식으로 적용할지 너무 어렵네요

v1 으로 하면 ‘close’ KeyError 가 납니다

개정판을 읽고 있습니다.
예제로 들어있는 v1과 v2의 csv 파일이 달라서 그런지 (v1은 header가 없구요, v2는 헤더가 있습니다)
v1으로 실행하면 close가 없다고 KeyError가 납니다
두가지 버전이 모두 실행되게 하려면 어떻게 고치면 될까요?

임시로

def load_data(fpath, date_from, date_to, ver):
    header = None if ver == 'v1' else 0
    data = pd.read_csv(fpath, thousands=',', header=header, 
        converters={'date': lambda x: str(x)})

    if ver == 'v1':
        data.columns = ['date', 'open', 'high', 'low', 'close', 'volume']

로 바꿔서 하고 있습니다.

테스트 결과 출력

안녕하세요! 개정판 책이 배송오기만을 기다리고 있습니다. ㅎ.ㅎ

테스트 결과 출력에 대하여 질문이 있습니다.
이전 코드와 금번 코드 모두 마찬가지로, 테스트할 경우 하나의 epoch에 대한 결과가 나오는데..
이를 세부적으로 확인하려면 어떤 방식으로 코드를 추가 작성해야 할까요?

테스트 데이터셋에 대하여 row건 별로 에이전트의 액션, 리워드, 평잔 등을 확인하고 싶습니다.

감사합니다..

데이터 자질 획득방법

안녕하세요. 책을 보면서 열심히 연습하고있습니다!

혹시 v2에서 필요한 자질들을 어떤 방식으로 획득하셨는지 알 수 있을까요?

kospi지수나 국채는 영웅문hts에서 얻어보려고 노력하는데 잘 안되더라구요. per,pbr,roe는 아직 찾는 중입니다.

어떤 방식으로 데이터를 받아오셨는지 궁금합니다!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.