예제 #1
0
파일: ppo1.py 프로젝트: caoxuwen/bitgym
def main():
    df = pd.read_csv('dataset/btc_indexed2.csv')
    env = trading_env.make(
        env_id='training_v1',
        obs_data_len=50,
        step_len=1,
        df=df,
        fee=0.003,
        max_position=5,
        deal_col_name='close',
        return_transaction=True,
        sample_days=30,
        normalize_reward=True,
        feature_names=['open', 'high', 'low', 'close', 'volume'])
    env = wrapper.LogPriceFilterWrapper(env)
    logger.configure()
    pi = train(env, num_timesteps=1024 * 1024)
    print("training done.")
    print(pi)

    df2 = pd.read_csv('dataset/btc_indexed2_test.csv')
    env2 = trading_env.make(
        env_id='training_v1',
        obs_data_len=50,
        step_len=1,
        df=df,
        fee=0.003,
        max_position=5,
        deal_col_name='close',
        return_transaction=True,
        sample_days=30,
        normalize_reward=False,
        feature_names=['open', 'high', 'low', 'close', 'volume'])

    env2 = wrapper.LogPriceFilterWrapper(env2)
    evaluation(env2, pi, 50)
예제 #2
0
파일: ppo2.py 프로젝트: caoxuwen/bitgym
 def make_env():
     df = pd.read_csv('dataset/btc_indexed2_test.csv')
     env = trading_env.make(
         env_id='training_v1',
         obs_data_len=1,
         step_len=1,
         df=df,
         fee=0.003,
         max_position=5,
         deal_col_name='close',
         return_transaction=True,
         sample_days=30,
         normalize_reward=False,
         feature_names=['open', 'high', 'low', 'close', 'volume'])
     env = wrapper.LogPriceFilterWrapper(env)
     return env
    def _thunk():
        env = trading_env.make(custom_args=args,
                               env_id='training_v1',
                               obs_data_len=obs_data_len,
                               step_len=step_len,
                               df=df,
                               fee=0.0,
                               max_position=5,
                               deal_col_name='Price',
                               feature_names=[
                                   'Price', 'Volume', 'Ask_price', 'Bid_price',
                                   'Ask_deal_vol', 'Bid_deal_vol',
                                   'Bid/Ask_deal', 'Updown'
                               ])

        return env
예제 #4
0
def main():
    # mode = args.mode
    mode = 'test'  #'train'
    # codes = args.codes
    codes = ["AU88", "RB88", "CU88", "AL88"]
    # codes = ["T9999"]
    # market = args.market
    market = 'future'
    # episode = args.episode
    episode = 2000
    training_data_ratio = 0.5
    # training_data_ratio = args.training_data_ratio

    model_name = os.path.basename(__file__).split('.')[0]

    df = pd.read_csv('TXF1_5m.csv', parse_dates=[['Date', 'Time']])
    df = df.iloc[-10001:]
    df.reset_index(drop=True, inplace=True)
    df = df.rename(columns={'Date_Time': 'datetime'})
    df['serial_number'] = df.index
    # df['serial_number'] = df['serial_number'] - df['serial_number'].iloc[0]
    env = trading_env.make(
        env_id='training_v1',
        obs_data_len=1,
        step_len=1,
        df=df,
        fee=2,
        max_position=1,
        deal_col_name='Price',
        feature_names=[
            'Price',
            'Volume',  # 'datetime' ,
            'Open',
            'serial_number',
            'High',
            'Low'
        ],
        fluc_div=100.0)
    # env = Market(codes, start_date="2012-01-01", end_date="2018-01-01", **{
    #     "market": market,
    #     # "use_sequence": True,
    #     "logger": generate_market_logger(model_name),
    #     "training_data_ratio": training_data_ratio,
    # })

    algorithm = Algorithm(
        tf.Session(config=config), env, 1, 5, **{
            "mode":
            mode,
            "episodes":
            episode,
            "enable_saver":
            True,
            "learning_rate":
            0.003,
            "batch_size":
            1320,
            "enable_summary_writer":
            True,
            "logger":
            generate_algorithm_logger(model_name),
            "save_path":
            os.path.join(CHECKPOINTS_DIR, "RL", model_name, market, "model"),
            "summary_path":
            os.path.join(CHECKPOINTS_DIR, "RL", model_name, market, "summary"),
        })

    algorithm.run()
    algorithm.eval()
