Example #1
0
def main(train_stock, val_stock, window_size, batch_size, ep_count,
         strategy="t-dqn", model_name="model_debug", pretrained=False,
         debug=False):
    """ Trains the stock trading bot using Deep Q-Learning.
    Please see https://arxiv.org/abs/1312.5602 for more details.

    Args: [python train.py --help]
    """
    import tensorflow as tf
    print("#TF Version: ",tf.__version__)

    from tensorflow.python.client import device_lib
    print("Using device: ")
    print(device_lib.list_local_devices())
    agent = Agent(window_size, strategy=strategy, pretrained=pretrained, model_name=model_name)
    
    train_data = get_stock_data(train_stock)
    val_data = get_stock_data(val_stock)

    initial_offset = val_data["Close"][1] - val_data["Close"][0]

    for episode in range(1, ep_count + 1):
        train_result = train_model(agent, episode, train_data, ep_count=ep_count,
                                   batch_size=batch_size, window_size=window_size)
        val_result, _ , actionCollection = evaluate_model(agent, val_data, window_size, debug)
        show_train_result(train_result, val_result, initial_offset)
Example #2
0
def main(train_stock,
         val_stock,
         window_size,
         batch_size,
         ep_count,
         strategy="t-dqn",
         model_name="model_debug",
         pretrained=False,
         debug=False):
    """ Trains the stock trading bot using Deep Q-Learning.
    Please see https://arxiv.org/abs/1312.5602 for more details.

    Args: [python train.py --help]
    """
    agent = Agent(window_size,
                  strategy=strategy,
                  pretrained=pretrained,
                  model_name=model_name)

    train_data = get_stock_data(train_stock)
    val_data = get_stock_data(val_stock)

    initial_offset = val_data[1] - val_data[0]

    for episode in range(1, ep_count + 1):
        train_result = train_model(agent,
                                   episode,
                                   train_data,
                                   ep_count=ep_count,
                                   batch_size=batch_size,
                                   window_size=window_size)
        val_result, _ = evaluate_model(agent, val_data, window_size, debug)
        show_train_result(train_result, val_result, initial_offset)
Example #3
0
def train(train_stock,
          val_stock,
          window_size,
          batch_size,
          ep_count,
          strategy="t-dqn",
          model_name="model_double-dqn_GOOG_50",
          pretrained=True,
          debug=False):
    """ 
    Trains the stock trading bot using Deep Q-Learning.
    Please see https://arxiv.org/abs/1312.5602 for more details.
    Args: [python train.py --help]
    """
    print("Started the model training for the {}".format(symbol))
    agent = Agent(window_size,
                  strategy=strategy,
                  pretrained=pretrained,
                  model_name=model_name)

    train_data = train_stock
    val_data = val_stock
    initial_offset = np.array(val_data)[1] - np.array(val_data)[0]

    for episode in range(1, ep_count + 1):
        train_result = train_model(agent,
                                   episode,
                                   train_data,
                                   ep_count=ep_count,
                                   batch_size=batch_size,
                                   window_size=window_size)
        val_result, _ = evaluate_model(agent, val_data, window_size, debug)
        show_train_result(train_result, val_result, initial_offset)
    print("Training the model completed!!")
def main(train_stock,
         val_stock,
         window_size,
         batch_size,
         ep_count,
         strategy="t-dqn",
         model_name="model_debug",
         pretrained=False,
         debug=False):

    agent = Agent(window_size,
                  strategy=strategy,
                  pretrained=pretrained,
                  model_name=model_name)

    train_data = get_stock_data(train_stock)
    val_data = get_stock_data(val_stock)

    initial_offset = val_data[1] - val_data[0]

    for episode in range(1, ep_count + 1):
        train_result = train_model(agent,
                                   episode,
                                   train_data,
                                   ep_count=ep_count,
                                   batch_size=batch_size,
                                   window_size=window_size)
        val_result, _ = evaluate_model(agent, val_data, window_size, debug)
        show_train_result(train_result, val_result, initial_offset)
