GithubHelp home page GithubHelp logo

trading-gym's Introduction

Trading-Gym

Build Status

Trading-Gym is a trading environment base on Gym. For those who want to custom everything.

install

$ pip install trading-gym

Creating features with ta-lib is suggested, that will improve the performance of agent and make it easy to learn. You should install ta-lib before it. Take Ubuntu x64 for example.

$ wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz 
$ tar -zxvf ta-lib-0.4.0-src.tar.gz
$ cd ta-lib/
$ ./configure --prefix=$PREFIX
$ make install

$ export TA_LIBRARY_PATH=$PREFIX/lib
$ export TA_INCLUDE_PATH=$PREFIX/include

$ pip install TA-Lib

See more.

Examples

quick start

from trading_gym.env import TradeEnv
import random


env = TradeEnv(data_path='./data/test_exchange.json')
done = False
obs = env.reset()
for i in range(500):
    action = random.sample([0, 1, 2], 1)[0]
    obs, reward, done, info = env.step(action)
    env.render()
    if done:
        break

A sample train with stable-baselines

from trading_gym.env import TradeEnv
from stable_baselines.common.vec_env import DummyVecEnv
from stable_baselines import DQN
from stable_baselines.deepq.policies import MlpPolicy


data_path = './data/fake_sin_data.json'
env = TradeEnv(data_path=data_path, unit=50000, data_kwargs={'use_ta': True})
env = DummyVecEnv([lambda: env])

model = DQN(MlpPolicy, env, verbose=2, learning_rate=1e-5)
model.learn(200000)


obs = env.reset()
for i in range(8000):
    action, _states = model.predict(obs)
    obs, rewards, done, info = env.step(action)
    env.render()
    if done:
        break

input format

[
    {
        "open": 10.0,
        "close": 10.0,
        "high": 10.0,
        "low": 10.0,
        "volume": 10.0,
        "date": "2019-01-01 09:59"
    },
    {
        "open": 10.1,
        "close": 10.1,
        "high": 10.1,
        "low": 10.1,
        "volume": 10.1,
        "date": "2019-01-01 10:00"
    }
]

actions

Action Value
PUT 0
HOLD 1
PUSH 2

observation

  • native obs: shape=(*, 51, 6), return 51 history data with OCHL
env = TradeEnv(data_path=data_path)
  • obs with ta: shape=(*, 10), return obs using talib.
    • default feature: ['ema', 'wma', 'sma', 'sar', 'apo', 'macd', 'macdsignal', 'macdhist', 'adosc', 'obv']
env = TradeEnv(data_path=data_path, data_kwargs={'use_ta': True})

Custom

custom obs

def custom_obs_features_func(history, info):
    close = [obs.close for obs in history]
    return close


env = TradeEnv(data_path=data_path,
               get_obs_features_func=custom_obs_features_func,
               ops_shape=(1))

custom reward

def custom_reward_func(exchange):
    return exchange.profit


env = TradeEnv(data_path=data_path,
               get_reward_func=custom_reward_func)

Param exchange is entity of Exchange

Reward

  • reward = fixed_profit
  • profit = fixed_profit + floating_profit
  • floating_profit = (latest_price - avg_price) * unit
  • unit = int(nav / buy_in_price)
  • avg_price = ((buy_in_price * unit) + charge) / unit
  • fixed_profit = SUM([every floating_profit after close position])

trading-gym's People

Contributors

mymusise avatar takato3000 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

trading-gym's Issues

ValueError: could not broadcast input array from shape (51,6) into shape (50,6)

How to fix this? I run the Example(train_fake.py) file with parameter of True & True

Traceback (most recent call last):
File "C:/Users/amit/PycharmProjects/dqnTrading/train_fake.py", line 40, in
test_fake(True, True)
File "C:/Users/amit/PycharmProjects/dqnTrading/train_fake.py", line 30, in test_fake
'learning_rate': 5e-5
File "C:\Users\amit\PycharmProjects\dqnTrading\base.py", line 111, in train
model.learn(total_timesteps=train_steps, callback=self.callback)
File "C:\Users\amit\venv\new\lib\site-packages\stable_baselines\deepq\dqn.py", line 180, in learn
obs = self.env.reset()
File "C:\Users\amit\venv\new\lib\site-packages\stable_baselines\common\base_class.py", line 765, in reset
return self.unvec_obs(self.venv.reset())
File "C:\Users\amit\venv\new\lib\site-packages\stable_baselines\common\vec_env\dummy_vec_env.py", line 50, in reset
self._save_obs(env_idx, obs)
File "C:\Users\amit\venv\new\lib\site-packages\stable_baselines\common\vec_env\dummy_vec_env.py", line 69, in _save_obs
self.buf_obs[key][env_idx] = obs
ValueError: could not broadcast input array from shape (51,6) into shape (50,6)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.