예제 #5
0
if __name__ == '__main__':
    """
    df = pd.read_csv('../../dataset/kaggle_data/coinbaseUSD_1-min_data_2014-12-01_to_2018-01-08.csv')
    # Need serial number and datetime to be the column name.
    df.reset_index(inplace=True)
    df.rename(columns={'index':'serial_number', 'Timestamp':'datetime'}, inplace=True)

    env = trading_env.make(env_id='training_v1', obs_data_len=1, step_len=1,
                       df=df, fee=0.1, max_position=5, deal_col_name='Close', 
                       return_transaction=False, feature_names=['Open', 'High', 'Low', 'Close'])
    """

    df = pd.read_csv('../../dataset/btc_indexed2.csv')
    env = trading_env.make(env_id='training_v1', obs_data_len=1, step_len=1,
                           df=df, fee=0.1, max_position=5, deal_col_name='close',
                           return_transaction=False, sample_days=7,
                           feature_names=['low', 'high', 'open', 'close', 'volume'])

    env.reset()

    # exploration strategy
    exp_schedule = LinearExploration(env, config.eps_begin,
                                     config.eps_end, config.eps_nsteps)

    # learning rate schedule
    lr_schedule = LinearSchedule(config.lr_begin, config.lr_end,
                                 config.lr_nsteps)

    # train model
    model = Linear(env, config)
    model.run(exp_schedule, lr_schedule)
