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
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!")