示例#1
0
 def __init__(self):
     '''
     应用初始化
     '''
     logger.init_logger(CONFIG.LOG_CONF, suffix=options.port)
     settings = {
         'static_path':
         os.path.join(options.project_path, 'static'),
         'template_path':
         os.path.join(options.project_path, 'tpl'),
         'xsrf_cookies':
         False,
         'site_title':
         'demo',
         'debug':
         options.debug,
         'ui_modules':
         uimodules,
         'ui_methods':
         uimethods,
         "session_mgr":
         TornadoSessionManager(CONFIG.COOKIE_NAME, CONFIG.COOKIE_SECRET,
                               MClient(CONFIG.MC_SERVERS)),
     }
     handlers = [
         (r"/", IndexHandler),
     ]
     tornado.web.Application.__init__(self, handlers, **settings)
示例#2
0
    def __init__(self,
                 model: BaseRLModel = PPO2,
                 policy: BasePolicy = MlpLnLstmPolicy,
                 reward_strategy: BaseRewardStrategy = IncrementalProfit,
                 exchange_args: Dict = {},
                 **kwargs):
        self.logger = kwargs.get(
            'logger',
            init_logger(__name__, show_debug=kwargs.get('show_debug', True)))

        self.Model = model
        self.Policy = policy
        self.Reward_Strategy = reward_strategy
        self.exchange_args = exchange_args
        self.tensorboard_path = kwargs.get('tensorboard_path', None)
        self.input_data_path = kwargs.get('input_data_path',
                                          'data/input/EURUSD60.csv')
        self.params_db_path = kwargs.get('params_db_path',
                                         'sqlite:///data/params.db')

        self.date_format = kwargs.get('date_format',
                                      ProviderDateFormat.DATETIME_HOUR_24)

        self.model_verbose = kwargs.get('model_verbose', 1)
        self.n_envs = kwargs.get('n_envs', os.cpu_count())
        self.n_minibatches = kwargs.get('n_minibatches', self.n_envs)
        self.train_split_percentage = kwargs.get('train_split_percentage', 0.8)
        self.data_provider = kwargs.get('data_provider', 'static')

        self.initialize_data()
        self.initialize_optuna()

        self.logger.debug(f'Initialize RLTrader: {self.study_name}')
示例#3
0
    def __init__(self,
                 modelClass: BaseRLModel = PPO2,
                 policyClass: BasePolicy = MlpPolicy,
                 **kwargs):
        self.logger = init_logger(__name__,
                                  show_debug=kwargs.get('show_debug', True))

        self.Model = modelClass
        self.Policy = policyClass
        self.tensorboard_path = kwargs.get('tensorboard_path', None)
        self.input_data_path = kwargs.get('input_data_path', None)
        self.params_db_path = kwargs.get('params_db_path',
                                         'sqlite:///data/params.db')

        self.date_format = kwargs.get('date_format',
                                      ProviderDateFormat.DATETIME_HOUR_12)

        self.model_verbose = kwargs.get('model_verbose', 1)
        self.nminibatches = kwargs.get('nminibatches', 1)
        self.train_split_percentage = kwargs.get('train_split_percentage', 0.8)

        self.initialize_data()
        self.initialize_optuna()

        self.logger.debug(f'Initialize RLTrader: {self.study_name}')
示例#4
0
    def __init__(self,
                 data_provider: BaseDataProvider,
                 initial_balance=10000,
                 commission=0.0025,
                 **kwargs):
        super(TradingEnv, self).__init__()

        self.logger = init_logger(__name__,
                                  show_debug=kwargs.get('show_debug', True))

        self.data_provider = data_provider
        self.initial_balance = initial_balance
        self.commission = commission

        self.reward_fn = kwargs.get('reward_fn',
                                    self._reward_incremental_profit)
        self.benchmarks = kwargs.get('benchmarks', [])
        self.enable_stationarization = kwargs.get('enable_stationarization',
                                                  True)

        self.action_space = spaces.Discrete(3)

        n_features = 5 + len(self.data_provider.columns)

        self.obs_shape = (1, n_features)
        self.observation_space = spaces.Box(low=0,
                                            high=1,
                                            shape=self.obs_shape,
                                            dtype=np.float16)
        self.observations = pd.DataFrame(None,
                                         columns=self.data_provider.columns)
