예제 #1
0
    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()
예제 #2
0
    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
예제 #3
0
    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..
예제 #4
0
파일: drawdown.py 프로젝트: rsmxq/btrader
    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
예제 #5
0
    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)
예제 #6
0
    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()
예제 #7
0
    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
예제 #8
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}'.")
예제 #9
0
 def create_analysis(self):
     '''Replace default implementation to instantiate an AutoOrdereDict
     rather than an OrderedDict'''
     self.rets = AutoOrderedDict()
예제 #10
0
 def create_analysis(self):
     self.rets = AutoOrderedDict()
     self.rets.total.total = 0
예제 #11
0
 def pack(strategy, **kwargs):
     return AutoOrderedDict(strategy=strategy,
                            params=AutoOrderedDict(**kwargs))
예제 #12
0
 def get_dict(self):
     return AutoOrderedDict() if not self.p.useStandardDict else dict()
예제 #13
0
파일: sqn.py 프로젝트: rlcjj/backtrader
 def start(self):
     self.ret = AutoOrderedDict()
     self.pnl = list()
     self.count = 0
예제 #14
0
 def __init__(self):
     self.rets = AutoOrderedDict()
     self.info = AutoOrderedDict()
     self.info.signals = 0
예제 #15
0
 def start(self):
     self.trades = AutoOrderedDict()
예제 #16
0
 def start(self):
     self.trades = AutoOrderedDict()
     self.trades.total.total = 0
예제 #17
0
def dict_filter(old_dict, mykeys):
    new_dict = AutoOrderedDict({your_key: old_dict[your_key] for your_key in mykeys})
    return new_dict