Python talib 模块,ATR 实例源码

我们从Python开源项目中,提取了以下12个代码示例,用于说明如何使用talib.ATR

项目:hf_at_py    作者:haifengat    | 项目源码 | 文件源码
def __init__(self):
        super().__init__()

        self.Instrument = 'rb1610'
        self.Interval = 15
        self.IntervalType = IntervalType.Minute
        self.BeginDate = '20160101'

        self.Params['Lots'] = 1

        self.SingleOrderOneBar = True

        self.Params['RiskRatio'] = 1  # % Risk Per N ( 0 - 100)
        self.Params['ATRLength'] = 20  # ?????? ATR Length
        self.Params['boLength'] = 20  # ??? BreakOut Length
        self.Params['fsLength'] = 55  # ??? FailSafe Length
        self.Params['teLength'] = 10  # ???? Trailing Exit Lengt
项目:quant    作者:yutiansut    | 项目源码 | 文件源码
def ATR(security_list, timeperiod=14):
    # ????????????
    if isinstance(security_list, str):
        security_list = [security_list]
    # ?? ATR
    atr = {}
    for stock in security_list:
        security_data = attribute_history(
            stock, timeperiod * 2, '1d', ['close', 'high', 'low'], df=False)
        close_ATR = security_data['close']
        high_ATR = security_data['high']
        low_ATR = security_data['low']
        atr[stock] = talib.ATR(high_ATR, low_ATR, close_ATR, timeperiod)
    return atr

# ???
项目:turtle-trading    作者:vyq    | 项目源码 | 文件源码
def compute_average_true_ranges(context):
    """
    Compute average true ranges, or N.
    """
    if context.is_debug:
        start_time = time()

    rolling_window = 21
    moving_average = 20

    for market in context.prices.items:
        context.average_true_range[market] = ATR(
            context.prices[market].high[-rolling_window:],
            context.prices[market].low[-rolling_window:],
            context.prices[market].close[-rolling_window:],
            timeperiod=moving_average
        )[-1]

    if context.is_test:
        assert(len(context.average_true_range) > 0)

    if context.is_debug:
        time_taken = (time() - start_time) * 1000
        log.debug('Executed in %f ms.' % time_taken)
        assert(time_taken < 1024)
项目:futuquant    作者:FutunnOpen    | 项目源码 | 文件源码
def atr(self, n, array=False):
        """ATR??"""
        result = talib.ATR(self.high, self.low, self.close, n)
        if array:
            return result
        return result[-1]

    # ----------------------------------------------------------------------
项目:autoxd    作者:nessessary    | 项目源码 | 文件源码
def ATR(highs, lows, closes):
    """????"""
    highs = np.array(highs)
    lows = np.array(lows)
    closes = np.array(closes)
    return talib.ATR(highs, lows, closes)
项目:Mercury    作者:ruyiqf    | 项目源码 | 文件源码
def history(self, databar, period, indicator):
        """Recieve mock data as databar dataframe format
        :databar: mock data bar, flexible, means will be changed by indicator, one dimension or several dimensions
        :period: time interval, flexbile too
        :indicator: include ['sma','macd','atr' ...]
        """
        if indicator == 'sma':
            try:
                sma0 = talib.SMA(np.array(databar.low), timeperiod = period)
                sma1 = talib.SMA(np.array(databar.close), timeperiod = period)
                sma2 = talib.SMA(np.array(databar.high), timeperiod = period)
                return pd.DataFrame({'sma0':sma0, 'sma1':sma1, 'sma2':sma2}, index=pd.DatetimeIndex(databar.date))
            except KeyError:
                print('Pls check databar whether is dataframe')
                return None

        elif indicator == 'atr':
            try:
                atr = talib.ATR(np.array(databar.high), np.array(databar.low), np.array(databar.close), timeperiod = period)
                return pd.DataFrame({'atr':atr}, index=pd.DatetimeIndex(databar.date))
            except KeyError:
                print('Pls check databar whether is dataframe')
                return None
        elif indicator == 'macd':
            try:
                macd, macdsignal, macdhist = talib.MACD(databar, 
                                                        fastperiod = period['fastperiod'],
                                                        slowperiod = period['slowperiod'],
                                                        signalperiod = period['signalperiod'])

                return pd.DataFrame({'macd':macd, 'macdsignal':macdsignal, 'macdhist':macdhist}, index=pd.DatetimeIndex(databar.date))
            except KeyError:
                print('Pls check databar whether is dataframe')
                return None