示例#5
0
    def __init__(self,
                 data_provider: BaseDataProvider,
                 reward_strategy: BaseRewardStrategy = IncrementalProfit,
                 trade_strategy: BaseTradeStrategy = SimulatedTradeStrategy,
                 initial_balance: int = 10000,
                 commissionPercent: float = 0.25,
                 maxSlippagePercent: float = 2.0,
                 **kwargs):
        super(TradingEnv, self).__init__()

        self.logger = kwargs.get('logger', init_logger(__name__, show_debug=kwargs.get('show_debug', True)))

        self.base_precision: int = kwargs.get('base_precision', 2)
        self.asset_precision: int = kwargs.get('asset_precision', 8)
        self.min_cost_limit: float = kwargs.get('min_cost_limit', 1E-3)
        self.min_amount_limit: float = kwargs.get('min_amount_limit', 1E-3)

        self.initial_balance = round(initial_balance, self.base_precision)
        self.commissionPercent = commissionPercent
        self.maxSlippagePercent = maxSlippagePercent

        self.data_provider = data_provider
        self.reward_strategy = reward_strategy()
        self.trade_strategy = trade_strategy(commissionPercent=self.commissionPercent,
                                             maxSlippagePercent=self.maxSlippagePercent,
                                             base_precision=self.base_precision,
                                             asset_precision=self.asset_precision,
                                             min_cost_limit=self.min_cost_limit,
                                             min_amount_limit=self.min_amount_limit)

        self.render_benchmarks: List[Dict] = kwargs.get('render_benchmarks', [])

        self.render_benchmarks = [
            {
                'label': 'Buy and HODL',
                'values': buy_and_hodl(self.data_provider.data_frame['Close'], initial_balance, commissionPercent)
            },
            {
                'label': 'RSI Divergence',
                'values': rsi_divergence(self.data_provider.data_frame['Close'], initial_balance, commissionPercent)
            },
            {
                'label': 'SMA Crossover',
                'values': sma_crossover(self.data_provider.data_frame['Close'], initial_balance, commissionPercent)
            },
        ]
        
        self.normalize_obs: bool = kwargs.get('normalize_obs', True)
        self.stationarize_obs: bool = kwargs.get('stationarize_obs', True)
        self.normalize_rewards: bool = kwargs.get('normalize_rewards', False)
        self.stationarize_rewards: bool = kwargs.get('stationarize_rewards', True)

        self.n_discrete_actions: int = kwargs.get('n_discrete_actions', 24)
        self.action_space = spaces.Discrete(self.n_discrete_actions)

        self.n_features = 6 + len(self.data_provider.columns)
        self.obs_shape = (1, self.n_features)
        self.observation_space = spaces.Box(low=0, high=1, shape=self.obs_shape, dtype=np.float16)

        self.observations = pd.DataFrame(None, columns=self.data_provider.columns)
示例#6
0
    def __init__(self,
                 data_provider: BaseDataProvider,
                 reward_strategy: BaseRewardStrategy = IncrementalProfit,
                 trade_strategy: BaseTradeStrategy = SimulatedTradeStrategy,
                 initial_balance: int = 10000,
                 commissionPercent: float = 0.25,
                 maxSlippagePercent: float = 2.0,
                 **kwargs):
        super(TradingEnv, self).__init__()

        self.logger = kwargs.get(
            'logger',
            init_logger(__name__, show_debug=kwargs.get('show_debug', True)))

        self.base_precision: int = kwargs.get('base_precision', 2)
        self.asset_precision: int = kwargs.get('asset_precision', 8)
        self.min_cost_limit: float = kwargs.get('min_cost_limit', 1E-3)
        self.min_amount_limit: float = kwargs.get('min_amount_limit', 1E-3)

        self.initial_balance = round(initial_balance, self.base_precision)
        self.commissionPercent = commissionPercent
        self.maxSlippagePercent = maxSlippagePercent

        self.data_provider = data_provider
        self.reward_strategy = reward_strategy()
        self.trade_strategy = trade_strategy(
            commissionPercent=self.commissionPercent,
            maxSlippagePercent=self.maxSlippagePercent,
            base_precision=self.base_precision,
            asset_precision=self.asset_precision,
            min_cost_limit=self.min_cost_limit,
            min_amount_limit=self.min_amount_limit)

        self.render_benchmarks: List[Dict] = kwargs.get(
            'render_benchmarks', [])
        self.normalize_obs: bool = kwargs.get('normalize_obs', True)
        self.stationarize_obs: bool = kwargs.get('stationarize_obs', True)
        self.normalize_rewards: bool = kwargs.get('normalize_rewards', False)
        self.stationarize_rewards: bool = kwargs.get('stationarize_rewards',
                                                     True)

        self.n_discrete_actions: int = kwargs.get('n_discrete_actions', 24)
        self.action_space = spaces.Discrete(self.n_discrete_actions)

        self.n_features = 5 + len(self.data_provider.columns)
        self.obs_shape = (1, self.n_features)
        self.observation_space = spaces.Box(low=0,
                                            high=1,
                                            shape=self.obs_shape,
                                            dtype=np.float16)

        self.observations = pd.DataFrame(None,
                                         columns=self.data_provider.columns)
        self.fast_transform_observations = FastTransform()
        self.fast_transform_account_history = FastTransform()

        self.fast_log_observation = self.observations
