當前位置: 首頁>>代碼示例>>Python>>正文


Python TradeAnalysis.close_with_exit方法代碼示例

本文整理匯總了Python中mewp.util.pair_trade_analysis.TradeAnalysis.close_with_exit方法的典型用法代碼示例。如果您正苦於以下問題:Python TradeAnalysis.close_with_exit方法的具體用法?Python TradeAnalysis.close_with_exit怎麽用?Python TradeAnalysis.close_with_exit使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在mewp.util.pair_trade_analysis.TradeAnalysis的用法示例。


在下文中一共展示了TradeAnalysis.close_with_exit方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。

示例1: StopWinAlgo

# 需要導入模塊: from mewp.util.pair_trade_analysis import TradeAnalysis [as 別名]
# 或者: from mewp.util.pair_trade_analysis.TradeAnalysis import close_with_exit [as 別名]

#.........這裏部分代碼省略.........
            # long when test long_res > mean+bollinger*sd
            if (
                (
                    long_res > self.long_autoreg.mean + self.bollinger * self.long_roll.sd
                    and self.if_ema == True
                    and self.if_consider_spread == False
                )
                or (
                    self.long_roll.test_sigma(long_res, self.bollinger)
                    and self.if_ema == False
                    and self.if_consider_spread == False
                )
                or (
                    long_res - self.long_autoreg.mean > max(fee + avg_spread, self.bollinger * self.long_roll.sd)
                    and self.if_ema == True
                    and self.if_consider_spread == True
                )
                or (
                    self.long_roll.test_sigma(long_res, self.bollinger)
                    and long_res - self.long_roll.mean > fee + avg_spread
                    and self.if_ema == False
                    and self.if_consider_spread == True
                )
            ):
                # only long when position is 0 or -1
                if pos <= 0:
                    self.long_y(y_qty=1)
                    self.last_long_res = long_res

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

                    return

            # short when test short_res > mean+bollinger*sd
            elif (
                (
                    short_res > self.short_autoreg.mean + self.bollinger * self.short_roll.sd
                    and self.if_ema == True
                    and self.if_consider_spread == False
                )
                or (
                    self.short_roll.test_sigma(short_res, self.bollinger)
                    and self.if_ema == False
                    and self.if_consider_spread == False
                )
                or (
                    short_res - self.short_autoreg.mean > max(fee + avg_spread, self.bollinger * self.short_roll.sd)
                    and self.if_ema == True
                    and self.if_consider_spread == True
                )
                or (
                    self.short_roll.test_sigma(short_res, self.bollinger)
                    and short_res - self.short_roll.mean > fee + avg_spread
                    and self.if_ema == False
                    and self.if_consider_spread == True
                )
            ):
                # only short when position is 0 or 1
                if pos >= 0:
                    self.short_y(y_qty=1)
                    self.last_short_res = short_res
開發者ID:Coderx7,項目名稱:CNN,代碼行數:69,代碼來源:shfe.py

示例2: SMAAlgo

# 需要導入模塊: from mewp.util.pair_trade_analysis import TradeAnalysis [as 別名]
# 或者: from mewp.util.pair_trade_analysis.TradeAnalysis import close_with_exit [as 別名]
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,代碼行數:103,代碼來源:trailing_stopwin.py


注:本文中的mewp.util.pair_trade_analysis.TradeAnalysis.close_with_exit方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。