Пример #1
0
 def __init__(self, engine, code, parent=None):
     """Constructor"""
     super().__init__()
     LoggerInterface.__init__(self, parent=parent)
     APIInterface.__init__(self)
     Runnable.__init__(self)
     ConfigInterface.__init__(self, parent=parent)
     self.__id = self.next_auto_inc()
     self.user = self.config.user
     self.user_dir = UserDirectory(User(self.config.user))
     self.__strategy_code = StrategyCode(self.config.name, code)
     self.__code_parser = None
     self.engine = proxy(engine)
     self.time_frame = self.config.time_frame
     self.symbols = self.config.symbols
     self.start_time = self.config.start_time
     self.end_time = self.config.end_time
     self.capital_base = self.config.capital_base
     self.handlers = {}
     self.signal_factory = SignalFactory()
     self.signals = {}
     self.system_functions = {}
     self.series_storage = {}
     self.printer = FilePrinter(self.config.user, self.config.name,
                                self.engine)
     self.__context = {}
     self._setting()
     self.logger_name = "Strategy"
Пример #2
0
 def __init__(self, user, name, engine):
     self.__user = user
     self.__name = name
     self.__engine = engine
     self.__file_path = os.path.join(
         UserDirectory(User(user)).get_temp_dir(), name + '.log')
     self.__file = None
Пример #3
0
 def set_handle(logger, user=config.get("user", "non-existent user")):
     path = os.path.join(
         UserDirectory(User(user)).get_temp_dir(), "runtime.log")
     rt_handler = RotatingFileHandler(path,
                                      maxBytes=10 * 1024 * 1024,
                                      backupCount=5)
     rt_handler.setLevel(logging.DEBUG)
     formatter = logging.Formatter(
         '%(asctime)s %(filename)-20s[line:%(lineno)-3d] %(levelname)-8s %(message)s'
     )
     rt_handler.setFormatter(formatter)
     logger.addHandler(rt_handler)
Пример #4
0
def test(detail):
    def get_first_n_lines(string, n):
        lines = string.splitlines()
        n = min(n, len(lines))
        return '\n'.join(lines[:n])

    #gc.set_debug(gc.DEBUG_UNCOLLECTABLE | gc.DEBUG_SAVEALL)
    start_time = time.time()
    with codecs.open('../test/testcode7.py', 'r', 'utf-8') as f:
        code = f.read()
    user = User('10032')
    backtest = Backtesting(user, 'test', code, ['EURUSD'], 'M30', '2015-01-01',
                           '2016-01-01')
    print(backtest.progress)
    for _ in range(4):
        backtest.start()
        print(backtest.get_performance().trade_summary)
    if detail:
        translator = DataframeTranslator()
        user_dir = UserDirectory(user)
        print(user_dir.get_sys_func_list())
        print(backtest.get_profit_records())  # 获取浮动收益曲线
        print(backtest.get_parameters())  # 获取策略中的参数(用于优化)
        performance = backtest.get_performance()  # 获取策略的各项指标
        print('trade_info:\n%s' % performance._manager.trade_info)
        print('trade_summary:\n%s' % performance.trade_summary)
        print('trade_details:\n%s' % performance.trade_details)
        print(translator.dumps(performance._manager.trade_info))
        print(translator.dumps(performance.trade_details))
        print('strategy_summary:\n%s' % performance.strategy_summary)
        print('optimize_info:\n%s' % performance.optimize_info)
        print('info_on_home_page\n%s' % performance.get_info_on_home_page())
        print(performance.get_factor_list())
        # print(performance.yield_curve)
        print('ar:\n%s' % performance.ar)  # 年化收益率
        print('risk_free_rate:\n%s' %
              performance._manager.risk_free_rate)  # 无风险收益率
        print('volatility:\n%s' % performance.volatility)  # 波动率
        print('sharpe_ratio:\n%s' % performance.sharpe_ratio)  # sharpe比率
        print('max_drawdown:\n%s' % performance.max_drawdown)  # 最大回测
        print('trade_position\n%s' % performance.trade_positions)  # 交易仓位
        print(time.time() - start_time)
        # print('output:\n%s' % get_first_n_lines(backtest.get_output(), 100))
        print(time.time() - start_time)
        print(backtest.progress)
    paras = {'handle': {'times': {'start': 10, 'end': 10, 'step': 1}}}
    optimize = backtest.optimize(paras, None, None)
    print('optimize\n%s' % optimize)
    print(time.time() - start_time)
    del backtest
    performance = None
    optimize = None
