Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

how use it ? #135

Open
hardy110 opened this issue Aug 12, 2019 · 1 comment
Open

how use it ? #135

hardy110 opened this issue Aug 12, 2019 · 1 comment

Comments

@hardy110
Copy link

first install it
next ?
python ./cli.py optimize or python ./optimize.py
next ?
python ./cli.py train
next ?
python ./cli.py test

@MichaelQuaMan
Copy link

I've been heavily using RTrader for weeks now.

The essences of what you do is: optimize, train, test, rinse and repeat.

Tips:

data_file = data_path + file_name
df = pd.read_csv('data/' + data_file)
columns = ["Date", "Open", "High", "Low", "Close", "Volume"]
df.columns = columns
  • Adjust the Date column (if needed)
df["Date"] = pd.to_datetime(df["Date"], format="%Y-%m-%d")
  • Make the data a time series (if wanted)
df.set_index('Date', inplace=True)
  • Sort the data by Date
df.sort_index(ascending=True, inplace=True)
  • Add some TA features and clip the data into segments
from ta.volatility import BollingerBands
from ta.momentum import rsi
from ta.trend import macd, macd_diff, macd_signal, ema_indicator

dataset = df.copy(deep=True)

close = dataset["Close"]

# Exponential moving average (EMA)
dataset["ema"] = ema_indicator(close=close, window=10)

dataset['rsi'] = rsi(close=close)
dataset['macd'] = macd(close=close)
dataset['macd_diff'] = macd_diff(close=close)
dataset['macd_signal'] = macd_signal(close=close)

clipped_data = dataset[0:5000]
clipped_data["Close"].plot()
clipped_data.to_csv("GBPUSD_M30_0_5000.csv")
  • If the GPU consumes all your GPU mem and crashes your machine, turn it off
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
  • If the standard optimize.py uses all your CPU and memory, create your own version and limit the number CPU it uses in its pool or remove/bi-pass the multiprocessing
# n_processes = multiprocessing.cpu_count()
n_processes = 6

or bi-pass the multiprocessing and write your own optimize script.

file_name = "EURUSD_D1.csv"
input_data_path = f"{input_path}/{file_name}"
date_format = ProviderDateFormat.DATETIME_HOUR_24
data_provider = StaticDataProvider(date_format=date_format,
                                   csv_data_path=input_data_path,
                                   data_columns=data_columns)

params = {
    # "tensorboard_path": tensorboard_path,
    "data_provider": data_provider,
    "reward_strategy": CustomRewards,
    "show_debug": True,
}

if __name__ == '__main__':
    for i in range(1):
        trader = RLTrader(**params)
        trader.optimize()
        trader.train(render_test_env=False, render_report=False, save_report=True)
  • Learn some basics about using optuna

E.g., show all the studies saved to Sqlite:

optuna studies --storage sqlite:///data/params.db

Or delete a study:

optuna delete-study --study-name PPO2_MlpLnLstmPolicy_WeightedUnrealizedProfit --storage sqlite:///data/params.db
  • Monitor your optuna study progress in a Jupyter notebook:
import optuna
db_path = "sqlite:///data/params.db"
study_name = "PPO2__MlpLnLstmPolicy__CustomRewards"
direction = "maximize"

optuna_study = optuna.create_study(
    study_name=study_name, storage=db_path, direction=direction, load_if_exists=True
)
len(optuna_study.get_trials())

trials_df = optuna_study.trials_dataframe()

trials_df.rename({"params_cliprange": "cliprange", "params_ent_coef": "ent_coef", "params_gamma": "gamma", "params_lam": "lam", "params_learning_rate": "lrn_rate", "params_n_steps":"n_steps", "params_noptepochs": "noptepochs", "system_attrs_fail_reason":"fail"}, axis=1, inplace=True)
trials_df.drop('datetime_complete', axis=1, inplace=True)

trials_df.sort_values(by="value", ascending=False).head(5)

optuna_study.best_value

trials_df[["value"]].plot()

fig = optuna.visualization.plot_optimization_history(optuna_study)
fig.show()

optuna.visualization.plot_slice(optuna_study)
  • Add logging statements to get insights and/or add break points and/or watch the code in an IDE like PyCharm.
  • If the logs start getting too large using rolling logs and compress them:
max_bytes = 10485760
backup_count = 20
use_gzip = True

    fh = ConcurrentRotatingFileHandler(info_log, maxBytes=max_bytes, backupCount=backup_count, use_gzip=use_gzip)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants