コード例 #1
0
    # 기간 필터링
    training_data = training_data[(training_data['date'] >= '2018-01-01') &
                                  (training_data['date'] <= '2018-01-31')]
    training_data = training_data.dropna()

    # 차트 데이터 분리
    features_chart_data = ['date', 'open', 'high', 'low', 'close', 'volume']
    chart_data = training_data[features_chart_data]

    # 학습 데이터 분리
    features_training_data = [
        'open_lastclose_ratio', 'high_close_ratio', 'low_close_ratio',
        'close_lastclose_ratio', 'volume_lastvolume_ratio',
        'close_ma5_ratio', 'volume_ma5_ratio',
        'close_ma10_ratio', 'volume_ma10_ratio',
        'close_ma20_ratio', 'volume_ma20_ratio',
        'close_ma60_ratio', 'volume_ma60_ratio',
        'close_ma120_ratio', 'volume_ma120_ratio'
    ]
    training_data = training_data[features_training_data]

    # 비 학습 투자 시뮬레이션 시작
    policy_learner = PolicyLearner(
        stock_code=stock_code, chart_data=chart_data, training_data=training_data,
        min_trading_unit=1, max_trading_unit=3)
    policy_learner.trade(balance=10000000,
                         model_path=os.path.join(
                             settings.BASE_DIR,
                             'models/{}/model_{}.h5'.format(stock_code, model_ver)))
コード例 #2
0
    parser.add_argument('COIN', type=str, help="coin type?")
    parser.add_argument('BALANCE', type=int, help="initial balance?")

    args = parser.parse_args()
    MODEL = args.MODEL
    COIN = args.COIN
    BALANCE = args.BALANCE

    log_dir = os.path.join(settings.BASE_DIR, 'logs/%s' % COIN)
    timestr = settings.get_time_str()
    file_handler = logging.FileHandler(filename=os.path.join(
        log_dir, "%s_%s.log" % (COIN, timestr)),
                                       encoding='utf-8')
    stream_handler = logging.StreamHandler()
    file_handler.setLevel(logging.DEBUG)
    stream_handler.setLevel(logging.INFO)
    logging.basicConfig(format="%(message)s",
                        handlers=[file_handler, stream_handler],
                        level=logging.DEBUG)

    policy_learner = PolicyLearner(coin_code=COIN,
                                   coin_chart=None,
                                   training_data=None,
                                   min_trading_unit=1,
                                   max_trading_unit=3)

    policy_learner.trade(balance=BALANCE,
                         model_path=os.path.join(
                             settings.BASE_DIR,
                             'models/{}/model_{}.h5'.format(COIN, MODEL)))
コード例 #3
0
    def learnFunc(self):
        if self.code is None or self.df is None:
            return
        self.change_value.emit(ZERO)
        # 데이터 전처리
        code = self.code
        chart_data = self.df
        prep_data = data_manager.preprocess(chart_data)
        training_data = data_manager.build_training_data(prep_data)
        training_data = training_data.dropna()

        # 차트데이터 분리
        feature_chart_data = ['date', 'open', 'high', 'low', 'close', 'volume']
        chart_data = training_data[feature_chart_data]

        # emit
        self.change_value.emit(TWENTY_FIVE)

        # 학습데이터 분리
        feature_chart_data = [
            'open_lastclose_ratio',
            'high_close_ratio',
            'low_close_ratio',
            'close_lastclose_ratio',
            'volume_lastvolume_ratio',
            'close_ma5_ratio',
            'volume_ma5_ratio',
            'close_ma10_ratio',
            'volume_ma10_ratio',
            'close_ma20_ratio',
            'volume_ma20_ratio',
            'close_ma60_ratio',
            'volume_ma60_ratio',
            'close_ma120_ratio',
            'volume_ma120_ratio',
        ]
        training_data = training_data[feature_chart_data]

        # 정책 신경망을 파일로 저장
        self.createFolder('model')
        mdir = os.path.join(settings.BASE_DIR, 'model')
        self.createFolder(os.path.join(mdir, code))

        model_dir = os.path.join(mdir, code)
        model_path = os.path.join(model_dir, 'model%s.h5' % code)

        # model_path 경로가 없으면 학습모델을 해당 dir에 만들어서 학습
        # model_path가 있으면 해당 모델 선택 후 예측
        print(model_path)

        # emit
        self.change_value.emit(FIFTY)

        if not os.path.isfile(model_path):
            start_time = time.time()
            policy_learner = PolicyLearner(stock_code=code,
                                           chart_data=chart_data,
                                           training_data=training_data,
                                           fig=self.fig,
                                           canvas=self.canvas,
                                           min_trading_unit=1,
                                           max_trading_unit=2,
                                           delayed_reward_threshold=0.2,
                                           lr=0.001)
            policy_learner.fit(balance=10000000,
                               num_epoches=200,
                               discount_factor=0,
                               start_epsilon=0.5)
            end_time = time.time()
            policy_learner.policy_network.save_model(model_path)
            print("LearningTime: {} sec".format(end_time - start_time))
        else:
            start_time = time.time()
            policy_learner = PolicyLearner(stock_code=code,
                                           chart_data=chart_data,
                                           training_data=training_data,
                                           fig=self.fig,
                                           canvas=self.canvas,
                                           min_trading_unit=1,
                                           max_trading_unit=2)
            end_time = time.time()
            print("LearningTime: {} sec".format(end_time - start_time))
            policy_learner.trade(balance=1000000,
                                 model_path=os.path.join(
                                     model_dir, 'model%s.h5' % (code)))

        # emit
        self.change_value.emit(A_HUNDRED)
