Exemple #1
0
	def setUp(self):
		self.sym = "EURUSD"
		self.aEq = self.assertEqual
		self.aIn = self.assertIn
		self.aRaise = self.assertRaises
		self.aItEq = self.assertItemsEqual
		self.bt = BackTest()
    def cal_alphas(self, expr_ds):
        # 计算信号
        for i in [
                'OpenPrice', 'ClosePrice', 'HighestPrice', 'LowestPrice',
                'Volume', 'VWAP', 'Position', 'TurnOver'
        ]:
            expr_tmp = expr_ds.values.expr.replace(i, 'self.eod.%s' % i)
        alphas = eval(expr_tmp)
        resample_wgts = pd.DataFrame(alphas[:-1] * 1.,
                                     index=self.eod.dates[1:],
                                     columns=self.eod.ticker_names)
        bt = BackTest(resample_wgts,
                      returns=self.resample_returns,
                      cycle='day',
                      IS_OOS_ratio=None,
                      stat_info=False,
                      plot=False,
                      quintiles=3,
                      turnover=1,
                      cost=0.,
                      ticker_names=None,
                      output_dir=None,
                      test_mode=False,
                      signal_name=None)
        bt.stat_quintiles()
        bt.stat_quintiles_pnl()
        bt.stat_alpha_pnl()
        bt.stat_alpha_sharpe()

        # 保存信号
        print expr_ds.values.id, expr_ds.values.expr, 'sharpe:', bt.alpha_sharpe
    def should_generate_errors_over_time_for_each_model(self):
        first_start_datetime = [
            '2016-07-16 09:00:00-04:00', '2016-08-16 09:00:00-04:00'
        ]
        l1_time = [9, 10]
        l1_day = [0, 0]
        schedule_type = [1, 1]
        start_month = [7, 8]
        start_year = [2016, 2016]
        user_tz = ['Brasilia', 'Brasilia']
        args = {
            'l1_time': l1_time,
            'l1_day': l1_day,
            'schedule_type': schedule_type,
            'first_start_datetime': first_start_datetime,
            'start_month': start_month,
            'start_year': start_year,
            'user_tz': user_tz
        }

        summaries = pd.DataFrame(args)
        summaries['first_start_datetime'] = pd.to_datetime(
            summaries['first_start_datetime'])

        bt = BackTest(data=summaries,
                      model=DumbModel,
                      training_data_span_months=1)
        error = bt.errors()
        expect('2016-8' in error.index.values).to.equal(True)
        expect('2016-7' not in error.index.values).to.equal(True)
        expect('2016-6' not in error.index.values).to.equal(True)
from backtest import BackTest
import pandas as pd

#매일 장이 끝난 후에 이 파일을 돌려야 백테스트를 위한 분봉데이터를 수집할 수 있음.
if __name__ == "__main__":
    #객체 생성
    backtest = BackTest()
    #통신 확인
    if backtest.InitPlusCheck() == False:
        exit()

    # 전체 코스피, 코스닥 코드 불러오기
    entire_code, entire_name = backtest.get_entire_code()
    # code = backtest.get_yesterday_highest()

    # # 어제 상한가 종목 및 날짜 불러오기
    # date_company = pd.DataFrame([[backtest.today,code]],columns=['내일날짜','상한가다음날'])

    # # 해당 분봉 데이터 업데이트
    # backtest.get_minute_stock(date_company, entire_code, int(backtest.today))

    # 특정 날짜 빼먹었을 때 데이터 축적
    code = ['A003495']
    specific_date = '20201117'
    date_company = pd.DataFrame([[specific_date, code]],
                                columns=['내일날짜', '상한가다음날'])
    backtest.get_minute_stock(date_company, entire_code, int(specific_date))

    # 긴 기간을 구하고 싶을때
    # change = backtest.get_change(entire_code, 100)
    # date_company = backtest.date_company_extract(change)
    config = ConfigParser()
    config.read('./config/config-excel.conf')

    def create_handlers(config, event_queue):
        """
        create data_handler, strategy, portfolio, execution
        """
        data_handler = FileMDEngine(config, event_queue)
        strategy = ExcelStrategy(config, event_queue, data_handler)
        execution = ExcelExecution(config, event_queue, data_handler)
        portfolio = ExcelPortfolio(config, event_queue, data_handler,
                                   execution)

        return data_handler, strategy, portfolio, execution

    test = BackTest(config, create_handlers)
    test.run_backtest()

    metric = PerformanceMetric(test, config)
    metric.multiplier = 10
    metrics = metric.calculate_performance()

    df1 = metrics.get('data')

    columns = [
        'close', 'position', 'tradepnl_wo_commission', 'cumpnl_wo_commission'
    ]
    df1 = df1[columns]

    df2 = load_excel_result()
    df2.columns = columns
Exemple #6
0
if __name__ == '__main__':
    from talib import SMA
    import pandas as pd
    from dataload import get_sample_data
    from mytrader import HelloWorldTrade
    from backtest import BackTest
    from utils.visualize import visuialize_performance
    df = get_sample_data()
    trading_data = df[['Close']].rename(columns={'Close': '2380_close'})
    indexes = df  # we don't use any index to support the strategy in this hello-world trader
    trader = HelloWorldTrade()
    back_tester = BackTest(trading_data, indexes)
    back_tester.evaluate(trader)
    data_to_plot = trading_data.copy()
    data_to_plot['13MA'] = SMA(trading_data['2380_close'], 13)
    data_to_plot['34MA'] = SMA(trading_data['2380_close'], 34)
    visuialize_performance(back_tester, data_to_plot[['2380_close']],
                           data_to_plot[['13MA']], data_to_plot[['34MA']])
    print("see result in output dir!")