Ejemplo n.º 1
0
    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:]
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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']),
Ejemplo n.º 5
0
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']),