项目:StockPredictor    作者:wallsbreaker    | 项目源码 | 文件源码
def calculate_indicator(stock_df):
    periods = [3, 5, 10, 20, 30, 60]
    # MA
    for period in periods:
        stock_df['MA' + str(period)] = talib.MA(stock_df['close'].values, timeperiod=period)

    # EMA
    periods = [3, 5, 10, 20, 30, 60]
    for period in periods:
        stock_df['EMA' + str(period)] = talib.EMA(stock_df['close'].values, timeperiod=period)

    # AMTMA
    periods = [5, 10, 20]
    for period in periods:
        stock_df['AMTMA' + str(period)] = talib.MA(stock_df['amount'].values, timeperiod=period)

    # ATR
    periods = [5, 10, 20]
    for period in periods:
        stock_df['ATR' + str(period)] = talib.ATR(stock_df['high'].values, stock_df['low'].values,
                                                  stock_df['close'].values, timeperiod=period)

    # ADX
    period = 14
    stock_df['ADX' + str(period)] = talib.ADX(stock_df['high'].values, stock_df['low'].values,
                                              stock_df['close'].values, timeperiod=period)

    # MACD
    stock_df['MACD_DIFF'], stock_df['MACD_DEA'], stock_df['MACD_HIST'] = talib.MACD(
        stock_df['close'].values, fastperiod=12, slowperiod=26, signalperiod=9)

    # CCI
    period = 14
    stock_df['CCI' + str(period)] = talib.CCI(stock_df['high'].values, stock_df['low'].values,
                                              stock_df['close'].values, timeperiod=period)

    # MFI
    period = 14
    stock_df['MFI' + str(period)] = talib.MFI(stock_df['high'].values, stock_df['low'].values,
                                              stock_df['close'].values, stock_df['volume'].values,
                                              timeperiod=period)

    # ROCP
    periods = [5, 10, 20]
    for period in periods:
        stock_df['ROCP' + str(period)] = talib.ROCP(stock_df['close'].values, timeperiod=period)
项目:StockPredictor    作者:wallsbreaker    | 项目源码 | 文件源码
def calculate_indicator(stock_df):
    periods = [3, 5, 10, 20, 30, 60]
    # MA
    for period in periods:
        stock_df['MA' + str(period)] = talib.MA(stock_df['close'].values, timeperiod=period)

    # EMA
    periods = [3, 5, 10, 20, 30, 60]
    for period in periods:
        stock_df['EMA' + str(period)] = talib.EMA(stock_df['close'].values, timeperiod=period)

    # AMTMA
    periods = [5, 10, 20]
    for period in periods:
        stock_df['AMTMA' + str(period)] = talib.MA(stock_df['amount'].values, timeperiod=period)

    # ATR
    periods = [5, 10, 20]
    for period in periods:
        stock_df['ATR' + str(period)] = talib.ATR(stock_df['high'].values, stock_df['low'].values,
                                                  stock_df['close'].values, timeperiod=period)

    # ADX
    period = 14
    stock_df['ADX' + str(period)] = talib.ADX(stock_df['high'].values, stock_df['low'].values,
                                              stock_df['close'].values, timeperiod=period)

    # MACD
    stock_df['MACD_DIFF'], stock_df['MACD_DEA'], stock_df['MACD_HIST'] = talib.MACD(
        stock_df['close'].values, fastperiod=12, slowperiod=26, signalperiod=9)

    # CCI
    period = 14
    stock_df['CCI' + str(period)] = talib.CCI(stock_df['high'].values, stock_df['low'].values,
                                              stock_df['close'].values, timeperiod=period)

    # MFI
    period = 14
    stock_df['MFI' + str(period)] = talib.MFI(stock_df['high'].values, stock_df['low'].values,
                                              stock_df['close'].values, stock_df['volume'].values,
                                              timeperiod=period)

    # ROCP
    periods = [5, 10, 20]
    for period in periods:
        stock_df['ROCP' + str(period)] = talib.ROCP(stock_df['close'].values, timeperiod=period)
项目:slaveo    作者:lamter    | 项目源码 | 文件源码
def mfe_mae(h, days=200, period=5):
    """
    ln(1+mfe) + ln(1-mae)
    :return:
    """

    # ?? buy ???????? 1 ~ 200 ?? MAE ? MFE

    days_list = list(range(0, 200, period))
    h = h.copy()

    h["ATR"] = tl.ATR(*np.asarray(h[["high", "low", "close"]].T))

    e_ratios = []
    # ????
    size = h.shape[0]
    counts = h.buy.value_counts()
    buy_times = counts[True]

    # ??
    buy_index = np.where(h.buy == True)[0]

    # ?? E1 ~ E200, E1 ??????
    for e_days in days_list:
        # ???? e_days=5 ?? MFE ? MAE
        mfe = [0 for _ in range(size)]
        mae = [0 for _ in range(size)]
        for d in buy_index:
            # MFE d : d + edays ?????????
            if d == size-1:
                # ???????
                buy_times = buy_times - 1
                break
            cost = h.cost[d]
            atr = h.ATR[d]

            # ??????????? ?50%????200%???????150%??

            high = h.high[d:d + e_days + 1].max()
            mfe[d] = math.log(high/cost) # ???
#             mfe[d] = high/cost/atr # ???

            low = h.low[d:d + e_days + 1].min()
            mae[d] = math.log(low/cost) # ???
#             mae[d] = low/cost/atr # ???

        # ? MFE ? MAE ??????
        e = (sum(mfe) + sum(mae)) / buy_times # ???
#         e = (sum(mfe) / buy_times) / (sum(mae) / buy_times) # ???

        e_ratios.append(e)

    # ?? DataFrame
    return pd.DataFrame({"E-ratio":e_ratios}, index=days_list), h
项目:future_data_analyse    作者:ipqhjjybj    | 项目源码 | 文件源码
def onFiveBar(self, bar):
        """??5??K?"""
        # ?????????????????????????
        for orderID in self.orderList:
            self.cancelOrder(orderID)
        self.orderList = []

        # ??K???
        self.closeArray[0:self.bufferSize-1] = self.closeArray[1:self.bufferSize]
        self.highArray[0:self.bufferSize-1] = self.highArray[1:self.bufferSize]
        self.lowArray[0:self.bufferSize-1] = self.lowArray[1:self.bufferSize]

        self.closeArray[-1] = bar.close
        self.highArray[-1] = bar.high
        self.lowArray[-1] = bar.low

        self.bufferCount += 1
        if self.bufferCount < self.bufferSize:
            return

        # ??????
        self.atrValue = talib.ATR(self.highArray, 
                                  self.lowArray, 
                                  self.closeArray,
                                  self.kkLength)[-1]
        self.kkMid = talib.MA(self.closeArray, self.kkLength)[-1]
        self.kkUp = self.kkMid + self.atrValue * self.kkDev
        self.kkDown = self.kkMid - self.atrValue * self.kkDev

        # ?????????

        # ????????OCO????
        if self.pos == 0:
            self.intraTradeHigh = bar.high
            self.intraTradeLow = bar.low            
            self.sendOcoOrder(self.kkUp, self.kkDown, self.fixedSize)

        # ??????
        elif self.pos > 0:
            self.intraTradeHigh = max(self.intraTradeHigh, bar.high)
            self.intraTradeLow = bar.low

            orderID = self.sell(self.intraTradeHigh*(1-self.trailingPrcnt/100), 
                                abs(self.pos), True)
            self.orderList.append(orderID)

        # ??????
        elif self.pos < 0:
            self.intraTradeHigh = bar.high
            self.intraTradeLow = min(self.intraTradeLow, bar.low)

            orderID = self.cover(self.intraTradeLow*(1+self.trailingPrcnt/100),
                               abs(self.pos), True)
            self.orderList.append(orderID)

        # ????????
        self.putEvent()        

    #----------------------------------------------------------------------
