def generate_strategy_params(self, strategy, optimize=False): if strategy == bt.strategies.STADTDBreakoutStrategy: for args in self._generate_STADTDB(optimize=optimize): yield args else: yield AutoOrderedDict()
def create_analysis(self): # Set up variables.. # Variables hidden from user.. # Depending on the input parameter user provides for 'filter', # append 'LONG' or 'SHORT' in table heading output to user. # Helps user identify the types of trades stats calculated on, # either long, short or all (i.e. both).. if self.p.filter == 'long': self._tableLongShort = 'LONG' # Append 'LONG' to table heading.. elif self.p.filter == 'short': self._tableLongShort = 'SHORT' # Append 'SHORT' to table heading.. elif self.p.filter == 'all': self._tableLongShort = 'TRADES' # Blank char appended to our table.. else: raise Exception("Parameter 'filter' must be 'long', 'short', or" + " 'all' not '%s'." % str(self.p.filter)) self._all_pnl_list=[] # hidden from user - all trades pnl. self._won_pnl_list=[] # hidden from user - win trades pnl. self._lost_pnl_list=[] # hidden from user - lost trades pnl. self._curStreak = None # Current streak type [None, 'Won', 'Lost'] self._wonStreak_list=[] # Store each won streak in list.. self._lostStreak_list=[] # Store each loss streak in list.. # Variables output to user.. o = self.rets = AutoOrderedDict() # Return user object.. # Stats applied to all trades (winners and losers).. o.all.trades.total = 0 o.all.trades.open = 0 o.all.trades.closed = 0 o.all.pnl.total = None o.all.pnl.average = None o.all.streak.zScore = None o.all.stats.profitFactor = None o.all.stats.winFactor = None o.all.stats.winRate = None o.all.stats.rewardRiskRatio = None o.all.stats.expectancyPercentEstimated = None o.all.stats.kellyPercent = None for each in ['won', 'lost']: oWL=self.rets[each] oWL.trades.closed = 0 oWL.trades.percent = None oWL.pnl.total = None oWL.pnl.average = None oWL.pnl.median = None oWL.pnl.max = None oWL.streak.current = 0 oWL.streak.max = None oWL.streak.average = None oWL.streak.median = None
def create_analysis(self): #print('C**T TRADE RECORDER') # Keep dict of trades based on tradeid # Note: must be a unique tradeid defined for each trade else will # get overwritten.. self.rets = AutoOrderedDict() self.rets.openTrades = [] # List of all open trades.. self.rets.closedTrades = [] # List of all closed trades.. # Hidden from user, destroyed at end, useful to track trades.. self._tradeDict = {} # Temp store Trade objects..
def create_analysis(self): self.rets = AutoOrderedDict() # dict with . notation self.rets.len = 0 self.rets.drawdown = 0.0 self.rets.moneydown = 0.0 self.rets.max.len = 0.0 self.rets.max.drawdown = 0.0 self.rets.max.moneydown = 0.0 self._maxvalue = float('-inf') # any value will outdo it
def _generate_STADTDB(self, optimize=False): if optimize: yield AutoOrderedDict(entry_td_max=-1, close_td_reversal=False) for factor in [2.0, 3.0, 4.0]: for st_period in [3, 7, 21, 50]: for use_wick in [True, False]: for entry_td_max in [2, 4, 7]: for close_td_reversal in [True, False]: # 3 * 4 * 2 * 3 * 2 = 144 yield AutoOrderedDict( entry_td_max=entry_td_max, close_td_reversal=close_td_reversal, st_factor=factor, st_period=st_period, st_use_wick=use_wick, ) else: yield AutoOrderedDict(entry_td_max=4, close_td_reversal=True)
def create_analysis(self): self.rets = AutoOrderedDict() self.rets.trades.total = 0 self.rets.trades.positives = 0 self.rets.trades.negatives = 0 self.accumulate = 0 self.accumulate_profit = 0 self.accumulate_loss = 0 self.rets.avg.trade = 0 self.rets.avg.profit_trade = 0 self.rets.avg.loss_trade = 0 self._value = self.strategy.broker.get_cash()
def create_analysis(self): #self.rets is backtrader analyzer dictionary - need to use to print results. self.rets.total.closed means "total" will print, followed by sub heading "closed" self.rets = AutoOrderedDict() self.rets.expectancy_dollars = 0 self.rets.winratio = 0 self.rets.lossratio = 0 self.rets.pnl.gross.total = 0 self.rets.pnl.net.total = 0 self.rets.total.total = 0 self.rets.total.open = 0 self.rets.total.closed = 0 self.rets.won.pnl.average = 0 self.rets.lost.pnl.average = 0 self.rets.won.total = 0 self.rets.lost.total = 0
def create_analysis(self): # Keep dict of trades based on tradeid. # Note: must be a unique tradeid defined for each trade else will # get overwritten. self.rets = AutoOrderedDict() self.rets.openTrades = [] # List of all open trades.. self.rets.closedTrades = [] # List of all closed trades.. self.rets.equityCurve = [] # List of dictonary # Hidden from user, destroyed at end, useful to track trades. self._tradeDict = {} # Temp store Trade objects.. self._cumulativeEquity = None # Keep track of our equity.. # Check user parameters are valid - if not raise Exception. if self.p.mode not in ['trades', 'equity', 'trades+equity']: raise Exception( "TradeRecorder Analyzer must have parameter " + "'mode' set to either 'trades', 'equity' or 'trades+equity'." + f"\nInstead you have set it to '{self.p.mode}'.")
def create_analysis(self): '''Replace default implementation to instantiate an AutoOrdereDict rather than an OrderedDict''' self.rets = AutoOrderedDict()
def create_analysis(self): self.rets = AutoOrderedDict() self.rets.total.total = 0
def pack(strategy, **kwargs): return AutoOrderedDict(strategy=strategy, params=AutoOrderedDict(**kwargs))
def get_dict(self): return AutoOrderedDict() if not self.p.useStandardDict else dict()
def start(self): self.ret = AutoOrderedDict() self.pnl = list() self.count = 0
def __init__(self): self.rets = AutoOrderedDict() self.info = AutoOrderedDict() self.info.signals = 0
def start(self): self.trades = AutoOrderedDict()
def start(self): self.trades = AutoOrderedDict() self.trades.total.total = 0
def dict_filter(old_dict, mykeys): new_dict = AutoOrderedDict({your_key: old_dict[your_key] for your_key in mykeys}) return new_dict