当前位置: 首页>>代码示例>>Python>>正文


Python pair_trade_analysis.TradeAnalysis类代码示例

本文整理汇总了Python中mewp.util.pair_trade_analysis.TradeAnalysis的典型用法代码示例。如果您正苦于以下问题:Python TradeAnalysis类的具体用法?Python TradeAnalysis怎么用?Python TradeAnalysis使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了TradeAnalysis类的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: back_test

def back_test(pair, date, param):
    tracker = TradeAnalysis(Contract(pair[0]))
    algo = { 'class': ConstantAlgo }
    algo['param'] = {'x': pair[0],
                     'y': pair[1],
                     'a': 1,
                     'b': 0,
                     'rolling': param[0],
                     'bollinger': param[1],
                     'const': param[2],
                     'block': 100,
                     'tracker': tracker
                     }
    settings = { 'date': date,
                 'path': DATA_PATH,
                 'tickset': 'top',
                 'algo': algo,
                 'singletick': True}
    runner = PairRunner(settings)
    runner.run()
    account = runner.account
    history = account.history.to_dataframe(account.items)
    score = float(history[['pnl']].iloc[-1])
    order_win = tracker.order_winning_ratio()
    order_profit = tracker.analyze_all_profit()[0]
    num_rounds = tracker.analyze_all_profit()[2]
    return score, order_win, order_profit, num_rounds, runner
开发者ID:Coderx7,项目名称:CNN,代码行数:27,代码来源:pb.py

示例2: param_updated

    def param_updated(self):
        # make sure parent updates its param
        super(SMAAlgo, self).param_updated()

        # create rolling
        self.long_roll = SimpleMoving(size=self.param['rolling'])
        self.short_roll = SimpleMoving(size=self.param['rolling'])
        self.spreadx_roll = SimpleMoving(size = self.param['rolling'])
        self.spready_roll = SimpleMoving(size = self.param['rolling'])

        #params
        self.bollinger = self.param['bollinger']
        self.block = self.param['block']
        self.stop_win = self.param['stop_win']

        #other params
        self.last_long_res = -999
        self.last_short_res = -999

        #records
        self.records = {'timestamp': [], 'longs': [], 'shorts': [],
                        'long_mean': [], 'short_mean': [],
                        'long_sd': [], 'short_sd':[]}

        self.max_profit = 0

        #tracker
        self.tracker = TradeAnalysis(self.pair.x)
开发者ID:Coderx7,项目名称:CNN,代码行数:28,代码来源:trailing_stopwin.py

示例3: param_updated

    def param_updated(self):
        # make sure parent updates its param
        super(StopWinAlgo, self).param_updated()

        # algo settings
        self.if_ema = self.param['if_ema'] # if false, use sma
        self.if_stop_win = self.param['if_stop_win'] #if false, don't stop win
        self.if_consider_spread = self.param['if_consider_spread'] #if false, don't consider spread and fee

        # create rolling
        self.long_roll = SimpleMoving(size=self.param['rolling'])
        self.short_roll = SimpleMoving(size=self.param['rolling'])
        self.long_autoreg = Autoregressive(alpha = self.param['alpha'])
        self.short_autoreg = Autoregressive(alpha = self.param['alpha'])
        self.spreadx_roll = SimpleMoving(size = self.param['rolling'])
        self.spready_roll = SimpleMoving(size = self.param['rolling'])

        self.bollinger = self.param['bollinger']
        self.block = self.param['block']
        self.stop_win = self.param['stop_win']

        #other params
        self.last_long_res = -999
        self.last_short_res = -999

        #records
        self.records = {'timestamp': [], 'longs': [], 'shorts': [],
                        'long_mean': [], 'short_mean': [],
                        'long_sd': [], 'short_sd':[]}

        #tracker
        self.tracker = TradeAnalysis(self.pair.x)
开发者ID:Coderx7,项目名称:CNN,代码行数:32,代码来源:czce.py

示例4: back_test

def back_test(pair, date, param):
    tracker = TradeAnalysis(Contract(pair[0]))
    algo = {"class": OUAlgo}
    algo["param"] = {
        "x": pair[0],
        "y": pair[1],
        "a": 1,
        "b": 0,
        "rolling": param[0],
        "bollinger": param[1],
        "block": 100,
        "tracker": tracker,
    }
    settings = {"date": date, "path": DATA_PATH, "tickset": "top", "algo": algo, "singletick": True}
    runner = PairRunner(settings)
    runner.run()
    account = runner.account
    history = account.history.to_dataframe(account.items)
    score = float(history[["pnl"]].iloc[-1])
    order_win = tracker.order_winning_ratio()
    order_profit = tracker.analyze_all_profit()[0]
    num_rounds = tracker.analyze_all_profit()[2]
    return score, order_win, order_profit, num_rounds