项目:marketcrush    作者:basaks    | 项目源码 | 文件源码
def exit_trades(self, signals, price_df):
        """
        This function applies the exit criteria.
        :param signals: ndarray
            the signals array
        :param price_df:
            ohlc dataframe
        :return:
        """
        atr = talib.ATR(np.array(price_df['high']), np.array(price_df['low']),
                        np.array(price_df['close']),
                        timeperiod=self.atr_stops_period)
        log.info('Starting to calculate profit/loss')
        price_df['atr'] = atr
        price = price_df['close'].values
        entries = np.zeros_like(atr)
        exits = np.zeros_like(atr)
        profits = np.zeros_like(atr)
        units = np.zeros_like(atr)
        commission = np.zeros_like(atr)
        _exit = 0

        # Calculate profit, entry/exit (hold time) based on atr criteria
        # In this loop we make sure there are no overlapping trades

        for i, s in enumerate(signals):
            if np.isnan(price_df.ix[i, ['atr']].values[0]):
                signals[i] = 0
                continue
            if s and _exit <= i:
                _exit, profit, unit = self._exit_trailing_atr(price_df, i, s)
                entries[i] = i
                exits[i] = _exit
                # subtract commision from profit
                profits[i] = profit
                commission[i] = (unit * (price[i] +
                                         price[_exit])) * self.commission
                units[i] = unit
            else:
                signals[i] = 0

        exits_df = pd.DataFrame({'entries': entries,
                                 'exits': exits,
                                 'profits': profits,
                                 'commission': commission,
                                 'units': units,
                                 'signal': signals},
                                index=price_df.index)
        price_df = price_df.join(exits_df)
        return price_df
项目:hf_at_py    作者:haifengat    | 项目源码 | 文件源码
def BarUpdate(self):
        """"""
        if self.CurrentBar < self.Params['fsLength']:
            return
        atr = talib.ATR(self.H, self.L, self.C, 14)

        lots = self.Params['Lots']

        DonchianHi = talib.MAX(self.H, self.Params['boLength'])[-2]
        DonchianLo = talib.MIN(self.L, self.Params['boLength'])[-2]

        fsDonchianHi = talib.MAX(self.H, self.Params['fsLength'])[-2]
        fsDonchianLo = talib.MIN(self.L, self.Params['fsLength'])[-2]

        ExitHighestPrice = talib.MAX(self.H, self.Params['teLength'])[-2]
        ExitLowestPrice = talib.MIN(self.L, self.Params['teLength'])[-2]

        if len(atr) < 2:
            return

        N = atr[-2]

        if self.Position == 0:
            if self.H[-1] > DonchianHi:
                price = max(min(self.H[-1], DonchianHi), self.O[-1])
                self.Buy(price, lots, '??')
            elif self.L[-1] < DonchianLo:
                price = min(max(self.L[-1], DonchianLo), self.O[-1])
                self.SellShort(price, lots, '??')
            # ????
            elif self.H[-1] > fsDonchianHi:
                price = max(min(self.H[-1], fsDonchianHi), self.O[-1])
                self.Buy(price, lots, '??-fs')
            elif self.L[-1] < fsDonchianLo:
                price = min(max(self.L[-1], fsDonchianLo), self.O[-1])
                self.SellShort(price, lots, '??-fs')

        elif self.Position > 0:
            if self.L[-1] < ExitLowestPrice:
                price = min(self.O[-1], max(self.L[-1], ExitLowestPrice))
                self.Sell(price, self.PositionLong, 'exit-?????')
            else:
                if self.H[-1] >= self.LastEntryPriceLong + 0.5 * N:
                    price = max(self.O[-1], self.LastEntryPriceLong + 0.5 * N)
                    self.Buy(price, lots, '{0},{1}'.format(N, '??-?'))
        elif self.Position < 0:
            if self.H[-1] > ExitHighestPrice:
                price = max(self.O[-1], min(self.H[-1], ExitHighestPrice))
                self.BuyToCover(price, self.PositionShort, 'exit')
            else:
                if self.L[-1] <= self.LastEntryPriceShort - 0.5 * N:
                    price = min(self.O[-1], self.LastEntryPriceShort - 0.5 * N)
                    self.SellShort(price, lots, '{0},{1}'.format(N, '??-?'))