def prepare_data(self): df = pd.read_csv(self.input_data_file) df = df.drop(['Symbol'], axis=1) df = df.sort_values(['Date']) df = add_indicators(df.reset_index()) train_len = int(len(df) * 0.8) df = df[:train_len] validation_len = int(train_len * 0.8) self.train_df = df[:validation_len] self.test_df = df[validation_len:]
def __init__(self, df, initial_balance=10000, commission=0.0003, reward_func='sortino', **kwargs): super(BitcoinTradingEnv, self).__init__() self.initial_balance = initial_balance self.commission = commission self.reward_func = reward_func self.df = df.fillna(method='bfill') self.df = add_indicators(self.df.reset_index()) self.stationary_df = log_and_difference( self.df, ['Open', 'High', 'Low', 'Close', 'Volume BTC', 'Volume USD']) self.n_forecasts = kwargs.get('n_forecasts', 10) self.confidence_interval = kwargs.get('confidence_interval', 0.95) self.obs_shape = (1, 5 + len(self.df.columns) - 2 + (self.n_forecasts * 3)) # Actions of the format Buy 1/4, Sell 3/4, Hold (amount ignored), etc. self.action_space = spaces.Discrete(12) # Observes the price action, indicators, account action, price forecasts self.observation_space = spaces.Box( low=0, high=1, shape=self.obs_shape, dtype=np.float16)
def getDatasets(inputfile, testPercentage=20, percentageToUse=100, withBug=True): df = pd.read_csv(inputfile) df = df.drop(['Symbol'], axis=1) if not withBug: df['Date'] = pd.to_datetime( df['Date'], format='%Y-%m-%d %I-%p' ) # parse date from string to the correct format df = df.sort_values(['Date']) df = add_indicators(df.reset_index()) # Just to speed things up print('> Using {}% of the dataset'.format(percentageToUse)) df = df[:int(len(df) * percentageToUse / 100)] test_len = int(len(df) * testPercentage / 100) train_len = int(len(df)) - test_len train_df = df[:train_len] test_df = df[train_len:] return train_df, test_df
curr_idx = -1 reward_strategy = 'sortino' input_data_file = 'data/coinbase_hourly.csv' params_db_file = 'sqlite:///params.db' study_name = 'ppo2_' + reward_strategy study = optuna.load_study(study_name=study_name, storage=params_db_file) params = study.best_trial.params print("Training PPO2 agent with params:", params) print("Best trial reward:", -1 * study.best_trial.value) df = pd.read_csv(input_data_file) df = df.drop(['Symbol'], axis=1) df = df.sort_values(['Date']) df = add_indicators(df.reset_index()) test_len = int(len(df) * 0.2) train_len = int(len(df)) - test_len train_df = df[:train_len] test_df = df[train_len:] train_env = DummyVecEnv([lambda: BitcoinTradingEnv( train_df, reward_func=reward_strategy, forecast_len=int(params['forecast_len']), confidence_interval=params['confidence_interval'])]) test_env = DummyVecEnv([lambda: BitcoinTradingEnv( test_df, reward_func=reward_strategy, forecast_len=int(params['forecast_len']), confidence_interval=params['confidence_interval'])]) model_params = { 'n_steps': int(params['n_steps']),
curr_idx = 3 reward_strategy = 'sortino' input_data_file = 'binance.csv' params_db_file = 'sqlite:///params.db' study_name = 'ppo2_' + reward_strategy study = optuna.load_study(study_name=study_name, storage=params_db_file) params = study.best_trial.params print("Testing PPO2 agent with params:", params) print("Best trial:", -1 * study.best_trial.value) df_init = pd.read_csv('binance.csv') # df = df.drop(['Symbol'], axis=1) df_init = df_init.sort_values(['Date']) df_init = add_indicators(df_init.reset_index()) test_len = int(len(df_init) * 0.021) train_len = int(len(df_init)) - test_len # test_df = df_init[train_len:] # test_df = df_init[16400:] # print('before load test_env') # test_env = DummyVecEnv([lambda: BitcoinTradingEnv( # test_df, reward_func=reward_strategy, forecast_len=int(params['forecast_len']), confidence_interval=params['confidence_interval'])]) # print('after load test_env') # test_env = DummyVecEnv([lambda: BitcoinTradingEnv( # test_df, reward_func=reward_strategy, forecast_len=4, confidence_interval=0.81)]) # model_params = { # 'n_steps': int(params['n_steps']),