示例#7
0
    def __init__(self, file_name: str = "database.db"):

        # Test if 'data' folder exists. If not, create it.
        directory = "data"
        self.create_directory_if_not_exists(directory)

        # All database files will be located at data folder
        self.conn = sqlite3.connect(f"{directory}/{file_name}")
        self.cursor = self.conn.cursor()
        self.logger = init_logger(self.__class__.__name__)
示例#8
0
 def __init__(self):
     '''
     应用初始化
     '''
     logger.init_logger(CONFIG.LOG_CONF, suffix=options.port)
     settings = {
         'static_path': os.path.join(options.project_path, 'static'),
         'template_path': os.path.join(options.project_path, 'tpl'),
         'xsrf_cookies': False,
         'site_title': 'demo',
         'debug': options.debug,
         'ui_modules':uimodules,
         'ui_methods':uimethods,
         "session_mgr": TornadoSessionManager(CONFIG.COOKIE_NAME,
                                              CONFIG.COOKIE_SECRET,
                                              MClient(CONFIG.MC_SERVERS)),
     }
     handlers = [
         (r"/", IndexHandler),
     ]
     tornado.web.Application.__init__(self, handlers, **settings)
示例#9
0
    def __init__(
            self,
            model_actor: BaseRLModel = PPO2,
            policy:
        BasePolicy = MlpLnLstmPolicy  #(ActorCriticPolicy or str) The policy model to use (MlpPolicy, CnnPolicy, CnnLstmPolicy, ...)
        ,
            reward_strategy: Reward_Strategy_BASE = RewardPnL  #IncrementalProfit
        ,
            exchange_args: Dict = {},
            **kwargs):
        self.model_actor: BaseRLModel = model_actor
        self.policy = policy
        self.Reward_Strategy = reward_strategy
        self.exchange_args = exchange_args
        self.logger = kwargs.get(
            'logger',
            init_logger(__name__, show_debug=kwargs.get('show_debug', True)))
        self.db_path = kwargs.get('db_path', 'sqlite:///data/params.db')
        self.date_format = kwargs.get('date_format',
                                      ProviderDateFormat.DATETIME_HOUR_24)
        self.data_path = kwargs.get('data_path',
                                    'data/input/coinbase-1h-btc-usd.csv')
        self.data_train_split_pct = kwargs.get('train_split_percentage', 0.8)
        self.data_provider = kwargs.get('data_provider', 'static')
        #self.columns_map            = kwargs.get('columns_map', {})
        self.n_envs = kwargs.get('n_envs', os.cpu_count())
        self.n_minibatches = kwargs.get('n_minibatches', self.n_envs)
        self.model_logs_tb = kwargs.get('tensorboard_path',
                                        os.path.join('data', 'logs_tb'))
        self.model_verbose = kwargs.get('model_verbose', 1)
        self.do_load_raw_data: bool = kwargs.get('do_load_raw_data', True)
        self.features_to_add: str = kwargs.get('features_to_add', 'none')
        self.initialize_data(self.do_load_raw_data, self.features_to_add)
        self.initialize_db_optuna()  #optimization for hyper param search

        self.logger.info(
            f'sucsessfully Initialize RLTrader study name {self.study_name} , open terminal, tensorboard --logdir={self.model_logs_tb}, click to http://localhost:6006/'
        )
示例#10
0
import numpy as np

from lib.RLTrader import RLTrader
from lib.TraderArgs import TraderArgs
from lib.util.logger import init_logger

np.warnings.filterwarnings('ignore')
option_parser = TraderArgs()
args = option_parser.get_args()

if __name__ == '__main__':
    logger = init_logger(__name__, show_debug=args.debug)
    trader = RLTrader(**vars(args), logger=logger)

    if args.command == 'optimize':
        trader.optimize(n_trials=args.trials,
                        n_parallel_jobs=args.parallel_jobs)
    elif args.command == 'train':
        trader.train(n_epochs=args.epochs)
    elif args.command == 'test':
        trader.test(model_epoch=args.model_epoch, should_render=args.no_render)
    elif args.command == 'opt-train-test':
        trader.optimize(args.trials, args.parallel_jobs)
        trader.train(n_epochs=args.train_epochs,
                     test_trained_model=args.no_test,
                     render_trained_model=args.no_render)