예제 #1
0
파일: czce.py 프로젝트: volpato30/CNN
def back_test(pair, date, param):
    algo = {'class': StopWinAlgo}
    algo['param'] = {
        'x': pair[0],
        'y': pair[1],
        'a': 1,
        'b': 0,
        'rolling': param[0],
        'alpha': -1,
        'bollinger': param[1],
        'stop_win': param[2],
        'block': 100,
        'bucket_size': 500,
        'if_stop_win': True,
        'if_ema': False,
        'if_consider_spread': True,
    }
    settings = {
        'date': date,
        'path': DATA_PATH,
        'tickset': 'top',
        'algo': algo
    }
    runner = PairRunner(settings)
    runner.run()
    return runner
예제 #2
0
def back_test(pair, date, param):
    tracker = TradeAnalysis(Contract(pair[0]))
    algo = {'class': ConstantAlgo}
    algo['param'] = {
        'x': pair[0],
        'y': pair[1],
        'a': 1,
        'b': 0,
        'rolling': param[0],
        'bollinger': param[1],
        'const': param[2],
        'block': 100,
        'tracker': tracker
    }
    settings = {
        'date': date,
        'path': DATA_PATH,
        'tickset': 'top',
        'algo': algo,
        'singletick': True
    }
    runner = PairRunner(settings)
    runner.run()
    account = runner.account
    history = account.history.to_dataframe(account.items)
    score = float(history[['pnl']].iloc[-1])
    order_win = tracker.order_winning_ratio()
    order_profit = tracker.analyze_all_profit()[0]
    num_rounds = tracker.analyze_all_profit()[2]
    return score, order_win, order_profit, num_rounds, runner
예제 #3
0
파일: day_return.py 프로젝트: volpato30/CNN
def back_test(pair, date, param):
    algo = { 'class': StopWinAlgo }
    algo['param'] = {'x': pair[0],
                     'y': pair[1],
                     'a': 1,
                     'b': 0,
                     'rolling': param[0],
                     'alpha': -1,
                     'bollinger': param[1],
                     'stop_win': param[2],
                     'block': 100,

                     'if_stop_win': True,
                     'if_ema': False,
                     'if_consider_spread': True,
                     }
    settings = { 'date': date,
                 'path': DATA_PATH,
                 'tickset': 'top',
                 'algo': algo}
    runner = PairRunner(settings)
    runner.run()
    account = runner.account
    history = account.history.to_dataframe(account.items)
    score = float(history[['pnl']].iloc[-1])
    return score
예제 #4
0
def back_test(pair, date):
    algo = { 'class': TestAlgo }
    algo['param'] = {'x': pair[0],
                     'y': pair[1],
                     'a': 1,
                     'b': 0,
                     'rolling': 1000,
                     'sd_coef': 2,
                     'block': 100,
                     }
    settings = { 'date': date,
                 'path': DATA_PATH,
                 'tickset': 'top',
                 'algo': algo}
    runner = PairRunner(settings)
    runner.run()
    account = runner.account
    return account
예제 #5
0
def back_test(pair, date, param, tracker):
    algo = { 'class': StopWinSpreadGuardAlgo }
    algo['param'] = {'x': pair[0],
                     'y': pair[1],
                     'a': 1,
                     'b': 0,
                     'rolling': param[0],
                     'bollinger': param[1],
                     'stop_win': param[2],
                     'block': 100,
                     'tracker': tracker}
    settings = { 'date': date,
                 'path': DATA_PATH,
                 'tickset': 'top',
                 'algo': algo,
                 'singletick': True}
    runner = PairRunner(settings)
    runner.run()
    return runner, algo
예제 #6
0
def run_based_on_pre(date_list):
    temp = best_param(date_list[:-1])
    algo = { 'class': TestAlgo }
    algo['param'] = {'x': pair[0],
                    'y': pair[1],
                    'a': 1,
                    'b': 0,
                    'rolling': float(temp.rolling),
                    'sd_coef': float(temp.sd_coef),
                    'block': 100}
    settings = { 'date': date_list[-1],
                'path': DATA_PATH,
                'tickset': 'top',
                'algo': algo}
    runner = PairRunner(settings)
    runner.run()
    account = runner.account
    orders = account.orders.to_dataframe()
    history = account.history.to_dataframe(account.items)
    return float(history.pnl.tail(1)), len(orders)
예제 #7
0
def back_test(pair, date, param):
    algo = { 'class': TestAlgo }
    algo['param'] = {'x': pair[0],
                     'y': pair[1],
                     'a': 1,
                     'b': 0,
                     'rolling': param[0],
                     'sd_coef': param[1],
                     'block': 100,
                     }
    settings = { 'date': date,
                 'path': DATA_PATH,
                 'tickset': 'top',
                 'algo': algo}
    runner = PairRunner(settings)
    runner.run()
    account = runner.account
    history = account.history.to_dataframe(account.items)
    orders = account.orders.to_dataframe()
    pnl = np.asarray(history.pnl)[-1]
    return pnl, len(orders)
예제 #8
0
def best_param(date_list):
    score = []
    num_trades = []
    algo = { 'class': TestAlgo }
    algo['param'] = {'x': pair[0],
                    'y': pair[1],
                    'a': 1,
                    'b': 0,
                    'rolling': 2000,
                    'sd_coef': 2,
                    'block': 100}
    settings = { 'date': date_list,
                'path': DATA_PATH,
                'tickset': 'top',
                'algo': algo}
    runner = PairRunner(settings)
    num_cores = 32
    results = Parallel(n_jobs=num_cores)(delayed(run_simulation)(p, runner) for p in pars)
    result = pd.DataFrame({ "rolling": [p[0] for p in pars],
                            "sd_coef": [p[1] for p in pars],
                            "PNL": [i for i, v in results],
                            "num_trades": [v for i, v in results]})
    index = np.asarray(result.PNL).argmax()
    return result[index:index+1]
예제 #9
0
    'y': pair[1],
    'a': 1,
    'b': 0,
    'rolling': 4000,
    'sd_coef': 3,
    'block': 100,
    'stop_win': 200,
}
settings = {
    'date': date_list,
    'path': DATA_PATH,
    'tickset': 'top',
    'algo': algo
}

runner = PairRunner(settings)
price_diff = get_price_diff(pair)
price_diff_std = np.nanstd(price_diff)
rolling_list = range(1000, 10000, 2000)
sd_coef_list = np.arange(2, 8)
stop_win_list = price_diff_std * np.arange(0.5, 3.5, 0.5)
final_profit = []
for r in rolling_list:
    for sd in sd_coef_list:
        for sw in stop_win_list:
            start_time = time.time()
            runner.run(algo_param={
                'rolling': r,
                'sd_coef': sd,
                'stop_win': sw
            })