Example #5
0
def main(train_stock,
         val_stock,
         window_size,
         batch_size,
         ep_count,
         strategy="t-dqn",
         model_name="model_debug",
         pretrained=False,
         debug=False):
    """Trains the stock trading bot using Deep Q-Learning.
    Please see https://arxiv.org/abs/1312.5602 for more details.

    Args: [python train.py --help]

    """
    train_data = filter_data_by_feature_columns(get_stock_data(train_stock))
    val_data = filter_data_by_feature_columns(get_stock_data(val_stock))

    agent = Agent(window_size * train_data.shape[1],
                  strategy=strategy,
                  pretrained=pretrained,
                  model_name=model_name)

    for episode in range(1, ep_count + 1):
        train_result = train_model(agent,
                                   episode,
                                   train_data,
                                   ep_count=ep_count,
                                   batch_size=batch_size,
                                   window_size=window_size)
        val_result, _ = evaluate_model(agent, val_data, window_size, debug)
        show_train_result(train_result, val_result)
Example #6
0
def main(train_stock,
         window_size,
         batch_size,
         ep_count,
         strategy="dqn",
         model_name="dqn",
         pretrained=False,
         debug=False):
    """ Trains the stock trading bot using Deep Q-Learning.
    Please see https://arxiv.org/abs/1312.5602 for more details.

    Args: [python train.py --help]
    """
    train_data = get_stock_data(train_stock)
    #val_data = get_stock_data(val_stock)
    agent = Agent(window_size,
                  current_price=train_data[0],
                  strategy=strategy,
                  pretrained=pretrained,
                  model_name=model_name)

    #initial_offset = val_data[1] - val_data[0]

    cash_in_hand = []
    total_profit = []

    for episode in range(1, ep_count + 1):
        train_result = train_model(agent,
                                   episode,
                                   train_data,
                                   ep_count=ep_count,
                                   batch_size=batch_size,
                                   window_size=window_size)
        #val_result, _ = evaluate_model(agent, val_data, window_size, debug)
        if episode % 100 == 0:
            agent.save(episode)
        #show_train_result(train_result)

        total_profit.append(train_result[2])
        cash_in_hand.append(agent.cash_in_hand)
        agent.reset()

    plt.plot(np.array(cash_in_hand))
    plt.xlabel('cash in hand for each episode')
    plt.ylabel('Amount')
    plt.show()
    plt.plot(np.array(total_profit))
    plt.xlabel('total profit for each episode')
    plt.ylabel('Amount')
    plt.show()
Example #7
0
def main(train_stock,
         val_stock,
         economy,
         window_size,
         batch_size,
         ep_count,
         strategy="dqn",
         model_name="model_debug",
         pretrained=False,
         debug=False):
    """ Trains the stock trading bot using Deep Q-Learning.
    Please see https://arxiv.org/abs/1312.5602 for more details.

    Args: [python train.py --help]
    """
    print("initialize agent")
    agent = Agent(window_size,
                  strategy=strategy,
                  pretrained=pretrained,
                  model_name=model_name)

    print('get stock data')
    train_data = get_stock_data(train_stock)
    print('get economy leading')
    economy_data = get_economy_data(economy)
    print('get val data')
    val_data = get_stock_data(val_stock)

    # 첫 째날과 둘 째 날의 종가의 차
    initial_offset = val_data[0][1] - val_data[0][0]
    last_checkpoint = 0

    for episode in range(1, ep_count + 1):
        print('train episode : ', episode)
        train_result, is_earlystopping = train_model(
            agent,
            episode,
            train_data,
            economy_data,
            ep_count=ep_count,
            batch_size=batch_size,
            window_size=window_size,
            last_checkpoint=last_checkpoint)
        val_result, _ = evaluate_model(agent, val_data, economy_data,
                                       window_size, debug)
        show_train_result(train_result, val_result, initial_offset)

        if is_earlystopping == False:
            last_checkpoint = episode