开发者ID:Coderx7,项目名称:CNN,代码行数:23,代码来源:au_OU.py

示例5: param_updated

    def param_updated(self):
        # make sure parent updates its param
        super(StopWinAlgo, self).param_updated()

        # algo settings
        self.if_ema = self.param["if_ema"]  # if false, use sma
        self.if_stop_win = self.param["if_stop_win"]  # if false, don't stop win
        self.if_consider_spread = self.param["if_consider_spread"]  # if false, don't consider spread and fee

        # create rolling
        self.long_roll = SimpleMoving(size=self.param["rolling"])
        self.short_roll = SimpleMoving(size=self.param["rolling"])
        self.long_autoreg = Autoregressive(alpha=self.param["alpha"])
        self.short_autoreg = Autoregressive(alpha=self.param["alpha"])
        self.spreadx_roll = SimpleMoving(size=self.param["rolling"])
        self.spready_roll = SimpleMoving(size=self.param["rolling"])

        self.bollinger = self.param["bollinger"]
        self.block = self.param["block"]
        self.stop_win = self.param["stop_win"]

        # other params
        self.last_long_res = -999
        self.last_short_res = -999

        # records
        self.records = {
            "timestamp": [],
            "longs": [],
            "shorts": [],
            "long_mean": [],
            "short_mean": [],
            "long_sd": [],
            "short_sd": [],
        }

        # tracker
        self.tracker = TradeAnalysis(self.pair.x)
开发者ID:Coderx7,项目名称:CNN,代码行数:38,代码来源:shfe.py

示例6: StopWinAlgo

class StopWinAlgo(PairAlgoWrapper):

    # called when algo param is set
    def param_updated(self):
        # make sure parent updates its param
        super(StopWinAlgo, self).param_updated()

        # algo settings
        self.if_ema = self.param["if_ema"]  # if false, use sma
        self.if_stop_win = self.param["if_stop_win"]  # if false, don't stop win
        self.if_consider_spread = self.param["if_consider_spread"]  # if false, don't consider spread and fee

        # create rolling
        self.long_roll = SimpleMoving(size=self.param["rolling"])
        self.short_roll = SimpleMoving(size=self.param["rolling"])
        self.long_autoreg = Autoregressive(alpha=self.param["alpha"])
        self.short_autoreg = Autoregressive(alpha=self.param["alpha"])
        self.spreadx_roll = SimpleMoving(size=self.param["rolling"])
        self.spready_roll = SimpleMoving(size=self.param["rolling"])

        self.bollinger = self.param["bollinger"]
        self.block = self.param["block"]
        self.stop_win = self.param["stop_win"]

        # other params
        self.last_long_res = -999
        self.last_short_res = -999

        # records
        self.records = {
            "timestamp": [],
            "longs": [],
            "shorts": [],
            "long_mean": [],
            "short_mean": [],
            "long_sd": [],
            "short_sd": [],
        }

        # tracker
        self.tracker = TradeAnalysis(self.pair.x)

    # what to do on every tick
    def on_tick(self, multiple, contract, info):

        self.tracker.tick_pass_by()  # tell the tracker that one tick passed by
        # skip if price_table doesnt have both
        if len(self.price_table.table) < 2:
            return

        # get residuals and position
        long_res = self.pair.get_long_residual()
        short_res = self.pair.get_short_residual()
        pos = self.position_y()

        ## only do this when plotting is neede
        # update record
        #         if self.if_ema:
        #             self._update_record(long_res, self.autoreg.mean, self.long_roll.sd,\
        #                             short_res, self.autoreg.mean, self.short_roll.sd)
        #         else:
        #             self._update_record(long_res, self.long_roll.mean, self.long_roll.sd,\
        #                             short_res, self.short_roll.mean, self.short_roll.sd)

        # calculate profit for this round
        profit = 0
        if pos == -1:
            profit = long_res + self.last_short_res
        elif pos == 1:
            profit = short_res + self.last_long_res

        # two spread
        spreadx = self.spreadx_roll.mean
        spready = self.spready_roll.mean
        avg_spread = (spreadx + spready) / 2

        # fee
        fee = self.pair.get_fee()

        # stop short position
        if self.if_stop_win:
            if pos == -1:
                if (profit >= max(1, self.stop_win * self.long_roll.sd) and self.if_consider_spread == False) or (
                    profit >= max(1, self.stop_win * self.long_roll.sd, fee) and self.if_consider_spread == True
                ):
                    self.long_y(y_qty=1)
                    self.last_long_res = long_res
                    self.tracker.close_with_stop(profit)
                    return

            # stop long position
            if pos == 1:
                if (profit >= max(1, self.stop_win * self.long_roll.sd) and self.if_consider_spread == False) or (
                    profit >= max(1, self.stop_win * self.long_roll.sd, fee) and self.if_consider_spread == True
                ):
                    self.short_y(y_qty=1)
                    self.last_short_res = short_res
                    self.tracker.close_with_stop(profit)
                    return