예제 #6
0
    #agent = MAAgent()
    #agent = RSIAgent()
    #agent = BBANDAgent()
    agent = RandomAgent()

    # make env
    df = pd.read_csv('dataset/btc_test.csv')
    print(df.describe())

    env = trading_env.make(
        env_id='training_v1',
        obs_data_len=5,
        step_len=1,
        df=df,
        fee=0.003,
        max_position=5,
        deal_col_name='close',
        return_transaction=True,
        sample_days=30,
        normalize_price=True,
        reward_delta=False,
        feature_names=['low', 'high', 'open', 'close', 'volume'])

    #env.render()
    """
    df = pd.read_csv('dataset/btc_indexed2.csv')
    print(df.describe())
    env = trading_env.make(env_id='training_v1', obs_data_len=1, step_len=1,
                       df=df, fee=0.003, max_position=5, sample_days = 30, 
                       return_transaction=False, deal_col_name='close',
                       feature_names=['low', 'high',
예제 #7
0
import numpy as np
import pandas as pd
import trading_env

from datetime import datetime
st = datetime.now()
## need to refactor the testcase

df = pd.read_csv('trading_env/test/data/SGXTWsample.csv', index_col=0, parse_dates=['datetime'])

env = trading_env.make(env_id='training_v1', obs_data_len=256, step_len=128,
                       df=df, fee=0.1, max_position=5, deal_col_name='Price', 
                       feature_names=['Price', 'Volume', 
                                      'Ask_price','Bid_price', 
                                      'Ask_deal_vol','Bid_deal_vol',
                                      'Bid/Ask_deal', 'Updown'], 
                       fluc_div=100.0)

env.reset()
print(env.df_sample['datetime'].iloc[0].date())
for i in range(500):
    #print(i)
    state, reward, done, info = env.step(np.random.randint(3))
    #print(state, reward)
    #env.render()
    if done:
        break
print(datetime.now() - st)
예제 #8
0
df = pd.read_csv(
    'dataset/kaggle_data/coinbaseUSD_1-min_data_2014-12-01_to_2018-01-08.csv')
# Need serial number and datetime to be the column name.
df.reset_index(inplace=True)
df.rename(columns={
    'index': 'serial_number',
    'Timestamp': 'datetime'
},
          inplace=True)

env = trading_env.make(env_id='training_v1',
                       obs_data_len=1,
                       step_len=128,
                       df=df,
                       fee=0.1,
                       max_position=5,
                       deal_col_name='Close',
                       return_transaction=False,
                       feature_names=['Open', 'High', 'Low', 'Close'])

env.reset()
env.render()

state, reward, done, info = env.step(random.randrange(3))
print('********')
print(state)
print('********')
print(reward)
print('********')
예제 #9
0
from datetime import datetime
st = datetime.now()
## need to refactor the testcase

df = pd.read_csv('trading_env/test/data/SGXTWsample.csv',
                 index_col=0,
                 parse_dates=['datetime'])

env = trading_env.make(env_id='training_v1',
                       obs_data_len=256,
                       step_len=128,
                       df=df,
                       fee=0.1,
                       max_position=5,
                       deal_col_name='Price',
                       feature_names=[
                           'Price', 'Volume', 'Ask_price', 'Bid_price',
                           'Ask_deal_vol', 'Bid_deal_vol', 'Bid/Ask_deal',
                           'Updown'
                       ],
                       fluc_div=100.0)

env.reset()
print(env.df_sample['datetime'].iloc[0].date())
for i in range(500):
    #print(i)
    state, reward, done, info = env.step(np.random.randint(3))
    #print(state, reward)
    #env.render()
    if done:
예제 #10
0
파일: test_btc.py 프로젝트: caoxuwen/bitgym
import random
import numpy as np
import pandas as pd
import trading_env

#df = pd.read_hdf('dataset/SGXTW.h5', 'STW')
#df = pd.read_hdf('dataset/SGXTWsample.h5', 'STW')
df = pd.read_csv('dataset/btc_indexed2.csv')
print(df.describe())

env = trading_env.make(
    env_id='training_v1',
    obs_data_len=50,
    step_len=1,
    df=df,
    fee=0.1,
    max_position=5,
    deal_col_name='close',
    feature_names=['low', 'high', 'open', 'close', 'volume', 'datetime'])

env.reset()
env.render()

state, reward, done, info = env.step(random.randrange(3))

### randow choice action and show the transaction detail
for i in range(200):
    print(i)
    state, reward, done, info = env.step(random.randrange(3))
    print(state, reward)
    env.render()
예제 #11
0
try:
    df = pd.read_hdf('dataset/BITCOIN.h5', 'STW')
except OSError as e:
    df = get_market_data('bitcoin')

df = df.iloc[::-1]
df = df.reset_index(drop=True)
df['serial_number'] = 0

print(df.head())
print(df.tail())

env = trading_env.make(env_id='training_v1',
                       obs_data_len=1,
                       step_len=7,
                       df=df,
                       fee=0.1,
                       max_position=1,
                       deal_col_name='Close**',
                       feature_names=['Close**', 'Volume', 'Market Cap'])

env.reset()
env.render()

state, reward, done, info = env.step(random.randrange(3))

### randow choice action and show the transaction detail
for i in range(500):
    print(i)
    state, reward, done, info = env.step(random.randrange(3))
    print(state, reward)
    env.render()
예제 #12
0
"""
"""
Use a different architecture for the Atari game. Please report the final result.
Feel free to change the configuration. If so, please report your hyperparameters.
"""
if __name__ == '__main__':
    # make env
    df = pd.read_csv('dataset/btc_indexed2_train.csv')
    print(df.describe())

    test_env = trading_env.make(
        env_id='training_v1',
        obs_data_len=1,
        step_len=1,
        df=pd.read_csv('dataset/btc_indexed2_test.csv'),
        fee=0.003,
        max_position=5,
        deal_col_name='close',
        return_transaction=True,
        sample_days=30,
        normalize_price=True,
        feature_names=['low', 'high', 'open', 'close', 'volume'])

    env = trading_env.make(
        env_id='training_v1',
        obs_data_len=1,
        step_len=1,
        df=df,
        fee=0.003,
        max_position=5,
        deal_col_name='close',
        return_transaction=True,