Quick StartΒΆ
Open main.py
1import os
2from typing import List
3from argparse import ArgumentParser
4from finrl import config
5from finrl.config_tickers import DOW_30_TICKER
6from finrl.config import (
7 DATA_SAVE_DIR,
8 TRAINED_MODEL_DIR,
9 TENSORBOARD_LOG_DIR,
10 RESULTS_DIR,
11 INDICATORS,
12 TRAIN_START_DATE,
13 TRAIN_END_DATE,
14 TEST_START_DATE,
15 TEST_END_DATE,
16 TRADE_START_DATE,
17 TRADE_END_DATE,
18 ERL_PARAMS,
19 RLlib_PARAMS,
20 SAC_PARAMS,
21 ALPACA_API_KEY,
22 ALPACA_API_SECRET,
23 ALPACA_API_BASE_URL,
24)
25
26# construct environment
27from finrl.meta.env_stock_trading.env_stocktrading_np import StockTradingEnv
28
29
30def build_parser():
31 parser = ArgumentParser()
32 parser.add_argument(
33 "--mode",
34 dest="mode",
35 help="start mode, train, download_data" " backtest",
36 metavar="MODE",
37 default="train",
38 )
39 return parser
40
41
42# "./" will be added in front of each directory
43def check_and_make_directories(directories: List[str]):
44 for directory in directories:
45 if not os.path.exists("./" + directory):
46 os.makedirs("./" + directory)
47
48
49
50def main():
51 parser = build_parser()
52 options = parser.parse_args()
53 check_and_make_directories([DATA_SAVE_DIR, TRAINED_MODEL_DIR, TENSORBOARD_LOG_DIR, RESULTS_DIR])
54
55 if options.mode == "train":
56 from finrl import train
57
58 env = StockTradingEnv
59
60 # demo for elegantrl
61 kwargs = {} # in current meta, with respect yahoofinance, kwargs is {}. For other data sources, such as joinquant, kwargs is not empty
62 train(
63 start_date=TRAIN_START_DATE,
64 end_date=TRAIN_END_DATE,
65 ticker_list=DOW_30_TICKER,
66 data_source="yahoofinance",
67 time_interval="1D",
68 technical_indicator_list=INDICATORS,
69 drl_lib="elegantrl",
70 env=env,
71 model_name="ppo",
72 cwd="./test_ppo",
73 erl_params=ERL_PARAMS,
74 break_step=1e5,
75 kwargs=kwargs,
76 )
77 elif options.mode == "test":
78 from finrl import test
79 env = StockTradingEnv
80
81 # demo for elegantrl
82 kwargs = {} # in current meta, with respect yahoofinance, kwargs is {}. For other data sources, such as joinquant, kwargs is not empty
83
84 account_value_erl = test(
85 start_date=TEST_START_DATE,
86 end_date=TEST_END_DATE,
87 ticker_list=DOW_30_TICKER,
88 data_source="yahoofinance",
89 time_interval="1D",
90 technical_indicator_list=INDICATORS,
91 drl_lib="elegantrl",
92 env=env,
93 model_name="ppo",
94 cwd="./test_ppo",
95 net_dimension=512,
96 kwargs=kwargs,
97 )
98 elif options.mode == "trade":
99 from finrl import trade
100 env = StockTradingEnv
101 kwargs = {}
102 trade(
103 start_date=TRADE_START_DATE,
104 end_date=TRADE_END_DATE,
105 ticker_list=DOW_30_TICKER,
106 data_source="yahoofinance",
107 time_interval="1D",
108 technical_indicator_list=INDICATORS,
109 drl_lib="elegantrl",
110 env=env,
111 model_name="ppo",
112 API_KEY=ALPACA_API_KEY,
113 API_SECRET=ALPACA_API_SECRET,
114 API_BASE_URL=ALPACA_API_BASE_URL,
115 trade_mode='backtesting',
116 if_vix=True,
117 kwargs=kwargs,
118 )
119 else:
120 raise ValueError("Wrong mode.")
121
122
123## Users can input the following command in terminal
124# python main.py --mode=train
125# python main.py --mode=test
126# python main.py --mode=trade
127if __name__ == "__main__":
128 main()
Run the library:
python main.py --mode=train # if train. Use DOW_30_TICKER by default.
python main.py --mode=test # if test. Use DOW_30_TICKER by default.
python main.py --mode=trade # if trade. Users should input your alpaca parameters in config.py
Choices for --mode
: start mode, train, download_data, backtest