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