def __init__(self, **kwargs): """ Args: **kwargs: see BTgymBaseStrategy args. """ #super(DevStrat001, self)._set_params(self.params) super(DevStrat_4_6, self).__init__(**kwargs) self.log.debug('DEV_state_shape: {}'.format(self.p.state_shape)) self.log.debug('DEV_skip_frame: {}'.format(self.p.skip_frame)) self.log.debug('DEV_portfolio_actions: {}'.format(self.p.portfolio_actions)) self.log.debug('DEV_drawdown_call: {}'.format(self.p.drawdown_call)) self.log.debug('DEV_target_call: {}'.format(self.p.target_call)) self.log.debug('DEV_dataset_stat:\n{}'.format(self.p.dataset_stat)) self.log.debug('DEV_episode_stat:\n{}'.format(self.p.episode_stat)) # Define data channels: self.channel_O = bt.Sum(self.data.open, - self.data.open(-1)) self.channel_H = bt.Sum(self.data.high, - self.data.open) self.channel_L = bt.Sum(self.data.low, - self.data.open) # Episodic metadata: self.state['metadata'] = { 'trial_num': np.asarray(self.p.metadata['trial_num']), 'sample_num': np.asarray(self.p.metadata['sample_num']), 'first_row': np.asarray(self.p.metadata['first_row']) }
def __init__(self): self.sma5 = btind.SimpleMovingAverage(period=5) # 5日均线 self.sma10 = btind.SimpleMovingAverage(period=10) # 10日均线 # bt.And 中所有条件都满足时返回 1;有一个条件不满足就返回 0 self.And = bt.And(self.data > self.sma5, self.data > self.sma10, self.sma5 > self.sma10) # bt.Or 中有一个条件满足时就返回 1;所有条件都不满足时返回 0 self.Or = bt.Or(self.data > self.sma5, self.data > self.sma10, self.sma5 > self.sma10) # bt.If(a, b, c) 如果满足条件 a,就返回 b,否则返回 c self.If = bt.If(self.data > self.sma5, 1000, 5000) # bt.All,同 bt.And self.All = bt.All(self.data > self.sma5, self.data > self.sma10, self.sma5 > self.sma10) # bt.Any,同 bt.Or self.Any = bt.Any(self.data > self.sma5, self.data > self.sma10, self.sma5 > self.sma10) # bt.Max,返回同一时刻所有指标中的最大值 self.Max = bt.Max(self.data, self.sma10, self.sma5) # bt.Min,返回同一时刻所有指标中的最小值 self.Min = bt.Min(self.data, self.sma10, self.sma5) # bt.Sum,对同一时刻所有指标进行求和 self.Sum = bt.Sum(self.data, self.sma10, self.sma5) # bt.Cmp(a,b), 如果 a>b ,返回 1;否则返回 -1 self.Cmp = bt.Cmp(self.data, self.sma5)
def set_datalines(self): # Define data channels: self.channel_O = bt.Sum(self.data.open, -self.data.open(-1)) self.channel_H = bt.Sum(self.data.high, -self.data.open) self.channel_L = bt.Sum(self.data.low, -self.data.open)