#.........这里部分代码省略.........
开发者ID:Coderx7,项目名称:CNN,代码行数:101,代码来源:shfe.py

示例7: SMAAlgo

class SMAAlgo(PairAlgoWrapper):

    # called when algo param is set
    def param_updated(self):
        # make sure parent updates its param
        super(SMAAlgo, self).param_updated()

        # create rolling
        self.long_roll = SimpleMoving(size=self.param['rolling'])
        self.short_roll = SimpleMoving(size=self.param['rolling'])
        self.spreadx_roll = SimpleMoving(size = self.param['rolling'])
        self.spready_roll = SimpleMoving(size = self.param['rolling'])

        #params
        self.bollinger = self.param['bollinger']
        self.block = self.param['block']
        self.stop_win = self.param['stop_win']

        #other params
        self.last_long_res = -999
        self.last_short_res = -999

        #records
        self.records = {'timestamp': [], 'longs': [], 'shorts': [],
                        'long_mean': [], 'short_mean': [],
                        'long_sd': [], 'short_sd':[]}

        self.max_profit = 0

        #tracker
        self.tracker = TradeAnalysis(self.pair.x)

    def on_tick(self, multiple, contract, info):
        self.tracker.tick_pass_by()
        # skip if price_table doesnt have both, TODO fix this bug internally
        if len(self.price_table.table) < 2:
            return

        # get residuals and position
        long_res = self.pair.get_long_residual()
        short_res = self.pair.get_short_residual()
        pos = self.position_y()

        #two spread
        spreadx = self.spreadx_roll.mean
        spready = self.spready_roll.mean
        avg_spread = (spreadx + spready)/2

        #fee
        fee = self.pair.get_fee()

        #update record
#         self._update_record(long_res, self.long_roll.mean, self.long_roll.sd,\
#                             short_res, self.short_roll.mean, self.short_roll.sd)

        #calculate profit
        profit = 0
        if pos == -1:
            profit = long_res + self.last_short_res
        elif pos == 1:
            profit = short_res + self.last_long_res

        #trailing stop win
        if profit > self.max_profit and profit > 0:
            self.max_profit = profit
        else:
            # stop short position
            if pos == -1:
                if self.max_profit - profit > max(1,self.stop_win * self.long_roll.sd) and profit > 0:
                    self.long_y(y_qty = 1)
                    self.last_long_res = long_res
                    self.tracker.close_with_stop(profit - fee)
                    return

            # stop long position
            if pos == 1:
                if self.max_profit - profit > max(1,self.stop_win * self.short_roll.sd) and profit > 0:
                    self.short_y(y_qty = 1)
                    self.last_short_res = short_res
                    self.tracker.close_with_stop(profit - fee)
                    return

        # action only when unblocked: bock size < rolling queue size
        if self.long_roll.queue.qsize() > self.block:
            # long when test long_res > mean+bollinger*sd
            if self.long_roll.test_sigma(long_res, self.bollinger) \
               and long_res > self.long_roll.mean + avg_spread + fee/2:
                # only long when position is 0 or -1
                if pos <= 0:
                    self.long_y(y_qty=1)
                    self.last_long_res = long_res

                    self.max_profit = 0

                    #tell the tracker
                    if pos == 0:
                        self.tracker.open_position()
                    else:
                        self.tracker.close_with_exit(profit - fee)

#.........这里部分代码省略.........
开发者ID:Coderx7,项目名称:CNN,代码行数:101,代码来源:trailing_stopwin.py


注:本文中的mewp.util.pair_trade_analysis.TradeAnalysis类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。