Open mokzheen opened 2 years ago
Hi @mokzheen Please let me know which tutorial or code snippet are you using?
I got the same error.
Here is my snippet:
!pip install git+https://github.com/AI4Finance-LLC/FinRL-Library.git
import datetime
import os
import sys
from pprint import pprint
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from finrl import config, config_tickers
from finrl.agents.stablebaselines3.models import DRLAgent
from finrl.finrl_meta.data_processor import DataProcessor
from finrl.finrl_meta.env_stock_trading.env_stocktrading import StockTradingEnv
from finrl.finrl_meta.preprocessor.preprocessors import (FeatureEngineer,
data_split)
from finrl.finrl_meta.preprocessor.yahoodownloader import YahooDownloader
from finrl.main import check_and_make_directories
from finrl.plot import (backtest_plot, backtest_stats, get_baseline,
get_daily_return, convert_daily_return_to_pyfolio_ts)
sys.path.append("../FinRL-Library")
import itertools
from finrl.config import (DATA_SAVE_DIR, RESULTS_DIR, TENSORBOARD_LOG_DIR,
TRAINED_MODEL_DIR)
train_start_date = '2006-01-01' #@param {type:"date"}
train_end_date = '2018-11-30' #@param {type:"date"}
#test_start_date = '2020-08-01' #@param {type:"date"}
#test_end_date = '2021-10-01' #@param {type:"date"}
trade_start_date = '2018-12-01' #@param {type:"date"}
trade_end_date = '2021-12-31' #@param {type:"date"}
check_and_make_directories([DATA_SAVE_DIR, TRAINED_MODEL_DIR, TENSORBOARD_LOG_DIR, RESULTS_DIR])
df_raw = YahooDownloader(start_date = train_start_date,
end_date = trade_end_date,
ticker_list = config_tickers.DOW_30_TICKER).fetch_data()
fe = FeatureEngineer(
use_technical_indicator=True,
tech_indicator_list = config.INDICATORS,
use_vix=True,
use_turbulence=True,
user_defined_feature = False)
df_pp = fe.preprocess_data(df_raw)
list_ticker = df_pp["tic"].unique().tolist()
list_date = list(pd.date_range(df_pp['date'].min(),df_pp['date'].max()).astype(str))
combination = list(itertools.product(list_date,list_ticker))
df_pp_f = pd.DataFrame(combination,columns=["date","tic"]).merge(df_pp,on=["date","tic"],how="left")
df_pp_f = df_pp_f[df_pp_f['date'].isin(df_pp['date'])]
df_pp_f.sort_values(['date','tic'], inplace=True)
df_pp_f.fillna(0, inplace=True)
train = data_split(df_pp_f, train_start_date, train_end_date)
test = data_split(df_pp_f, trade_start_date, trade_end_date)
stock_dimension = len(train.tic.unique())
state_space = 1 + 2*stock_dimension + len(config.INDICATORS)*stock_dimension
print(f"Stock Dimension: {stock_dimension}, State Space: {state_space}")
#%%
buy_cost_list = sell_cost_list = [0.001] * stock_dimension
num_stock_shares = [0] * stock_dimension
env_kwargs = {
"hmax": 100,
"initial_amount": 1000000,
"num_stock_shares": num_stock_shares,
"buy_cost_pct": buy_cost_list,
"sell_cost_pct": sell_cost_list,
"state_space": state_space,
"stock_dim": stock_dimension,
"tech_indicator_list": config.INDICATORS,
"action_space": stock_dimension,
"reward_scaling": 1e-4
}
e_train_gym = StockTradingEnv(df = train, model_name = 'A2C', mode= 'TRAIN', **env_kwargs)
env_train, _ = e_train_gym.get_sb_env()
agent = DRLAgent(env = env_train)
model_a2c = agent.get_model("a2c")
trained_a2c = agent.train_model(model=model_a2c,
tb_log_name='a2c',
total_timesteps=50000)
e_trade_gym = StockTradingEnv(df = test, mode='TRADE', model_name='A2C', turbulence_threshold = 70, risk_indicator_col = 'vix', **env_kwargs)
df_daily_return, df_actions = DRLAgent.DRL_prediction(model=trained_a2c,
environment = e_trade_gym)
I was trying to debug the environment, and I added a few prints() to see what each variable had when the exception was raised:
It seems that the sell_num_shares
should be an int, right? The exception happens here
How to fetch data for multiple crypto currencies using YahooDownloader??