Example #8
0
def main(window_size, batch_size, ep_count, model_name, pretrained, debug):
    """ Trains the stock trading bot using Deep Q-Learning.
    Please see https://arxiv.org/abs/1312.5602 for more details.

    Args: [python train.py --help]
    """
    agent = Agent(window_size, pretrained=pretrained, model_name=model_name)

    train_data = get_stock_data('data/training.csv')
    val_data = get_stock_data('data/test.csv')

    initial_offset = val_data[1] - val_data[0]

    for episode in range(1, ep_count + 1):
        train_result = train_model(agent,
                                   episode,
                                   train_data,
                                   ep_count=ep_count,
                                   batch_size=batch_size,
                                   window_size=window_size)
        val_result, _ = evaluate_model(agent, val_data, window_size, debug)
        show_train_result(train_result, val_result, initial_offset)

    agent.soft_save()
def main(train_stock,
         val_stock,
         window_size,
         batch_size,
         ep_count,
         strategy="t-dqn",
         model_name="model_debug",
         pretrained=False,
         debug=False):
    """ Trains the stock trading bot using Deep Q-Learning.
		Please see https://arxiv.org/abs/1312.5602 for more details.

		Args: [python train.py --help]
		"""

    agent = Agent(window_size,
                  strategy=strategy,
                  pretrained=pretrained,
                  model_name=model_name)

    train_data = get_stock_data(train_stock)
    val_data = get_stock_data(val_stock)
    final_rewards = []
    train_roi = []
    valid_roi = []
    train_loss = []
    rewards = []
    initial_offset = val_data[1] - val_data[0]

    for episode in range(1, ep_count + 1):
        train_result, rewards = train_model(agent,
                                            episode,
                                            train_data,
                                            ep_count=ep_count,
                                            batch_size=batch_size,
                                            window_size=window_size)
        final_rewards.extend(rewards)
        train_roi.append(train_result[2])
        train_loss.append(train_result[3])
        val_result, _ = evaluate_model(agent, val_data, window_size, debug)
        valid_roi.append(val_result)
        show_train_result(train_result, val_result, initial_offset)

    gs = gridspec.GridSpec(2, 2)
    fig = plt.figure(figsize=(20, 9))

    # To be shifted to Axis 1
    ax1 = fig.add_subplot(gs[0, 0])
    ax1.plot(range(len(train_loss)), train_loss, color='purple', label='loss')
    ax1.legend(loc=0,
               ncol=2,
               prop={'size': 20},
               fancybox=True,
               borderaxespad=0.)
    ax1.set_xlabel('Epochs', size=20)
    ax1.set_ylabel('Train Loss', size=20)
    ax1.set_title('Loss w.r.t. Epochs', size=20)

    # To be shifted to Axis 2
    ax2 = fig.add_subplot(gs[0, 1])
    ax2.plot(range(len(train_roi)), train_roi, color='crimson', label='train')
    ax2.plot(range(len(valid_roi)), valid_roi, color='olive', label='val')
    ax2.legend(loc=0,
               ncol=2,
               prop={'size': 20},
               fancybox=True,
               borderaxespad=0.)
    ax2.set_ylabel('Return of Investment($)', size=20)
    ax2.set_xlabel('Epochs', size=20)
    ax2.set_title('Train and Valid ROI w.r.t. Epochs', size=20)

    # To be shifted to Axis 3
    ax3 = fig.add_subplot(gs[1, :])
    ax3.plot(range(len(final_rewards)),
             final_rewards,
             color='red',
             label='Reward of Rainbow DQN')
    ax3.set_xlabel('Episodes', size=20)
    ax3.set_ylabel('Rewards', size=20)
    ax3.set_title('Reward w.r.t. episodes', size=20)
    ax3.legend(loc=0,
               ncol=2,
               prop={'size': 20},
               fancybox=True,
               borderaxespad=0.)

    plt.show()