コード例 #4
0
        if not os.path.isdir(model_dir):
            os.makedirs(model_dir)
        #model_path = os.path.join(model_dir, 'model_%s.h5' % timestr)
        model_path = os.path.join(model_dir, 'model_%s.h5' % STOCK_CODE)
        policy_learner.policy_network.save_model(model_path)

    if SIMULATION:
        chart_data, data = prepare_data(STOCK_CODE, MARKET_CODE, SIMULATION_START_DATE, SIMULATION_END_DATE)

        policy_learner = PolicyLearner(
            stock_code=STOCK_CODE, chart_data=chart_data, training_data=data,
            min_trading_unit=MIN_TRADING_UNIT, max_trading_unit=MAX_TRADING_UNIT)

        policy_learner.trade(balance=INITIAL_BALANCE, num_epoches=NUM_EPOCHS,max_memory=MAX_MEMORY,
                           discount_factor=DISCOUNT_FACTOR, start_epsilon=START_EPSILON,
                             model_path=os.path.join(
                                 settings.BASE_DIR,
                                 'models/{}/model_{}.h5'.format(STOCK_CODE, STOCK_CODE)))
        #                        'models/{}/model_{}.h5'.format(STOCK_CODE, model_ver)))
=======
from agent import DQNAgent
from environment import Environment
from keras import backend as K
K.clear_session()

def update_delayed_reward(episode_buffer, last_reward):
    rewarded_buffer = []

    for state, action, reward, next_state, done in episode_buffer:
        reward = last_reward         # 마지막 reward 로 앞선 action 의 reward 모두 change
        rewarded_buffer.append((state, action, reward, next_state, done))
コード例 #5
0
        'close_ma10_ratio',
        'volume_ma10_ratio',
        'close_ma20_ratio',
        'volume_ma20_ratio',
        'close_ma60_ratio',
        'volume_ma60_ratio',
        'close_ma120_ratio',
        'volume_ma120_ratio',
    ]
    training_data = training_data[features_training_data]

    # 비학습 투자 시뮬레이션 시작
    policy_learner = PolicyLearner(stock_code=stock_code,
                                   chart_data=chart_data,
                                   training_data=training_data,
                                   min_trading_unit=1,
                                   max_trading_unit=10)
    policy_learner.trade(balance=52777,
                         model_path=os.path.join(
                             settings.BASE_DIR, 'model\{}\model_{}.h5'.format(
                                 stock_code, model_ver)),
                         cur_stock_value=9 * 27650,
                         init_stocks=9)

    # 정책 신경망을 파일로 저장. 추가적인 학습을 수행하여 모델을 새로 저장하고 싶다면 코드 블록을 그대로 두면 된다
    # model_dir = os.path.join(settings.BASE_DIR, 'model/%s' % stock_code)
    # if not os.path.isdir(model_dir):
    #     os.makedirs(model_dir)
    # model_path = os.path.join(model_dir, 'model_%s.h5' % timestr)
    # policy_learner.policy_network.save_model(model_path)