Пример #1
0
 def __init__(self, settings, watchlist, tradeManager):
     Strategy.__init__(self, watchlist, tradeManager)
     self.minprice = settings.getfloat("Strategy", "minprice")
     self.maxprice = self._getfloatsetting(settings, "Strategy", "maxprice")
     self.minavgvolume = self._getfloatsetting(settings, "Strategy", "minavgvolume")
     self.doLongs = settings.getboolean("Strategy", "doLongs")
     self.doShorts = settings.getboolean("Strategy", "doShorts")
     self.numtaps = settings.getint("Strategy", "numtaps")
     self.duration = settings.getint("Strategy", "duration")
     self.mushinessatr = self._getfloatsetting(settings, "Strategy", "mushinessatr")
     self.mushinessfixed = settings.getfloat("Strategy", "mushinessfixed")
     self.taps2m = settings.getint("Strategy", "taps2m")
     self.mushinessfixed2m = settings.getfloat("Strategy", "mushinessfixed2m")
     self.maxintradayrangeatr = self._getfloatsetting(settings, "Strategy", "maxintradayrangeatr")
     self.donchianstop = self._getintsetting(settings, "Strategy", "donchianstop")
     self.target = self._getintsetting(settings, "Strategy", "target")
     self.minhour = self._getintsetting(settings, "Strategy", "minhour")
     self.maxhour = self._getintsetting(settings, "Strategy", "maxhour")
     self.trailstop = settings.getboolean("Strategy", "trailstop")
     self.period = settings.getint("Strategy", "period")
     self.minAPR = self._getfloatsetting(settings, "Strategy", "minAPR")
def main(args):
    sfn = 'input_schema.json'
    with open(sfn, 'r') as sfr:
        schema = json.load(sfr)
    jsonschema.Draft4Validator.check_schema(schema)

    with open(args.json, 'r') as fr:
        candles = pd.read_json(fr.read())
    try:
        jsonschema.validate(candles, schema)
    except jsonschema.ValidationError as e:
        print('Invalid JSON - {0}'.format(e.message), file=sys.stderr)

    m = Market(candles['candles'])
    s = Strategy(m)
    bt = BackTest(m, s)
    bt.run()
 def get_computed_strategy(self, backtest_settings):
     '''
     return a time series (net asset value)
     @param backtest_settings: a backtest settings
     @return: the computed strategy
     @raise ServiceError:  
     '''
     
     # initialize strategy
     strategy = Strategy(backtest_settings['name'])
     
     # set dates
     strategy.first_date = datetime.strptime(backtest_settings['first_date'].value, '%Y%m%dT%H:%M:%S').date()
     strategy.last_date = datetime.strptime(backtest_settings['last_date'].value, '%Y%m%dT%H:%M:%S').date()
     
     # set portfolio, first cash flow and currency
     strategy.portfolio = Portfolio(backtest_settings['currency'])
     initial_cash_flow = CashFlow(strategy.first_date,
                                  backtest_settings['amount'],
                                  backtest_settings['currency'])
     strategy.portfolio.add_transaction(initial_cash_flow)
     
     # set rolling
     strategy.rolling = backtest_settings['rolling']
     
     # add instruments
     instruments_cache = {}
     for ticker in backtest_settings['tickers']:
         first_data_date = strategy.calendar_util.get_n_previous_business_date(strategy.first_date, 
                                                                               backtest_settings['needed_depth'])
         instrument = self.instrument_service.get_by_ticker(ticker, first_data_date, strategy.last_date)
         financial_instrument = self.get_financial_instrument(instrument)
         strategy.add_instrument(financial_instrument) 
 
         # store in cache
         instruments_cache[ticker] = financial_instrument
     
     # add quantity computers
     computers_cache = {}
     for computer_type in backtest_settings['quantity_computers']:
         quantity_computer = self.get_quantity_computer(computer_type, strategy)
         strategy.add_quantity_computer(quantity_computer)
 
         # store in cache
         computers_cache[computer_type] = quantity_computer
     
     # add indicators
     indicators_cache = {}
     for indicator_setting in backtest_settings['indicator_settings']:
         financial_instrument = instruments_cache[indicator_setting['ticker']]
         indicator = self.get_indicator(indicator_setting, backtest_settings, financial_instrument)
         indicator.calendar_util = strategy.calendar_util
         strategy.add_indicator(indicator)
         
         # store in cache
         indicators_cache[indicator.id] = indicator
 
     # add trading blocks
     blocks_cache = {}
     for trading_block_setting in backtest_settings['trading_block_settings']:
         block = TradingBlock(trading_block_setting['name'])
         block.order_type = trading_block_setting['order_type']
         block.instrument = instruments_cache[trading_block_setting['ticker']]
         
         # store in cache
         blocks_cache[block.id] = block
         
         strategy.add_trading_block(block)
         
     # add condition bundle
     for condition_bundle_setting in backtest_settings['condition_bundle_settings']:
         current_block = blocks_cache[condition_bundle_setting['trading_block_name']]
         current_indicator = indicators_cache[condition_bundle_setting['indicator_name'] + current_block.instrument.ticker]
         strategy.add_condition_bundle_to_trading_block(current_block,
                                                        condition_bundle_setting['regime_type'],
                                                        current_indicator)
         
     # add quantity computer to blocks
     for quantity_setting in backtest_settings['quantity_settings']:
         current_block = blocks_cache[quantity_setting['trading_block_name']]
         allocation = quantity_setting['allocation']
         current_computer = computers_cache[quantity_setting['quantity_computer_type']]
         strategy.add_quantity_computer_to_trading_block(current_block, current_computer, allocation)
         
     try:    
         strategy.compute()
     except Exception, e:
         raise ServerError(e.message)