本文整理汇总了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
示例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)
#.........这里部分代码省略.........