Пример #5
0
 def __init__(self,
              engine,
              user,
              name,
              code,
              symbols=None,
              time_frame=None,
              start_time=None,
              end_time=None):
     """Constructor"""
     self.__id = self.next_auto_inc()
     self.user = user
     self.user_dir = UserDirectory(user)
     self.name = name
     self.code = code
     self.engine = engine
     self.time_frame = time_frame
     self.symbols = symbols
     self.start_time = start_time
     self.end_time = end_time
     self.max_length = 0
     self.capital_base = 100000
     self.handlers = {}
     self.listeners = {}
     self.system_functions = {}
     self.series_storage = {}
     self.__printer = FilePrinter(user, name, self.engine)
     self.__context = {}
     # 是否完成了初始化
     self.trading = False
     # 在字典中保存Open,High,Low,Close,Volumn,CurrentBar,MarketPosition,
     # 手动为exec语句提供local命名空间
     self.__locals_ = dict(
         sell=partial(self.engine.sell, strategy=self.__id),
         short=partial(self.engine.short, strategy=self.__id),
         buy=partial(self.engine.buy, strategy=self.__id),
         cover=partial(self.engine.cover, strategy=self.__id),
         marketposition=self.engine.get_current_positions(),
         currentcontracts=self.engine.get_current_contracts(),
         data=self.engine.get_data,
         context=self.__context,
         export=partial(export, strategy=self),
         put=self.put_context,
         get=self.get_context,
         print=self.__printer.print,
         listeners=self.listeners,
         system_functions=self.system_functions,
     )
     # 将策略容器与对应代码文件关联
     self.bind_code_to_strategy(self.code)
Пример #6
0
    def get_first_n_lines(string, n):
        lines = string.splitlines()
        n = min(n, len(lines))
        return '\n'.join(lines[:n])

    start_time = time.time()
    with codecs.open('../test/testcode9.py', 'r', 'utf-8') as f:
        code = f.read()
    user = User('10032')
    backtest = Backtesting(user, 'test', code, ['EURUSD'], 'M15', '2015-01-02',
                           '2015-03-01')
    print(backtest.progress)
    backtest.start()
    translator = DataframeTranslator()
    user_dir = UserDirectory(user)
    print(user_dir.get_sys_func_list())
    print(backtest.get_profit_records())  # 获取浮动收益曲线
    print(backtest.get_parameters())  # 获取策略中的参数(用于优化)
    performance = backtest.get_performance()  # 获取策略的各项指标
    print('trade_info:\n%s' % performance._manager.trade_info)
    print('trade_summary:\n%s' % performance.trade_summary)
    print('trade_details:\n%s' % performance.trade_details)
    print(translator.dumps(performance._manager.trade_info))
    print(translator.dumps(performance.trade_details))
    print('strategy_summary:\n%s' % performance.strategy_summary)
    print('optimize_info:\n%s' % performance.optimize_info)
    print('info_on_home_page\n%s' % performance.get_info_on_home_page())
    print(performance.get_factor_list())
    print(performance.yield_curve)
    print('ar:\n%s' % performance.ar)  # 年化收益率
Пример #7
0
 def __init__(self,
              engine,
              user,
              name,
              code,
              symbols=None,
              time_frame=None,
              start_time=None,
              end_time=None):
     """Constructor"""
     self.__id = self.next_auto_inc()
     self.user = user
     self.user_dir = UserDirectory(user)
     self.name = name
     self.code = code
     self.engine = proxy(engine)
     self.time_frame = time_frame
     self.symbols = symbols
     self.start_time = start_time
     self.end_time = end_time
     self.max_length = 0
     self.capital_base = 100000
     self.handlers = {}
     self.signal_factory = SignalFactory()
     self.signals = {}
     self.system_functions = {}
     self.series_storage = {}
     self.__printer = FilePrinter(user, name, self.engine)
     self.__context = {}
     self.__points = {}
     # 是否完成了初始化
     self.trading = False
     # 在字典中保存Open,High,Low,Close,Volumn,CurrentBar,MarketPosition,
     # 手动为exec语句提供globals命名空间
     self.__glb = {
         'Buy':
         partial(self.engine.open_position, strategy=self.__id,
                 direction=1),
         'Sell':
         partial(self.engine.close_position,
                 strategy=self.__id,
                 direction=1),
         'SellShort':
         partial(self.engine.open_position,
                 strategy=self.__id,
                 direction=-1),
         'BuyToCover':
         partial(self.engine.close_position,
                 strategy=self.__id,
                 direction=-1),
         'Positions':
         self.engine.current_positions,
         'Data':
         self.engine.data,
         'Context':
         self.__context,
         'Export':
         partial(export, strategy=self),
         'Put':
         self.put_context,
         'Get':
         self.get_context,
         'print':
         self.__printer.print,
         'Points':
         self.__points,
         'signals':
         self.signals,
         'system_functions':
         self.system_functions
     }
     # 将策略容器与对应代码文件关联
     self.bind_code_to_strategy(self.code)