def enhance_with_indicators(data): set = [] OPEN = data[:, Candle.OPEN] HIGH = data[:, Candle.HIGH] LOW = data[:, Candle.LOW] CLOSE = data[:, Candle.CLOSE] VOLUME = data[:, Candle.VOLUME] low_high = talib.BBANDS(CLOSE, timeperiod=14, nbdevup=2, nbdevdn=2, matype=1) low_high = np.asarray([low_high[0][-1], low_high[2][-1]]).reshape(-1, 1) low_high_scaler = StandardScaler() low_high_scaler.fit(low_high) one = np.asarray([-1, 1]).reshape(-1, 1) one_scaler = StandardScaler() one_scaler.fit(one) hundred = np.asarray([-100, 100]).reshape(-1, 1) hundred_scaler = StandardScaler() hundred_scaler.fit(hundred) thousand = np.asarray([-1000, 1000]).reshape(-1, 1) thousand_scaler = StandardScaler() thousand_scaler.fit(thousand) million = np.asarray([-1000000, 1000000]).reshape(-1, 1) million_scaler = StandardScaler() million_scaler.fit(million) set.append(scale(OPEN, low_high_scaler)) set.append(scale(HIGH, low_high_scaler)) set.append(scale(LOW, low_high_scaler)) set.append(scale(CLOSE, low_high_scaler)) #Bollinger Bands are envelopes plotted at a standard deviation level above and below a simple moving average of the price. set.append( scale( talib.BBANDS(CLOSE, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0), low_high_scaler)) #121.03399999999903 19719.281591268886 set.append( scale( talib.BBANDS(CLOSE, timeperiod=14, nbdevup=2, nbdevdn=2, matype=1), low_high_scaler)) #The DEMA uses two exponential moving averages (EMAs) to eliminate lag, as some traders view lag as a problem. set.append(scale(talib.DEMA(CLOSE, timeperiod=10), low_high_scaler)) #122.0 19573.564771355504 set.append(scale(talib.DEMA(CLOSE, timeperiod=21), low_high_scaler)) #122.0 19546.76082510694 set.append(scale(talib.DEMA(CLOSE, timeperiod=100), low_high_scaler)) #123.84710711425136 19578.715808186673 #However, whereas SMA simply calculates an average of price data, EMA applies more weight to data that is more current. set.append(scale(talib.EMA(CLOSE, timeperiod=10), low_high_scaler)) #122.0 19499.362560116417 set.append(scale(talib.EMA(CLOSE, timeperiod=21), low_high_scaler)) #122.0 19433.26416788178 set.append(scale(talib.EMA(CLOSE, timeperiod=100), low_high_scaler)) #122.11270000000005 19059.124645340504 #The HTTrendline at a specific bar gives the current Hilbert Transform Trendline as instantaneously measured at that #bar. In its Series form, the Instantaneous Trendline appears much like a Moving Average, but with minimal lag #compared with the lag normally associated with such averages for equivalent periods. set.append(scale(talib.HT_TRENDLINE(CLOSE), low_high_scaler)) #122.0 19471.324 #Kaufman's Adaptive Moving Average (KAMA) is a moving average designed to account for market noise or volatility. #KAMA will closely follow prices when the price swings are relatively small and the noise is low. set.append(scale(talib.KAMA(CLOSE, timeperiod=10), low_high_scaler)) #122.0 19397.611724437047 set.append(scale(talib.KAMA(CLOSE, timeperiod=21), low_high_scaler)) #122.0 19336.434082122203 set.append(scale(talib.KAMA(CLOSE, timeperiod=100), low_high_scaler)) #123.61 19301.746826077375 #The MESA adaptive moving average is a trend-following indicator. It adapts to price movements in a very unique way, #based on the rate of change (ROC), as measured by the Hilbert Transform Discriminator. set.append( scale(talib.MAMA((HIGH + LOW) / 2., fastlimit=0.5, slowlimit=0.05), low_high_scaler)) #121.04112572694972 19494.294994956996 set.append(scale(talib.MIDPOINT(CLOSE, timeperiod=5), low_high_scaler)) #122.0 19544.95 set.append(scale(talib.MIDPRICE(LOW, HIGH, timeperiod=5), low_high_scaler)) #122.0 19562.6 #The parabolic SAR indicator, developed by J. Welles Wilder Jr., is used by traders to determine trend direction # and potential reversals in price. set.append( scale(talib.SAR(HIGH, LOW, acceleration=0.02, maximum=0.2), low_high_scaler)) #122.0 19660.0 #A simple moving average (SMA) is an arithmetic moving average calculated by adding recent prices and then dividing # that figure by the number of time periods in the calculation average. set.append(scale(talib.SMA(CLOSE, timeperiod=5), low_high_scaler)) #122.0 19553.340000000037 set.append(scale(talib.SMA(CLOSE, timeperiod=25), low_high_scaler)) #122.0 19405.74400000004 set.append(scale(talib.SMA(CLOSE, timeperiod=50), low_high_scaler)) #122.0 19286.443999999996 #The Triple Exponential Moving Average (T3) developed by Tim Tillson attempts to offer a moving average with better #smoothing then traditional exponential moving average. It incorporates a smoothing technique which allows it to #plot curves more gradual than ordinary moving averages and with a smaller lag. set.append(scale(talib.T3(CLOSE, timeperiod=5, vfactor=0), low_high_scaler)) #122.0 19498.31237177043 set.append( scale(talib.T3(CLOSE, timeperiod=10, vfactor=0), low_high_scaler)) #122.0 19419.991324685387 set.append( scale(talib.T3(CLOSE, timeperiod=21, vfactor=0), low_high_scaler)) #122.84310194419339 19306.63501695168 #The triple exponential moving average was designed to smooth price fluctuations, thereby making it easier to #identify trends without the lag associated with traditional moving averages (MA). set.append(scale(talib.TEMA(CLOSE, timeperiod=7), low_high_scaler)) #122.0 19617.222402494965 set.append(scale(talib.TEMA(CLOSE, timeperiod=15), low_high_scaler)) #122.0 19586.42515855386 #The Triangular Moving Average is basically a double-smoothed Simple Moving Average that gives more weight to the #middle section of the data interval. The TMA has a significant lag to current prices and is not well-suited to #fast moving markets. set.append(scale(talib.TRIMA(CLOSE, timeperiod=5), low_high_scaler)) #122.0 19567.31111092877 set.append(scale(talib.TRIMA(CLOSE, timeperiod=25), low_high_scaler)) #122.0 19459.8816568341 set.append(scale(talib.TRIMA(CLOSE, timeperiod=50), low_high_scaler)) #122.0 19359.257076923175 #The weighted moving average (WMA) is a technical indicator that assigns a greater weighting to the most recent data #points, and less weighting to data points in the distant past. The WMA is obtained by multiplying each number in #the data set by a predetermined weight and summing up the resulting values. set.append(scale(talib.WMA(CLOSE, timeperiod=5), low_high_scaler)) #122.0 19567.840000466134 set.append(scale(talib.WMA(CLOSE, timeperiod=10), low_high_scaler)) #122.0 19527.127272724356 set.append(scale(talib.WMA(CLOSE, timeperiod=21), low_high_scaler)) #122.0 19479.342424127473 set.append(scale(talib.WMA(CLOSE, timeperiod=50), low_high_scaler)) #122.0 19355.600000135404 set.append(scale(talib.WMA(CLOSE, timeperiod=100), low_high_scaler)) #122.21647326732675 19265.66566335264 set.append(scale(talib.LINEARREG(CLOSE, timeperiod=14), low_high_scaler)) # 122.0 19585.157142857144 set.append( scale(talib.LINEARREG_INTERCEPT(CLOSE, timeperiod=14), low_high_scaler)) #121.54000000000003 19643.968571428577 set.append(scale(talib.TSF(CLOSE, timeperiod=14), low_high_scaler)) #122.0 19609.668131868133 #ADX stands for Average Directional Movement Index and can be used to help measure the overall strength of a trend. #The ADX indicator is an average of expanding price range values. set.append( scale(talib.ADX(HIGH, LOW, CLOSE, timeperiod=10), hundred_scaler)) #0.0 99.99999999999963 set.append( scale(talib.ADX(HIGH, LOW, CLOSE, timeperiod=14), hundred_scaler)) #0.0 99.9999999940751 set.append( scale(talib.ADX(HIGH, LOW, CLOSE, timeperiod=21), hundred_scaler)) #0.0 99.99998408446837 #ADXR stands for Average Directional Movement Index Rating. ADXR is a component of the Directional Movement System #developed by Welles Wilder. set.append( scale(talib.ADXR(HIGH, LOW, CLOSE, timeperiod=14), hundred_scaler)) #0.0 99.9999999892742 #The Aroon indicator is a technical indicator that is used to identify trend changes in the price of an asset, #as well as the strength of that trend. In essence, the indicator measures the time between highs and the time #between lows over a time period. ... The indicator signals when this is happening, and when it isn't set.append(scale(talib.AROON(HIGH, LOW), hundred_scaler)) #0.0 100.0 #The Directional Movement Index, or DMI, is an indicator developed by J. ... An optional third line, called #directional movement (DX) shows the difference between the lines. When +DI is above -DI, there is more upward #pressure than downward pressure in the price. set.append(scale(talib.DX(HIGH, LOW, CLOSE, timeperiod=5), hundred_scaler)) #0.0 100.0 set.append(scale(talib.DX(HIGH, LOW, CLOSE, timeperiod=21), hundred_scaler)) #0.0 100.0 set.append(scale(talib.DX(HIGH, LOW, CLOSE, timeperiod=50), hundred_scaler)) #0.0 100.0 set.append( scale(talib.MFI(HIGH, LOW, CLOSE, VOLUME, timeperiod=14), hundred_scaler)) #-5.888410733172162e-08 100.00000000707982 set.append( scale(talib.MFI(HIGH, LOW, CLOSE, VOLUME, timeperiod=26), hundred_scaler)) #-1.3802451942902055e-09 100.00000001185656 set.append( scale(talib.MFI(HIGH, LOW, CLOSE, VOLUME, timeperiod=100), hundred_scaler)) #-5.3901183535126315e-08 100.00000000091877 set.append( scale(talib.MINUS_DI(HIGH, LOW, CLOSE, timeperiod=14), hundred_scaler)) #0.0 99.99999996020233 set.append( scale(talib.PLUS_DI(HIGH, LOW, CLOSE, timeperiod=14), hundred_scaler)) #0.0 100.0 set.append(scale(talib.RSI(CLOSE, timeperiod=14), hundred_scaler)) #0.0 100.0 set.append( scale( talib.STOCH(HIGH, LOW, CLOSE, fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0), hundred_scaler)) #-1.0137076363510762e-12 100.00000000000279 set.append( scale( talib.STOCHF(HIGH, LOW, CLOSE, fastk_period=5, fastd_period=3, fastd_matype=0), hundred_scaler)) #-1.0137076363510762e-12 100.0000000000012 set.append( scale( talib.STOCHRSI(CLOSE, timeperiod=14, fastk_period=5, fastd_period=3, fastd_matype=0), hundred_scaler)) #-1.2166564052525548e-12 100.00000000000011 set.append( scale( talib.ULTOSC(HIGH, LOW, CLOSE, timeperiod1=7, timeperiod2=14, timeperiod3=28), hundred_scaler)) # 0.0 100.00000032481957 set.append( scale(talib.CDL3WHITESOLDIERS(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append(scale(talib.CDLDOJI(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append( scale(talib.CDLDRAGONFLYDOJI(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append( scale(talib.CDLGRAVESTONEDOJI(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append(scale(talib.CDLHAMMER(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append( scale(talib.CDLHOMINGPIGEON(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append( scale(talib.CDLINVERTEDHAMMER(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append( scale(talib.CDLLADDERBOTTOM(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append( scale(talib.CDLLONGLEGGEDDOJI(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append( scale(talib.CDLMATCHINGLOW(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append( scale(talib.CDLMORNINGDOJISTAR(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append( scale(talib.CDLMORNINGSTAR(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append(scale(talib.CDLPIERCING(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append( scale(talib.CDLRICKSHAWMAN(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append( scale(talib.CDLSTICKSANDWICH(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append(scale(talib.CDLTAKURI(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 set.append( scale(talib.CDLUNIQUE3RIVER(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #0 100 #Absolute Price Oscillator crossing above zero is considered bullish, while crossing below zero is bearish. A #positive indicator value indicates an upward movement, while negative readings signal a downward trend. set.append( scale(talib.APO(CLOSE, fastperiod=12, slowperiod=26, matype=1), thousand_scaler)) #-536.1910463572985 443.13971636041424 set.append(scale(VOLUME, thousand_scaler)) #The Commodity Channel Index (CCI) measures the current price level relative to an average price level over a given #period of time. CCI is relatively high when prices are far above their average. set.append(scale(talib.CCI(HIGH, LOW, CLOSE), thousand_scaler)) #-466.66671166042244 466.66673951370416 #Moving average convergence divergence (MACD) is a trend-following momentum indicator that shows the relationship #between two moving averages of a security’s price. set.append( scale(talib.MACD(CLOSE, fastperiod=5, slowperiod=14, signalperiod=5), thousand_scaler)) # -536.1910463572985 443.13971636041424 set.append( scale(talib.MACD(CLOSE, fastperiod=12, slowperiod=26, signalperiod=9), thousand_scaler)) #-536.1910463572985 443.13971636041424 set.append( scale(talib.MACD(CLOSE, fastperiod=14, slowperiod=50, signalperiod=25), thousand_scaler)) # -536.1910463572985 443.13971636041424 set.append(scale(talib.ATR(HIGH, LOW, CLOSE), thousand_scaler)) #0.0 672.1715311610562 set.append(scale(talib.HT_DCPHASE(CLOSE), hundred_scaler)) #-44.99298332517037 314.99654478107004 set.append( scale(talib.LINEARREG_SLOPE(CLOSE, timeperiod=14), hundred_scaler)) #-222.33604395604476 152.37032967033085 set.append( scale(talib.STDDEV(CLOSE, timeperiod=5, nbdev=1), thousand_scaler)) #0.0 709.4023698851089 set.append(scale(talib.MINUS_DM(HIGH, LOW, timeperiod=14), thousand_scaler)) #0.0 2909.3760999618785 set.append(scale(talib.MOM(CLOSE, timeperiod=10), thousand_scaler)) #-2508.0 1711.2000000000007 set.append(scale(talib.MOM(CLOSE, timeperiod=25), thousand_scaler)) # -2508.0 1711.2000000000007 set.append(scale(talib.PLUS_DM(HIGH, LOW, timeperiod=14), thousand_scaler)) #0.0 3697.0008310558483 set.append(scale(talib.ADOSC(HIGH, LOW, CLOSE, VOLUME), thousand_scaler)) #-1843.4418435977714 1237.4131984846026 set.append(scale(talib.TRANGE(HIGH, LOW, CLOSE), thousand_scaler)) #0.0 4000.0 set.append(scale(talib.HT_PHASOR(CLOSE), thousand_scaler)) #-2873.977625168652 3422.2535328187428 #The Balance of Power indicator measures the market strength of buyers against sellers by assessing the ability of #each side to drive prices to an extreme level. The calculation is: Balance of Power = (Close price – Open price) / #(High price – Low price) The resulting value can be smoothed by a moving average. set.append(scale(talib.BOP(OPEN, HIGH, LOW, CLOSE), one_scaler)) #-1.0 1.0 set.append(scale(talib.ROCP(CLOSE, timeperiod=10), one_scaler)) #-0.30688987999999995 0.46745909457773854 set.append(scale(talib.ROCR(CLOSE, timeperiod=10), one_scaler)) #0.69311012 1.4674590945777386 set.append(scale(talib.TRIX(CLOSE, timeperiod=30), one_scaler)) #-0.6044429731575707 0.434667877456385 set.append(scale(talib.HT_SINE(CLOSE), one_scaler)) #-0.9999999999996187 0.9999999999940317 set.append(scale(talib.HT_TRENDMODE(CLOSE), one_scaler)) #0 1 set.append( scale(talib.PPO(CLOSE, fastperiod=12, slowperiod=26, matype=0), hundred_scaler)) #-13.640389725420714 13.383459677599681 set.append(scale(talib.ROC(CLOSE, timeperiod=10), hundred_scaler)) #-30.688987999999995 46.74590945777386 set.append(scale(talib.NATR(HIGH, LOW, CLOSE), one_scaler)) #0.0 7.881777549670427 set.append(scale(talib.HT_DCPERIOD(CLOSE), hundred_scaler)) #6.91050087362864 49.99951053223339 set.append(scale(talib.CORREL(HIGH, LOW, timeperiod=30), one_scaler)) #-2.4748737341529163 2.2135943621178655 set.append(scale(talib.AD(HIGH, LOW, CLOSE, VOLUME), million_scaler)) #-3719.2404462314116 199644.25743563366 set.append(scale(talib.OBV(CLOSE, VOLUME), million_scaler)) #-23849.75116020021 29139.83770172981 set.append(scale(talib.BETA(HIGH, LOW, timeperiod=5), million_scaler)) #-2971957.111723269 1250567.1172035346 set.append( scale(talib.VAR(CLOSE, timeperiod=5, nbdev=1), million_scaler)) #-1.4901161193847656e-07 503251.7223986089 # The Aroon Oscillator is a trend-following indicator that uses aspects of the Aroon Indicator (Aroon Up and Aroon # Down) to gauge the strength of a current trend and the likelihood that it will continue. Readings above zero # indicate that an uptrend is present, while readings below zero indicate that a downtrend is present. set.append(scale(talib.AROONOSC(HIGH, LOW), hundred_scaler)) # -100.0 100.0 # The Chande Momentum Oscillator (CMO) is a technical momentum indicator developed by Tushar Chande. The CMO # indicator is created by calculating the difference between the sum of all recent higher closes and the sum of all # recent lower closes and then dividing the result by the sum of all price movement over a given time period. set.append(scale(talib.CMO(CLOSE, timeperiod=5), hundred_scaler)) # -100.0 100.0 set.append(scale(talib.CMO(CLOSE, timeperiod=14), hundred_scaler)) # -99.99999998652726 100.0 set.append(scale(talib.CMO(CLOSE, timeperiod=25), hundred_scaler)) # -99.99854211548185 100.0 set.append(scale(talib.CDL3INSIDE(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.CDL3LINESTRIKE(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append(scale(talib.CDL3OUTSIDE(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.CDLABANDONEDBABY(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append(scale(talib.CDLBELTHOLD(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.CDLBREAKAWAY(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.CDLCLOSINGMARUBOZU(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.CDLCOUNTERATTACK(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append(scale(talib.CDLDOJISTAR(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.CDLENGULFING(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.CDLGAPSIDESIDEWHITE(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append(scale(talib.CDLHARAMI(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.CDLHARAMICROSS(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append(scale(talib.CDLHIGHWAVE(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append(scale(talib.CDLKICKING(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.CDLKICKINGBYLENGTH(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append(scale(talib.CDLLONGLINE(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append(scale(talib.CDLMARUBOZU(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.CDLRISEFALL3METHODS(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.CDLSEPARATINGLINES(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.CDLSHORTLINE(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.CDLSPINNINGTOP(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.CDLTASUKIGAP(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append(scale(talib.CDLTRISTAR(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.CDLXSIDEGAP3METHODS(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 100 set.append( scale(talib.LINEARREG_ANGLE(CLOSE, timeperiod=14), hundred_scaler)) #-89.74230272272693 89.62397563202859 set.append( scale(talib.WILLR(HIGH, LOW, CLOSE, timeperiod=14), hundred_scaler)) # -100.00000000000001 0.0 #The Two Crows is a three-line bearish reversal candlestick pattern. The pattern requires confirmation, that is, #the following candles should break a trendline or the nearest support area which may be formed by the first #candle's line. If the pattern is not confirmed it may act only as a temporary pause within an uptrend. set.append(scale(talib.CDL2CROWS(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 0 set.append( scale(talib.CDL3BLACKCROWS(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 0 set.append( scale(talib.CDLADVANCEBLOCK(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) # -100 0 set.append( scale(talib.CDLDARKCLOUDCOVER(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 0 set.append( scale(talib.CDLEVENINGDOJISTAR(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 0 set.append( scale(talib.CDLEVENINGSTAR(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 0 set.append( scale(talib.CDLHANGINGMAN(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 0 set.append( scale(talib.CDLIDENTICAL3CROWS(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 0 set.append(scale(talib.CDLINNECK(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 0 set.append(scale(talib.CDLONNECK(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 0 set.append( scale(talib.CDLSHOOTINGSTAR(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 0 set.append( scale(talib.CDLSTALLEDPATTERN(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 0 set.append( scale(talib.CDLTHRUSTING(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-100 0 set.append(scale(talib.CDLHIKKAKE(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-200 200 set.append( scale(talib.CDLHIKKAKEMOD(OPEN, HIGH, LOW, CLOSE), hundred_scaler)) #-200 200 return np.concatenate(set)
def get_datasets(symbol, to_symbol, histo, limit): """Fetch the API and precess the desired pair Arguments: symbol {str} -- First pair to_symbol {str} -- Second pair histo {str ['day', 'hour']} -- Granularity limit {int [100 - 2000]} -- [description] Returns: pandas.Dataframe -- The OHLCV and indicators dataframe """ headers = { 'User-Agent': 'Mozilla/5.0', 'authorization': 'Apikey 3d7d3e9e6006669ac00584978342451c95c3c78421268ff7aeef69995f9a09ce' } # OHLC url = 'https://min-api.cryptocompare.com/data/histo{}?fsym={}&tsym={}&e=Binance&limit={}'.format( histo, symbol, to_symbol, limit) print(colored('> downloading ' + symbol + ' OHLCV', 'green')) response = requests.get(url, headers=headers) json_response = response.json() status = json_response['Response'] if status == "Error": print(colored('=== {} ==='.format(json_response['Message']), 'red')) raise AssertionError() result = json_response['Data'] df = pd.DataFrame(result) df['Date'] = pd.to_datetime(df['time'], utc=True, unit='s') df.drop('time', axis=1, inplace=True) # indicators # https://github.com/mrjbq7/ta-lib/blob/master/docs/func.md open_price, high, low, close = np.array(df['open']), np.array( df['high']), np.array(df['low']), np.array(df['close']) volume = np.array(df['volumefrom']) # cycle indicators df.loc[:, 'HT_DCPERIOD'] = talib.HT_DCPERIOD(close) df.loc[:, 'HT_DCPHASE'] = talib.HT_DCPHASE(close) df.loc[:, 'HT_PHASOR_inphase'], df.loc[:, 'HT_PHASOR_quadrature'] = talib.HT_PHASOR( close) df.loc[:, 'HT_SINE_sine'], df.loc[:, 'HT_SINE_leadsine'] = talib.HT_SINE(close) df.loc[:, 'HT_TRENDMODE'] = talib.HT_TRENDMODE(close) # momemtum indicators df.loc[:, 'ADX'] = talib.ADX(high, low, close, timeperiod=14) df.loc[:, 'ADXR'] = talib.ADXR(high, low, close, timeperiod=14) df.loc[:, 'APO'] = talib.APO(close, fastperiod=12, slowperiod=26, matype=0) df.loc[:, 'AROON_down'], df.loc[:, 'AROON_up'] = talib.AROON(high, low, timeperiod=14) df.loc[:, 'AROONOSC'] = talib.AROONOSC(high, low, timeperiod=14) df.loc[:, 'BOP'] = talib.BOP(open_price, high, low, close) df.loc[:, 'CCI'] = talib.CCI(high, low, close, timeperiod=14) df.loc[:, 'CMO'] = talib.CMO(close, timeperiod=14) df.loc[:, 'DX'] = talib.DX(high, low, close, timeperiod=14) df['MACD'], df['MACD_signal'], df['MACD_hist'] = talib.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9) df.loc[:, 'MFI'] = talib.MFI(high, low, close, volume, timeperiod=14) df.loc[:, 'MINUS_DI'] = talib.MINUS_DI(high, low, close, timeperiod=14) df.loc[:, 'MINUS_DM'] = talib.MINUS_DM(high, low, timeperiod=14) df.loc[:, 'MOM'] = talib.MOM(close, timeperiod=10) df.loc[:, 'PPO'] = talib.PPO(close, fastperiod=12, slowperiod=26, matype=0) df.loc[:, 'ROC'] = talib.ROC(close, timeperiod=10) df.loc[:, 'RSI'] = talib.RSI(close, timeperiod=14) df.loc[:, 'STOCH_k'], df.loc[:, 'STOCH_d'] = talib.STOCH(high, low, close, fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0) df.loc[:, 'STOCHF_k'], df.loc[:, 'STOCHF_d'] = talib.STOCHF(high, low, close, fastk_period=5, fastd_period=3, fastd_matype=0) df.loc[:, 'STOCHRSI_K'], df.loc[:, 'STOCHRSI_D'] = talib.STOCHRSI( close, timeperiod=30, fastk_period=14, fastd_period=10, fastd_matype=1) df.loc[:, 'TRIX'] = talib.TRIX(close, timeperiod=30) df.loc[:, 'ULTOSC'] = talib.ULTOSC(high, low, close, timeperiod1=7, timeperiod2=14, timeperiod3=28) df.loc[:, 'WILLR'] = talib.WILLR(high, low, close, timeperiod=14) # overlap studies df.loc[:, 'BBANDS_upper'], df.loc[:, 'BBANDS_middle'], df.loc[:, 'BBANDS_lower'] = talib.BBANDS( close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0) df.loc[:, 'DEMA'] = talib.DEMA(close, timeperiod=30) df.loc[:, 'EMA'] = talib.EMA(close, timeperiod=30) df.loc[:, 'HT_TRENDLINE'] = talib.HT_TRENDLINE(close) df.loc[:, 'KAMA'] = talib.KAMA(close, timeperiod=30) df.loc[:, 'MA'] = talib.MA(close, timeperiod=30, matype=0) df.loc[:, 'MIDPOINT'] = talib.MIDPOINT(close, timeperiod=14) df.loc[:, 'WMA'] = talib.WMA(close, timeperiod=30) df.loc[:, 'SMA'] = talib.SMA(close) # pattern recoginition df.loc[:, 'CDL2CROWS'] = talib.CDL2CROWS(open_price, high, low, close) df.loc[:, 'CDL3BLACKCROWS'] = talib.CDL3BLACKCROWS(open_price, high, low, close) df.loc[:, 'CDL3INSIDE'] = talib.CDL3INSIDE(open_price, high, low, close) df.loc[:, 'CDL3LINESTRIKE'] = talib.CDL3LINESTRIKE(open_price, high, low, close) # price transform df.loc[:, 'WCLPRICE'] = talib.WCLPRICE(high, low, close) # statistic funcitons df.loc[:, 'BETA'] = talib.BETA(high, low, timeperiod=5) df.loc[:, 'CORREL'] = talib.CORREL(high, low, timeperiod=30) df.loc[:, 'STDDEV'] = talib.STDDEV(close, timeperiod=5, nbdev=1) df.loc[:, 'TSF'] = talib.TSF(close, timeperiod=14) df.loc[:, 'VAR'] = talib.VAR(close, timeperiod=5, nbdev=1) # volatility indicators df.loc[:, 'ATR'] = talib.ATR(high, low, close, timeperiod=14) df.loc[:, 'NATR'] = talib.NATR(high, low, close, timeperiod=14) df.loc[:, 'TRANGE'] = talib.TRANGE(high, low, close) # volume indicators df.loc[:, 'AD'] = talib.AD(high, low, close, volume) df.loc[:, 'ADOSC'] = talib.ADOSC(high, low, close, volume, fastperiod=3, slowperiod=10) df.loc[:, 'OBV'] = talib.OBV(close, volume) # wallet indicator to trading bot # df.loc[:, 'wallet_{}'.format(symbol)] = 1.0 df.loc[:, 'wallet_first_symbol'] = WALLET_FIRST_SYMBOL df.loc[:, 'wallet_second_symbol'] = WALLET_SECOND_SYMBOL # df.loc[:, 'wallet_{}'.format(to_symbol)] = 0.0 # df.fillna(df.mean(), inplace=True) df.dropna(inplace=True) df.set_index('Date', inplace=True) train_size = round(len(df) * 0.5) # 50% to train -> test with different value df_train = df[:train_size] df_rollout = df[train_size:] df_train.to_csv('datasets/bot_train_{}_{}_{}.csv'.format( symbol + to_symbol, limit, histo)) df_rollout.to_csv('datasets/bot_rollout_{}_{}_{}.csv'.format( symbol + to_symbol, limit, histo)) return df
outputsize='full')[0] ohlc_tech[tickers[i]].columns = [ "Open", "High", "Low", "Adj Close", "Volume" ] drop.append(tickers[i]) except: print(tickers[i], " :failed to fetch data...retrying") continue attempt += 1 tickers = ohlc_tech.keys( ) # redefine tickers variable after removing any tickers with corrupted data ohlc_dict = copy.deepcopy(ohlc_tech) #create a copy of extracted data # Apply talib functions on each dataframe - refer documentation at https://mrjbq7.github.io/ta-lib/doc_index.html for ticker in tickers: # Calculate momentum indicators (e.g. MACD, ADX, RSI etc.) using talib ohlc_dict[ticker]["ADX"] = talib.ADX(ohlc_dict[ticker]["High"], ohlc_dict[ticker]["Low"], ohlc_dict[ticker]["Adj Close"], timeperiod=14) # Identify chart patterns (e.g. two crows, three crows, three inside, engulging pattern etc.) ohlc_dict[ticker]["3I"] = talib.CDL3WHITESOLDIERS( ohlc_dict[ticker]["Open"], ohlc_dict[ticker]["High"], ohlc_dict[ticker]["Low"], ohlc_dict[ticker]["Adj Close"]) # Statistical functions (e.g. beta, correlation etc.) ohlc_dict[ticker]["Beta"] = talib.BETA(ohlc_dict[ticker]["High"], ohlc_dict[ticker]["Low"], timeperiod=14)
df['EMA26'] = talib.EMA(np.array(close), timeperiod=12) df['SAR'] = talib.SAR(high, low, acceleration=0, maximum=0) df['SMA'] = talib.SMA(close, timeperiod=30) df['MACD'], df['MACDsignal'], df['MACDhist'] = talib.MACD(np.array(close), fastperiod=6, slowperiod=12, signalperiod=9) df['RSI'] = talib.RSI(np.array(close), timeperiod=12) #RSI的天数一般是6、12、24 df['MOM'] = talib.MOM(np.array(close), timeperiod=5) df['CDL2CROWS'] = talib.CDL2CROWS(open, high, low, close) df['CDL3BLACKCROWS'] = talib.CDL3BLACKCROWS(open, high, low, close) df['CDL3INSIDE'] = talib.CDL3INSIDE(open, high, low, close) df['CDL3LINESTRIKE'] = talib.CDL3LINESTRIKE(open, high, low, close) df['CDLBREAKAWAY'] = talib.CDLBREAKAWAY(open, high, low, close) df['CDLADVANCEBLOCK'] = talib.CDLADVANCEBLOCK(open, high, low, close) df['BETA'] = talib.BETA(high, low, timeperiod=5) df['CORREL'] = talib.CORREL(high, low, timeperiod=30) df['AD'] = talib.AD(high, low, close, volume) df['TSF'] = talib.TSF(close, timeperiod=14) df['CDLDARKCLOUDCOVER'] = talib.CDLDARKCLOUDCOVER(open, high, low, close, penetration=0) df['CDLDOJI'] = talib.CDLDOJI(open, high, low, close) df['CDLMORNINGDOJISTAR'] = talib.CDLMORNINGDOJISTAR(open, high, low, close, penetration=0) df['CDLMORNINGSTAR'] = talib.CDLMORNINGSTAR(open,
def addIndi(self, enrich, endf): # Overlays if enrich == 'bbands': bbup, bbmid, bblow = ta.BBANDS(endf['Close'], timeperiod=5, nbdevup=2, nbdevdn=2, matype=0) endf.insert(0, column='bblow', value=bblow) endf.insert(0, column='bbmid', value=bbmid) endf.insert(0, column='bbup', value=bbup) return endf if enrich == 'mama': mama, fama = ta.MAMA(endf['Close']) endf.insert(0, column='fama', value=fama) endf.insert(0, column='mama', value=mama) return endf if enrich == 'dema': endf.insert(0, column='dema', value=ta.DEMA(endf['Close'], timeperiod=30)) return endf if enrich == 'ema': endf.insert(0, column='ema', value=ta.EMA(endf['Close'], timeperiod=30)) # Unstable period return endf if enrich == 'ht_trendline': endf.insert(0, column='ht_trendline', value=ta.HT_TRENDLINE(endf['Close'])) # Unstable period return endf if enrich == 'kama': endf.insert(0, column='kama', value=ta.KAMA(endf['Close'], timeperiod=30)) # Unstable period return endf if enrich == 'ma': endf.insert(0, column='ma', value=ta.MA(endf['Close'], timeperiod=30, matype=0)) return endf if enrich == 'midpoint': endf.insert(0, column='midpoint', value=ta.MIDPOINT(endf['Close'], timeperiod=14)) return endf if enrich == 'midprice': endf.insert(0, column='midprice', value=ta.MIDPRICE(endf['High'], endf['Low'], timeperiod=14)) return endf if enrich == 'sar': endf.insert(0, column='sar', value=ta.SAR(endf['High'], endf['Low'], acceleration=0, maximum=0)) return endf if enrich == 'sarext': endf.insert(0, column='sarext', value=ta.SAREXT(endf['High'], endf['Low'], startvalue=0, offsetonreverse=0, accelerationinitlong=0, accelerationlong=0, accelerationmaxlong=0, accelerationinitshort=0, accelerationshort=0, accelerationmaxshort=0)) return endf if enrich == 'sma': endf.insert(0, column='sma', value=ta.SMA(endf['Close'], timeperiod=30)) return endf if enrich == 't3': endf.insert(0, column='t3', value=ta.T3(endf['Close'], timeperiod=5, vfactor=0)) # Unstable period return endf if enrich == 'tema': endf.insert(0, column='tema', value=ta.TEMA(endf['Close'], timeperiod=30)) return endf if enrich == 'trima': endf.insert(0, column='trima', value=ta.TRIMA(endf['Close'], timeperiod=30)) return endf if enrich == 'wma': endf.insert(0, column='wma', value=ta.WMA(endf['Close'], timeperiod=30)) return endf # Momentum if enrich == 'adx': endf.insert(0, column='adx', value=ta.ADX(endf['High'], endf['Low'], endf['Close'], timeperiod=14)) return endf if enrich == 'adxr': endf.insert(0, column='adxr', value=ta.ADXR(endf['High'], endf['Low'], endf['Close'], timeperiod=14)) return endf if enrich == 'apo': endf.insert(0, column='apo', value=ta.APO(endf['Close'], fastperiod=12, slowperiod=26, matype=0)) return endf if enrich == 'aroonosc': endf.insert(0, column='aroonosc', value=ta.AROONOSC(endf['High'], endf['Low'], timeperiod=14)) return endf if enrich == 'aroon': aroondown, aroonup = ta.AROON(endf['High'], endf['Low'], timeperiod=14) endf.insert(0, column='aroonup', value=aroonup) endf.insert(0, column='aroondown', value=aroondown) return endf if enrich == 'bop': endf.insert(0, column='bop', value=ta.BOP(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cci': endf.insert(0, column='cci', value=ta.CCI(endf['High'], endf['Low'], endf['Close'], timeperiod=14)) return endf if enrich == 'cmo': endf.insert(0, column='cmo', value=ta.CMO(endf['Close'], timeperiod=14)) return endf if enrich == 'dx': endf.insert(0, column='dx', value=ta.DX(endf['High'], endf['Low'], endf['Close'], timeperiod=14)) return endf if enrich == 'macd': macd, macdsignal, macdhist = ta.MACD(endf['Close'], fastperiod=12, slowperiod=26, signalperiod=9) endf.insert(0, column='macd', value=macd) endf.insert(0, column='macdsignal', value=macdsignal) endf.insert(0, column='macdhist', value=macdhist) return endf if enrich == 'mfi': endf.insert(0, column='mfi', value=ta.MFI(endf['High'], endf['Low'], endf['Close'], endf['Volume'], timeperiod=14)) return endf if enrich == 'mom': endf.insert(0, column='mom', value=ta.MOM(endf['Close'], timeperiod=10)) return endf if enrich == 'ppo': endf.insert(0, column='ppo', value=ta.PPO(endf['Close'], fastperiod=12, slowperiod=26, matype=0)) return endf if enrich == 'roc': endf.insert(0, column='roc', value=ta.ROC(endf['Close'], timeperiod=10)) return endf if enrich == 'rocp': endf.insert(0, column='rocp', value=ta.ROCP(endf['Close'], timeperiod=10)) return endf if enrich == 'rsi': endf.insert(0, column='rsi', value=ta.RSI(endf['Close'], timeperiod=14)) return endf if enrich == 'stoch': slowk, slowd = ta.STOCH(endf['High'], endf['Low'], endf['Close'], fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0) endf.insert(0, column='slowk', value=slowk) endf.insert(0, column='slowd', value=slowd) return endf if enrich == 'trix': endf.insert(0, column='trix', value=ta.TRIX(endf['Close'], timeperiod=30)) return endf if enrich == 'ultosc': endf.insert(0, column='ultosc', value=ta.ULTOSC(endf['High'], endf['Low'], endf['Close'], timeperiod1=7, timeperiod2=14, timeperiod3=28)) return endf if enrich == 'willr': endf.insert(0, column='willr', value=ta.WILLR(endf['High'], endf['Low'], endf['Close'], timeperiod=14)) return endf # Volume if enrich == 'ad': endf.insert(0, column='ad', value=ta.AD(endf['High'], endf['Low'], endf['Close'], endf['Volume'])) return endf if enrich == 'adosc': endf.insert(0, column='adosc', value=ta.ADOSC(endf['High'], endf['Low'], endf['Close'], endf['Volume'], fastperiod=3, slowperiod=10)) return endf if enrich == 'obv': endf.insert(0, column='obv', value=ta.OBV(endf['Close'], endf['Volume'])) return endf # Volitility if enrich == 'atr': endf.insert(0, column='atr', value=ta.ATR(endf['High'], endf['Low'], endf['Close'], timeperiod=14)) return endf if enrich == 'natr': endf.insert(0, column='natr', value=ta.NATR(endf['High'], endf['Low'], endf['Close'], timeperiod=14)) return endf if enrich == 'trange': endf.insert(0, column='trange', value=ta.TRANGE(endf['High'], endf['Low'], endf['Close'])) return endf # Pattern if enrich == 'cdl2crows': endf.insert(0, column='cdl2crows', value=ta.CDL2CROWS(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdl3blackcrows': endf.insert(0, column='cdl3blackcrows', value=ta.CDL3BLACKCROWS(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdl3inside': endf.insert(0, column='cdl3inside', value=ta.CDL3INSIDE(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdl3linestrike': endf.insert(0, column='cdl3linestrike', value=ta.CDL3LINESTRIKE(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdl3outside': endf.insert(0, column='cdlcdl3outside', value=ta.CDL3OUTSIDE(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdl3starsinsouth': endf.insert(0, column='cdl3starsinsouth', value=ta.CDL3STARSINSOUTH(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdl3whitesoldiers': endf.insert(0, column='cdl3whitesoldiers', value=ta.CDL3WHITESOLDIERS(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlabandonedbaby': endf.insert(0, column='cdlabandonedbaby', value=ta.CDLABANDONEDBABY(endf['Open'], endf['High'], endf['Low'], endf['Close'], penetration=0)) return endf if enrich == 'cdladvanceblock': endf.insert(0, column='cdladvanceblock', value=ta.CDLADVANCEBLOCK(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlbelthold': endf.insert(0, column='cdlbelthold', value=ta.CDLBELTHOLD(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlbreakaway': endf.insert(0, column='cdlbreakaway', value=ta.CDLBREAKAWAY(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlclosingmarubozu': endf.insert(0, column='cdlclosingmarubozu', value=ta.CDLCLOSINGMARUBOZU(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlconcealbabyswall': endf.insert(0, column='cdlconcealbabyswall', value=ta.CDLCONCEALBABYSWALL(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlcounterattack': endf.insert(0, column='cdlcounterattack', value=ta.CDLCOUNTERATTACK(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdldarkcloudcover': endf.insert(0, column='cdldarkcloudcover', value=ta.CDLDARKCLOUDCOVER(endf['Open'], endf['High'], endf['Low'], endf['Close'], penetration=0)) return endf if enrich == 'cdldoji': endf.insert(0, column='cdldoji', value=ta.CDLDOJI(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdldojistar': endf.insert(0, column='cdldojistar', value=ta.CDLDOJISTAR(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdldragonflydoji': endf.insert(0, column='cdldragonflydoji', value=ta.CDLDRAGONFLYDOJI(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlengulfing': endf.insert(0, column='cdlengulfing', value=ta.CDLENGULFING(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdleveningdojistar': endf.insert(0, column='cdleveningdojistar', value=ta.CDLEVENINGDOJISTAR(endf['Open'], endf['High'], endf['Low'], endf['Close'], penetration=0)) return endf if enrich == 'cdleveningstar': endf.insert(0, column='cdleveningstar', value=ta.CDLEVENINGSTAR(endf['Open'], endf['High'], endf['Low'], endf['Close'], penetration=0)) return endf if enrich == 'cdlgapsidesidewhite': endf.insert(0, column='cdlgapsidesidewhite', value=ta.CDLGAPSIDESIDEWHITE(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlgravestonedoji': endf.insert(0, column='cdlgravestonedoji', value=ta.CDLGRAVESTONEDOJI(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlhammer': endf.insert(0, column='cdlhammer', value=ta.CDLHAMMER(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlhangingman': endf.insert(0, column='cdlhangingman', value=ta.CDLHANGINGMAN(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlharami': endf.insert(0, column='cdlharami', value=ta.CDLHARAMI(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlharamicross': # print(endf.info(),file=sys.stderr) endf.insert(0, column='cdlharamicross', value=ta.CDLHARAMICROSS(endf['Open'], endf['High'], endf['Low'], endf['Close'])) # print(endf.info(),file=sys.stderr) return endf if enrich == 'cdlhighwave': print(endf.info(), file=sys.stderr) endf.insert(0, column='cdlhighwave', value=ta.CDLHIGHWAVE(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlhikkake': endf.insert(0, column='cdlhikkake', value=ta.CDLHIKKAKE(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlhikkakemod': endf.insert(0, column='cdlhikkakemod', value=ta.CDLHIKKAKEMOD(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlhomingpigeon': endf.insert(0, column='cdlhomingpigeon', value=ta.CDLHOMINGPIGEON(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlidentical3crows': endf.insert(0, column='cdlidentical3crows', value=ta.CDLIDENTICAL3CROWS(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlinneck': endf.insert(0, column='cdlinneck', value=ta.CDLINNECK(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlinvertedhammer': endf.insert(0, column='cdlinvertedhammer', value=ta.CDLINVERTEDHAMMER(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlkicking': endf.insert(0, column='cdlkicking', value=ta.CDLKICKING(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlkickingbylength': endf.insert(0, column='cdlkickingbylength', value=ta.CDLKICKINGBYLENGTH(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlladderbottom': endf.insert(0, column='cdlladderbottom', value=ta.CDLLADDERBOTTOM(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdllongleggeddoji': endf.insert(0, column='cdllongleggeddoji', value=ta.CDLLONGLEGGEDDOJI(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdllongline': endf.insert(0, column='cdllongline', value=ta.CDLLONGLINE(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlmarubozu': endf.insert(0, column='cdlmarubozu', value=ta.CDLMARUBOZU(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlmatchinglow': endf.insert(0, column='cdlmatchinglow', value=ta.CDLMATCHINGLOW(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlmathold': endf.insert(0, column='cdlmathold', value=ta.CDLMATHOLD(endf['Open'], endf['High'], endf['Low'], endf['Close'], penetration=0)) return endf if enrich == 'cdlmorningdojistar': endf.insert(0, column='cdlmorningdojistar', value=ta.CDLMORNINGDOJISTAR(endf['Open'], endf['High'], endf['Low'], endf['Close'], penetration=0)) return endf if enrich == 'cdlmorningstar': endf.insert(0, column='cdlmorningstar', value=ta.CDLMORNINGSTAR(endf['Open'], endf['High'], endf['Low'], endf['Close'], penetration=0)) return endf if enrich == 'cdlonneck': endf.insert(0, column='cdlonneck', value=ta.CDLONNECK(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlpiercing': endf.insert(0, column='cdlpiercing', value=ta.CDLPIERCING(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlrickshawman': endf.insert(0, column='cdlrickshawman', value=ta.CDLRICKSHAWMAN(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlrisefall3methods': endf.insert(0, column='cdlrisefall3methods', value=ta.CDLRISEFALL3METHODS(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlseparatinglines': endf.insert(0, column='cdlseparatinglines', value=ta.CDLSEPARATINGLINES(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlshootingstar': endf.insert(0, column='cdlshootingstar', value=ta.CDLSHOOTINGSTAR(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlshortline': endf.insert(0, column='cdlshortline', value=ta.CDLSHORTLINE(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlspinningtop': endf.insert(0, column='cdlspinningtop', value=ta.CDLSPINNINGTOP(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlstalledpattern': endf.insert(0, column='cdlstalledpattern', value=ta.CDLSTALLEDPATTERN(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlsticksandwich': endf.insert(0, column='cdlsticksandwich', value=ta.CDLSTICKSANDWICH(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdltakuri': endf.insert(0, column='cdltakuri', value=ta.CDLTAKURI(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdltasukigap': endf.insert(0, column='cdltasukigap', value=ta.CDLTASUKIGAP(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlthrusting': endf.insert(0, column='cdlthrusting', value=ta.CDLTHRUSTING(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdltristar': endf.insert(0, column='cdltristar', value=ta.CDLTRISTAR(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlunique3river': endf.insert(0, column='cdlunique3river', value=ta.CDLUNIQUE3RIVER(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlupsidegap2crows': endf.insert(0, column='cdlupsidegap2crows', value=ta.CDLUPSIDEGAP2CROWS(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'cdlxsidegap3methods': endf.insert(0, column='cdlxsidegap3methods', value=ta.CDLXSIDEGAP3METHODS(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf # Price if enrich == 'avgprice': endf.insert(0, column='avgprice', value=ta.AVGPRICE(endf['Open'], endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'medprice': endf.insert(0, column='medprice', value=ta.MEDPRICE(endf['High'], endf['Low'])) return endf if enrich == 'typprice': endf.insert(0, column='typprice', value=ta.TYPPRICE(endf['High'], endf['Low'], endf['Close'])) return endf if enrich == 'wclprice': endf.insert(0, column='wclprice', value=ta.WCLPRICE(endf['High'], endf['Low'], endf['Close'])) return endf # Stats if enrich == 'beta': endf.insert(0, column='beta', value=ta.BETA(endf['High'], endf['Low'], timeperiod=5)) return endf if enrich == 'correl': endf.insert(0, column='correl', value=ta.CORREL(endf['High'], endf['Low'], timeperiod=30)) return endf if enrich == 'linearreg': endf.insert(0, column='linearreg', value=ta.LINEARREG(endf['Close'], timeperiod=14)) return endf if enrich == 'linearreg_angle': endf.insert(0, column='linearreg_angle', value=ta.LINEARREG_ANGLE(endf['Close'], timeperiod=14)) return endf if enrich == 'linearreg_intercept': endf.insert(0, column='linearreg_intercept', value=ta.LINEARREG_INTERCEPT(endf['Close'], timeperiod=14)) return endf if enrich == 'linearreg_slope': endf.insert(0, column='linearreg_slope', value=ta.LINEARREG_SLOPE(endf['Close'], timeperiod=14)) return endf if enrich == 'stddev': endf.insert(0, column='stddev', value=ta.STDDEV(endf['Close'], timeperiod=5, nbdev=1)) return endf if enrich == 'tsf': endf.insert(0, column='tsf', value=ta.TSF(endf['Close'], timeperiod=14)) return endf if enrich == 'var': endf.insert(0, column='var', value=ta.VAR(endf['Close'], timeperiod=5, nbdev=1)) return endf
np.array(df['Adj Close'].shift(1))) df['sine'], df['leadsine'] = ta.HT_SINE(np.array(df['Adj Close'].shift(1))) df['HT_TRENDMODE'] = ta.HT_TRENDMODE(np.array(df['Adj Close'].shift(1))) df['ATR1'] = abs(np.array(df['High'].shift(1)) - np.array(df['Low'].shift(1))) df['ATR2'] = abs( np.array(df['High'].shift(1)) - np.array(df['Adj Close'].shift(1))) df['ATR3'] = abs( np.array(df['Low'].shift(1)) - np.array(df['Adj Close'].shift(1))) df['AverageTrueRange'] = df[['ATR1', 'ATR2', 'ATR3']].max(axis=1) df['EMA'] = pd.Series(pd.ewma(df['Adj Close'], span=n, min_periods=n - 1)) # Statistic Functions df['Beta'] = ta.BETA(np.array(df['High'].shift(1)), np.array(df['Low'].shift(1)), timeperiod=n) df['CORREL'] = ta.CORREL(np.array(df['High'].shift(1)), np.array(df['Low'].shift(1)), timeperiod=n) df['LINEARREG'] = ta.LINEARREG(np.array(df['Adj Close'].shift(1)), timeperiod=n) df['LINEARREG_ANGLE'] = ta.LINEARREG_ANGLE(np.array(df['Adj Close'].shift(1)), timeperiod=n) df['LINEARREG_INTERCEPT'] = ta.LINEARREG_INTERCEPT(np.array( df['Adj Close'].shift(1)), timeperiod=n) df['LINEARREG_SLOPE'] = ta.LINEARREG_SLOPE(np.array(df['Adj Close'].shift(1)), timeperiod=n) df['STDDEV'] = ta.STDDEV(np.array(df['Adj Close'].shift(1)), timeperiod=n,
def BETA(self, name, **parameters): data = self.__data[name] return talib.BETA(data, **parameters)
dx = talib.DX(df.high.values, df.low.values, df.close.values, timeperiod=14) df['dx'] = dx cci = talib.CCI(df.high.values, df.low.values, df.close.values, timeperiod=14) df['cci'] = cci upperband, middleband, lowerband = talib.BBANDS(df.close.values, timeperiod=20, nbdevup=2, nbdevdn=2, matype=0) df['upperband'] = upperband df['middleband'] = middleband df['lowerband'] = lowerband sar = talib.SAR(df.high.values, df.low.values, acceleration=0, maximum=0) df['sar'] = sar ad = talib.ADOSC(df.high.values, df.low.values, df.close.values, df.volume.values, fastperiod=3, slowperiod=10) df['ad'] = ad obv = talib.OBV(df.close.values, df.volume.values) df['obv'] = obv atr = talib.ATR(df.high.values, df.low.values, df.close.values, timeperiod=14) df['atr'] = atr df['ma5'] = talib.MA(df.close.values, timeperiod=5) df['ma10'] = talib.MA(df.close.values, timeperiod=10) df['ma30'] = talib.MA(df.close.values, timeperiod=30) df['ma60'] = talib.MA(df.close.values, timeperiod=60) df['beta'] = talib.BETA(df.high.values, df.low.values, timeperiod=5) df['l_angle'] = talib.LINEARREG_ANGLE(df.close.values, timeperiod=14) df['l_intercept'] = talib.LINEARREG_INTERCEPT(df.close.values, timeperiod=14) df['l_slope'] = talib.LINEARREG_SLOPE(df.close.values, timeperiod=10) df['stddev'] = talib.STDDEV(df.close.values, timeperiod=5, nbdev=1) df['tsf'] = talib.TSF(df.close.values, timeperiod=14) except Exception, e: traceback.print_exc() pass >>>>>>> 88bb6f6016c4bdd6eb6ffece26958bed4713bd7f
def ta_indicators(df): dfa = pd.DataFrame() # BBANDS Bollinger Bands # 函数名:BBANDS # 名称: 布林线指标 # 简介:其利用统计原理,求出股价的标准差及其信赖区间,从而确定股价的波动 # 范围及未来走势,利用波带显示股价的安全高低价位,因而也被称为布林带。 # 分析和应用: 百度百科 同花顺学院 # upperband, middleband, df.lowerband = BBANDS( # df.close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0) dfa["BBANDS_upper"], dfa["BBANDS_middle"], dfa["BBANDS_lower"] = ta.BBANDS( df.close, matype=MA_Type.T3) # DEMA - Double Exponential Moving Average 双移动平均线 # 函数名:DEMA # 名称: 双移动平均线 # 简介:两条移动平均线来产生趋势信号,较长期者用来识别趋势,较短期者用来选择时机。正是两条平均线及价格三者的相互作用,才共同产生了趋势信号。 # real = DEMA(df.close, timeperiod=30) dfa["DEMA"] = ta.DEMA(df.close, timeperiod=30) # MA - Moving average 移动平均线 # 函数名:MA # 名称: 移动平均线 # 简介:移动平均线,Moving Average,简称MA,原本的意思是移动平均, # 由于我们将其制作成线形,所以一般称之为移动平均线,简称均线。 # 它是将某一段时间的收盘价之和除以该周期。 比如日线MA5指5天内的收盘价除以5 。 # real = MA(df.close, timeperiod=30, matype=0) dfa["MA"] = ta.MA(df.close, timeperiod=30, matype=0) # EMA和MACD # 调用ta计算6日指数移动平均线的值 dfa['EMA12'] = ta.EMA(np.array(df.close), timeperiod=6) dfa['EMA26'] = ta.EMA(np.array(df.close), timeperiod=12) # KAMA - Kaufman Adaptive Moving Average 考夫曼的自适应移动平均线 # 函数名:KAMA # 名称: 考夫曼的自适应移动平均线 # 简介:短期均线贴近价格走势,灵敏度高,但会有很多噪声,产生虚假信号; # 长期均线在判断趋势上一般比较准确 ,但是长期均线有着严重滞后的问题。 # 我们想得到这样的均线,当价格沿一个方向快速移动时,短期的移动平均线是 # 最合适的;当价格在横盘的过程中,长期移动平均线是合适的。 # NOTE: The KAMA function has an unstable period. dfa["KAMA"] = ta.KAMA(df.close, timeperiod=30) # SMA (简单移动平均线) # (参数1:收盘价序列,参数2:时间周期(均线的计算长度 即 几日均线)) # SAREXT - Parabolic SAR - Extended # real = SAREXT(df.high, df.low, startvalue=0, offsetonreverse=0, # accelerationinitlong=0, accelerationlong=0, accelerationmaxlong=0, # accelerationinitshort=0, accelerationshort=0, accelerationmaxshort=0) # SMA - Simple Moving Average 简单移动平均线 # 函数名:SMA # 名称: 简单移动平均线 # 简介:移动平均线,Moving Average,简称MA,原本的意思是移动平均, # 由于我们将其制作成线形,所以一般称之为移动平均线,简称均线。 # 它是将某一段时间的收盘价之和除以该周期。 比如日线MA5指5天内的收盘价除以5 。 # 百度百科 同花顺学院 # real = SMA(df.close, timeperiod=30) dfa['SMA'] = ta.SMA(df.close, timeperiod=30) # MIDPRICE - Midpoint Price over period dfa["MIDPOINT"] = ta.MIDPOINT(df.close, timeperiod=14) # SAR - Parabolic SAR 抛物线指标 # 函数名:SAR # 名称: 抛物线指标 # 简介:抛物线转向也称停损点转向,是利用抛物线方式,随时调整停损点位置 # 以观察买卖点。由于停损点(又称转向点SAR)以弧形的方式移动, # 故称之为抛物线转向指标 。 # real = SAR(df.high, df.low, acceleration=0, maximum=0) dfa["SAR"] = ta.SAR(df.high, df.low, acceleration=0, maximum=0) # T3 - Triple Exponential Moving Average (T3) 三重指数移动平均线 # 函数名:T3 # 名称:三重指数移动平均线 # 简介:TRIX长线操作时采用本指标的讯号,长时间按照本指标讯号交易, # 获利百分比大于损失百分比,利润相当可观。 比如日线MA5指5天内的收盘价除以5 。 # NOTE: The T3 function has an unstable period # real = T3(df.close, timeperiod=5, vfactor=0) dfa["T3"] = ta.T3(df.close, timeperiod=5, vfactor=0) # TEMA - Triple Exponential Moving Average # 函数名:TEMA(T3 区别?) 名称:三重指数移动平均线 # real = TEMA(df.close, timeperiod=30) dfa["TEMA"] = ta.TEMA(df.close, timeperiod=30) # MIDPRICE - Midpoint Price over period # real = MIDPRICE(df.high, df.low, timeperiod=14) dfa["MIDPRICE"] = ta.MIDPRICE(df.high, df.low, timeperiod=14) # TRIMA - Triangular Moving Average dfa["TRIMA"] = ta.TRIMA(df.close, timeperiod=30) # dfa["SAREXT"]=ta.SAREXT(df.high, df.low, maximum=0) # SAREXT - Parabolic SAR - Extended dfa["SAREXT"] = ta.SAREXT(df.high, df.low, startvalue=0, offsetonreverse=0, accelerationinitlong=0, accelerationlong=0, accelerationmaxlong=0, accelerationinitshort=0, accelerationshort=0, accelerationmaxshort=0) # WMA - Weighted Moving Average 移动加权平均法 # 函数名:WMA # 名称:加权移动平均线 # 简介:移动加权平均法是指以每次进货的成本加上原有库存存货的成本, # 除以每次进货数量与原有库存存货的数量之和,据以计算加权平均单位成本, # 以此为基础计算当月发出存货的成本和期末存货的成本的一种方法。 dfa["WMA"] = ta.WMA(df.close, timeperiod=30) # Volatility Indicator Functions 波动率指标函数 # ATR - Average True Range # 函数名:ATR # 名称:真实波动幅度均值 # 简介:真实波动幅度均值(ATR)是以N天的指数移动平均数平均後的交易波动幅度。 # 计算公式:一天的交易幅度只是单纯地 最大值 - 最小值。 # 而真实波动幅度则包含昨天的收盘价,若其在今天的幅度之外: # 真实波动幅度 = max(最大值,昨日收盘价) − min(最小值,昨日收盘价) 真实波动 # 幅度均值便是「真实波动幅度」的 N 日 指数移动平均数。 # 特性:: # 波动幅度的概念表示可以显示出交易者的期望和热情。 # 大幅的或增加中的波动幅度表示交易者在当天可能准备持续买进或卖出股票。 # 波动幅度的减少则表示交易者对股市没有太大的兴趣。 # NOTE: The ATR function has an unstable period. # real = ATR(df.high, df.low, df.close, timeperiod=14) # ATR(平均真实波幅) # (参数1:最高价序列,参数2:最低价序列,参数3:收盘价序列,参数4:时间周期) dfa["ATR"] = ta.ATR(df.high, df.low, df.close, timeperiod=14) # NATR - Normalized Average True Range # 函数名:NATR # 名称:归一化波动幅度均值 # 简介:归一化波动幅度均值(NATR)是 # NOTE: The NATR function has an unstable period. # real = NATR(df.high, df.low, df.close, timeperiod=14) dfa["NATR"] = ta.NATR(df.high, df.low, df.close, timeperiod=14) # TRANGE - True Range # 函数名:TRANGE # 名称:真正的范围 # real = TRANGE(df.high, df.low, df.close) dfa["TRANGE"] = ta.TRANGE(df.high, df.low, df.close) # Volume Indicators 成交量指标 # AD - Chaikin A/D Line 量价指标 # 函数名:AD # 名称:Chaikin A/D Line 累积/派发线(Accumulation/Distribution Line) # 简介:Marc Chaikin提出的一种平衡交易量指标,以当日的收盘价位来估算成交流量 # 用于估定一段时间内该证券累积的资金流量。 # 计算公式: # 多空对比 = [(收盘价- 最低价) - (最高价 - 收盘价)] / (最高价 - 最低价) # 若最高价等于最低价: 多空对比 = (收盘价 / 昨收盘) - 1 # 研判: # 1、A/D测量资金流向,向上的A/D表明买方占优势,而向下的A/D表明卖方占优势 # 2、A/D与价格的背离可视为买卖信号,即底背离考虑买入,顶背离考虑卖出 # 3、应当注意A/D忽略了缺口的影响,事实上,跳空缺口的意义是不能轻易忽略的 # A/D指标无需设置参数,但在应用时,可结合指标的均线进行分析 # real = AD(df.high, df.low, df.close, df.volume) dfa["AD"] = ta.AD(df.high, df.low, df.close, df.volume) # ADOSC - Chaikin A/D Oscillator # 函数名:ADOSC # 名称:Chaikin A/D Oscillator Chaikin震荡指标 # 简介:将资金流动情况与价格行为相对比,检测市场中资金流入和流出的情况 # 计算公式:fastperiod A/D - slowperiod A/D # 研判: # 1、交易信号是背离:看涨背离做多,看跌背离做空 # 2、股价与90天移动平均结合,与其他指标结合 # 3、由正变负卖出,由负变正买进 # real = ADOSC(df.high, df.low, df.close, df.volume, # fastperiod=3, slowperiod=10) dfa["ADOSC"] = ta.ADOSC(df.high, df.low, df.close, df.volume, fastperiod=3, slowperiod=10) # OBV - On Balance Volume # 函数名:OBV # 名称:On Balance Volume 能量潮 # 简介:Joe Granville提出,通过统计成交量变动的趋势推测股价趋势 # 计算公式:以某日为基期,逐日累计每日上市股票总成交量, # 若隔日指数或股票上涨 ,则基期OBV加上本日成交量为本日OBV。 # 隔日指数或股票下跌, 则基期OBV减去本日成交量为本日OBV # 研判: # 1、以“N”字型为波动单位,一浪高于一浪称“上升潮”,下跌称“跌潮”;上升潮买进,跌潮卖出 # 2、须配合K线图走势 # 3、用多空比率净额法进行修正,但不知TA-Lib采用哪种方法 # 计算公式: 多空比率净额= [(收盘价-最低价)-(最高价-收盘价)] ÷( 最高价-最低价)×成交量 # real = OBV(df.close, df.volume) dfa["OBV"] = ta.OBV(df.close, df.volume) # Cycle Indicator Functions # HT_DCPERIOD - Hilbert Transform - Dominant Cycle Period # 函数名:HT_DCPERIOD # 名称: 希尔伯特变换-主导周期 # 简介:将价格作为信息信号,计算价格处在的周期的位置,作为择时的依据。 # NOTE: The HT_DCPERIOD function has an unstable period. # real = HT_DCPERIOD(df.close) dfa["HT_DCPERIOD"] = ta.HT_DCPERIOD(df.close) # HT_DCPHASE - Hilbert Transform - Dominant Cycle Phase # 函数名:HT_DCPHASE # 名称: 希尔伯特变换-主导循环阶段 # NOTE: The HT_DCPHASE function has an unstable period. # real = HT_DCPHASE(df.close) dfa["HT_DCPHASE"] = ta.HT_DCPHASE(df.close) # HT_PHASOR - Hilbert Transform - Phasor Components # 函数名:HT_DCPHASE # 名称: 希尔伯特变换-希尔伯特变换相量分量 # NOTE: The HT_PHASOR function has an unstable period. # inphase, quadrature = HT_PHASOR(df.close) dfa["HT_PHASOR_inphase"], dfa["HT_PHASOR_quadrature"] = ta.HT_PHASOR( df.close) # HT_SINE - Hilbert Transform - SineWave # 函数名:HT_DCPHASE # 名称: 希尔伯特变换-正弦波 NOTE: The HT_SINE function has an unstable period. # sine, leadsine = HT_SINE(df.close) dfa["HT_SINE_sine"], dfa["HT_SINE_leadsine"] = ta.HT_SINE(df.close) # HT_TRENDMODE - Hilbert Transform - Trend vs Cycle Mode # 函数名:HT_DCPHASE # 名称: 希尔伯特变换-趋势与周期模式 # NOTE: The HT_TRENDMODE function has an unstable period. # integer = HT_TRENDMODE(df.close) dfa["HT_TRENDMODE"] = ta.HT_TRENDMODE(df.close) # Price Transform Functions # AVGPRICE - Average Price # 函数名:AVGPRICE # 名称:平均价格函数 # real = AVGPRICE(open, df.high, df.low, df.close) dfa["AVGPRICE"] = ta.AVGPRICE(df.open, df.high, df.low, df.close) # MEDPRICE - Median Price # 函数名:MEDPRICE # 名称:中位数价格 # real = MEDPRICE(df.high, df.low) dfa["MEDPRICE"] = ta.MEDPRICE(df.high, df.low) # TYPPRICE - Typical Price # 函数名:TYPPRICE # 名称:代表性价格 # real = TYPPRICE(df.high, df.low, df.close) dfa["TYPPRICE"] = ta.TYPPRICE(df.high, df.low, df.close) # WCLPRICE - Weighted Close Price # 函数名:WCLPRICE # 名称:加权收盘价 # real = WCLPRICE(df.high, df.low, df.close) dfa["WCLPRICE"] = ta.WCLPRICE(df.high, df.low, df.close) # Momentum Indicator Functions # ADX - Average Directional Movement Index # 函数名:ADX # 名称:平均趋向指数 # 简介:使用ADX指标,指标判断盘整、振荡和单边趋势。 # 公式: # 一、先决定股价趋势(Directional Movement,DM)是上涨或下跌: # “所谓DM值,今日股价波动幅度大于昨日股价波动幅部分的最大值,可能是创高价的部分或创低价的部分;如果今日股价波动幅度较前一日小,则DM = 0。” # 若股价高点持续走高,为上涨趋势,记作 +DM。 # 若为下跌趋势,记作 -DM。-DM的负号(–)是表示反向趋势(下跌),并非数值为负数。 # 其他状况:DM = 0。 # 二、寻找股价的真实波幅(True Range,TR): # 所谓真实波幅(TR)是以最高价,最低价,及前一日收盘价三个价格做比较,求出当日股价波动的最大幅度。 # 三、趋势方向需经由一段时间来观察,研判上才有意义。一般以14天为指标的观察周期: # 先计算出 +DM、–DM及TR的14日算术平均数,得到 +DM14、–DM14及TR14三组数据作为起始值,再计算各自的移动平均值(EMA)。 # +DI14 = +DM/TR14*100 # -DI14 = +DM/TR14*100 # DX = |(+DI14)-(-DI14)| / |(+DI14)+(-DI14)| # DX运算结果取其绝对值,再将DX作移动平均,得到ADX。 # 特点: # ADX无法告诉你趋势的发展方向。 # 如果趋势存在,ADX可以衡量趋势的强度。不论上升趋势或下降趋势, # ADX看起来都一样。 # ADX的读数越大,趋势越明显。衡量趋势强度时,需要比较几天的ADX 读数, # 观察ADX究竟是上升或下降。ADX读数上升,代表趋势转强; # 如果ADX读数下降,意味着趋势转弱。 # 当ADX曲线向上攀升,趋势越来越强,应该会持续发展。 # 如果ADX曲线下滑,代表趋势开始转弱,反转的可能性增加。 # 单就ADX本身来说,由于指标落后价格走势,所以算不上是很好的指标, # 不适合单就ADX进行操作。可是,如果与其他指标配合运用, # ADX可以确认市场是否存在趋势,并衡量趋势的强度。 # 指标应用: # +DI与–DI表示多空相反的二个动向,当据此绘出的两条曲线彼此纠结相缠时, # 代表上涨力道与下跌力道相当,多空势均力敌。当 +DI与–DI彼此穿越时, # 由下往上的一方其力道开始压过由上往下的另一方,此时出现买卖讯号。 # ADX可作为趋势行情的判断依据,当行情明显朝多空任一方向进行时, # ADX数值都会显著上升,趋势走强。 # 若行情呈现盘整格局时,ADX会低于 +DI与–DI二条线。 # 若ADX数值低于20,则不论DI表现如何,均显示市场没有明显趋势。 # ADX持续偏高时,代表“超买”(Overbought)或“超卖”(Oversold)的现象, # 行情反转的机会将增加,此时则不适宜顺势操作。 # 当ADX数值从上升趋势转为下跌时,则代表行情即将反转; # 若ADX数值由下跌趋势转为上升时,行情将止跌回升。 # 总言之,DMI指标包含4条线:+DI、-DI、ADX和ADXR。 # +DI代表买盘的强度、-DI代表卖盘的强度; # ADX代表趋势的强度、ADXR则为ADX的移动平均。 # NOTE: The ADX function has an unstable period. # real = ADX(df.high, df.low, df.close, timeperiod=14) dfa["ADX"] = ta.ADX(df.high, df.low, df.close, timeperiod=14) # ADXR- Average Directional Movement Index Rating # 函数名:ADXR # 名称:平均趋向指数的趋向指数 # 简介:使用ADXR指标,指标判断ADX趋势。 # NOTE: The ADXR function has an unstable period. # real = ADXR(df.high, df.low, df.close, timeperiod=14) dfa["ADXR"] = ta.ADXR(df.high, df.low, df.close, timeperiod=14) # APO - Absolute Price Oscillator # real = APO(df.close, fastperiod=12, slowperiod=26, matype=0) dfa["APO"] = ta.APO(df.close, fastperiod=12, slowperiod=26, matype=0) # AROON - Aroon # 函数名:AROON # 名称:阿隆指标 # 简介:该指标是通过计算自价格达到近期最高值和最低值以来所经过的期间数, # 阿隆指标帮助你预测价格趋势到趋势区域 # (或者反过来,从趋势区域到趋势)的变化。 # 计算公式: # Aroon(上升)=[(计算期天数-最高价后的天数)/计算期天数]*100 # Aroon(下降)=[(计算期天数-最低价后的天数)/计算期天数]*100 # 指数应用 # 1、极值0和100 # 当UP线达到100时,市场处于强势;如果维持在70100之间,表示一个上升趋势。 # 同样,如果Down线达到0,表示处于弱势,如果维持在030之间,表示处于下跌趋势。 # 如果两条线同处于极值水平,则表明一个更强的趋势。 # 2、平行运动 # 如果两条线平行运动时,表明市场趋势被打破。 # 可以预期该状况将持续下去,只到由极值水平或交叉穿行西安市出方向性运动为止。 # 3、交叉穿行 # 当下行线上穿上行线时,表明潜在弱势,预期价格开始趋于下跌。 # 反之,表明潜在强势,预期价格趋于走高。 # aroondown, aroonup = AROON(df.high, df.low, timeperiod=14) dfa["AROON_aroondown"], dfa["AROON_aroonup"] = ta.AROON(df.high, df.low, timeperiod=14) # AROONOSC - Aroon Oscillator # 函数名:AROONOSC # 名称:阿隆振荡 # 简介: # real = AROONOSC(df.high, df.low, timeperiod=14) dfa["AROONOSC"] = ta.AROONOSC(df.high, df.low, timeperiod=14) # BOP - Balance Of Power 均势 # 函数名:BOP # 名称:均势指标 # 简介 # real = BOP(open, df.high, df.low, df.close) dfa["BOP"] = ta.BOP(df.open, df.high, df.low, df.close) # CCI - Commodity Channel Index # 函数名:CCI # 名称:顺势指标 # 简介:CCI指标专门测量股价是否已超出常态分布范围 # 指标应用 # 1.当CCI指标曲线在+100线~-100线的常态区间里运行时,CCI指标参考意义不大, # 可以用KDJ等其它技术指标进行研判。 # 2.当CCI指标曲线从上向下突破+100线而重新进入常态区间时, # 表明市场价格的上涨阶段可能结束,将进入一个比较长时间的震荡整理阶段, # 应及时平多做空。 # 3.当CCI指标曲线从上向下突破-100线而进入另一个非常态区间(超卖区)时, # 表明市场价格的弱势状态已经形成,将进入一个比较长的寻底过程, # 可以持有空单等待更高利润。如果CCI指标曲线在超卖区运行了相当长的一段 # 时间后开始掉头向上,表明价格的短期底部初步探明,可以少量建仓。 # CCI指标曲线在超卖区运行的时间越长,确认短期的底部的准确度越高。 # 4.CCI指标曲线从下向上突破-100线而重新进入常态区间时,表明市场价格的 # 探底阶段可能结束,有可能进入一个盘整阶段,可以逢低少量做多。 # 5.CCI指标曲线从下向上突破+100线而进入非常态区间(超买区)时, # 表明市场价格已经脱离常态而进入强势状态,如果伴随较大的市场交投, # 应及时介入成功率将很大。 # 6.CCI指标曲线从下向上突破+100线而进入非常态区间(超买区)后, # 只要CCI指标曲线一直朝上运行,表明价格依然保持强势可以继续持有待涨。 # 但是,如果在远离+100线的地方开始掉头向下时,则表明市场价格的强势状态 # 将可能难以维持,涨势可能转弱,应考虑卖出。如果前期的短期涨幅过高同时 # 价格回落时交投活跃,则应该果断逢高卖出或做空。 # CCI主要是在超买和超卖区域发生作用,对急涨急跌的行情检测性相对准确。 # 非常适用于股票、外汇、贵金属等市场的短期操作。[1] # real = CCI(df.high, df.low, df.close, timeperiod=14) dfa["CCI"] = ta.CCI(df.high, df.low, df.close, timeperiod=14) # CMO - Chande Momentum Oscillator 钱德动量摆动指标 # 函数名:CMO # 名称:钱德动量摆动指标 # 简介:与其他动量指标摆动指标如相对强弱指标(RSI)和随机指标(KDJ)不同, # 钱德动量指标在计算公式的分子中采用上涨日和下跌日的数据。 # 计算公式:CMO=(Su-Sd)*100/(Su+Sd) # 其中:Su是今日收盘价与昨日收盘价(上涨日)差值加总。 # 若当日下跌,则增加值为0; # Sd是今日收盘价与做日收盘价(下跌日)差值的绝对值加总。 # 若当日上涨,则增加值为0; # 指标应用 # 本指标类似RSI指标。 # 当本指标下穿-50水平时是买入信号,上穿+50水平是卖出信号。 # 钱德动量摆动指标的取值介于-100和100之间。 # 本指标也能给出良好的背离信号。 # 当股票价格创出新低而本指标未能创出新低时,出现牛市背离; # 当股票价格创出新高而本指标未能创出新高时,当出现熊市背离时。 # 我们可以用移动均值对该指标进行平滑。 # NOTE: The CMO function has an unstable period. # real = CMO(df.close, timeperiod=14) dfa["CMO"] = ta.CMO(df.close, timeperiod=14) # DX - Directional Movement Index DMI指标又叫动向指标或趋向指标 # 函数名:DX # 名称:动向指标或趋向指标 # 简介:通过分析股票价格在涨跌过程中买卖双方力量均衡点的变化情况, # 即多空双方的力量的变化受价格波动的影响而发生由均衡到失衡的循环过程, # 从而提供对趋势判断依据的一种技术指标。 # 分析和应用:百度百科 维基百科 同花顺学院 # NOTE: The DX function has an unstable period. # real = DX(df.high, df.low, df.close, timeperiod=14) dfa["DX"] = ta.DX(df.high, df.low, df.close, timeperiod=14) # MACD - Moving Average Convergence/Divergence # 函数名:MACD # 名称:平滑异同移动平均线 # 简介:利用收盘价的短期(常用为12日)指数移动平均线与长期(常用为26日) # 指数移动平均线之间的聚合与分离状况,对买进、卖出时机作出研判的技术指标。 # 分析和应用:百度百科 维基百科 同花顺学院 # macd, macdsignal, macdhist = MACD(df.close, fastperiod=12, # slowperiod=26, signalperiod=9) dfa["MACD_macd"], dfa["MACD_macdsignal"], dfa["MACD_macdhist"] = ta.MACD( df.close, fastperiod=12, slowperiod=26, signalperiod=9) # MACDEXT - MACD with controllable MA type # 函数名:MACDEXT (这个是干啥的(⊙o⊙)?) # 名称: # macd, macdsignal, macdhist = MACDEXT(df.close, fastperiod=12, # fastmatype=0, slowperiod=26, # slowmatype=0, signalperiod=9, # signalmatype=0) dfa["MACDEXT_macd"], dfa["MACDEXT_macdsignal"], dfa[ "MACDEXT_macdhist"] = ta.MACDEXT(df.close, fastperiod=12, fastmatype=0, slowperiod=26, slowmatype=0, signalperiod=9, signalmatype=0) # MACDFIX - Moving Average Convergence/Divergence Fix 12/26 # macd, macdsignal, macdhist = MACDFIX(df.close, signalperiod=9) dfa["MACDFIX_macd"], dfa["MACDFIX_macdsignal"], dfa[ "MACDFIX_macdhist"] = ta.MACDFIX(df.close, signalperiod=9) # MFI - Money Flow Index 资金流量指标 # 函数名:MFI # 名称:资金流量指标 # 简介:属于量价类指标,反映市场的运行趋势 # 分析和应用:百度百科 同花顺学院 # NOTE: The MFI function has an unstable period. # real = MFI(df.high, df.low, df.close, df.volume, timeperiod=14) dfa["MFI"] = ta.MFI(df.high, df.low, df.close, df.volume, timeperiod=14) # MINUS_DI - Minus Directional Indicator # 函数名:DMI 中的DI指标 负方向指标 # 名称:下升动向值 # 简介:通过分析股票价格在涨跌过程中买卖双方力量均衡点的变化情况, # 即多空双方的力量的变化受价格波动的影响而发生由均衡到失衡的循环过程, # 从而提供对趋势判断依据的一种技术指标。 # 分析和应用:百度百科 维基百科 同花顺学院 # NOTE: The MINUS_DI function has an unstable period. # real = MINUS_DI(df.high, df.low, df.close, timeperiod=14) dfa["MINUS_DI"] = ta.MINUS_DI(df.high, df.low, df.close, timeperiod=14) # MINUS_DM - Minus Directional Movement # 函数名:MINUS_DM # 名称: 上升动向值 DMI中的DM代表正趋向变动值即上升动向值 # 简介:通过分析股票价格在涨跌过程中买卖双方力量均衡点的变化情况, # 即多空双方的力量的变化受价格波动的影响而发生由均衡到失衡的循环过程, # 从而提供对趋势判断依据的一种技术指标。 # 分析和应用:百度百科 维基百科 同花顺学院 # NOTE: The MINUS_DM function has an unstable period. # real = MINUS_DM(df.high, df.low, timeperiod=14) dfa["MINUS_DM"] = ta.MINUS_DM(df.high, df.low, timeperiod=14) # MOM - Momentum 动量 # 函数名:MOM # 名称: 上升动向值 # 简介:投资学中意思为续航,指股票(或经济指数)持续增长的能力。研究发现, # 赢家组合在牛市中存在着正的动量效应,输家组合在熊市中存在着负的动量效应。 # real = MOM(df.close, timeperiod=10) dfa["MOM"] = ta.MOM(df.close, timeperiod=10) # PLUS_DI - Plus Directional Indicator # NOTE: The PLUS_DI function has an unstable period. # real = PLUS_DI(df.high, df.low, df.close, timeperiod=14) dfa["PLUS_DI"] = ta.PLUS_DI(df.high, df.low, df.close, timeperiod=14) # PLUS_DM - Plus Directional Movement # NOTE: The PLUS_DM function has an unstable period. # real = PLUS_DM(df.high, df.low, timeperiod=14) dfa["PLUS_DM"] = ta.PLUS_DM(df.high, df.low, timeperiod=14) # PPO - Percentage Price Oscillator 价格震荡百分比指数 # 函数名:PPO 名称: 价格震荡百分比指数 # 简介:价格震荡百分比指标(PPO)是一个和MACD指标非常接近的指标。 # PPO标准设定和MACD设定非常相似:12,26,9和PPO, # 和MACD一样说明了两条移动平均线的差距, # 但是它们有一个差别是PPO是用百分比说明。 # real = PPO(df.close, fastperiod=12, slowperiod=26, matype=0) dfa["PPO"] = ta.PPO(df.close, fastperiod=12, slowperiod=26, matype=0) # ROC - Rate of change : ((price/prevPrice)-1)*100 变动率指标 # 函数名:ROC # 名称: 变动率指标 # 简介:ROC是由当天的股价与一定的天数之前的某一天股价比较, # 其变动速度的大小,来反映股票市变动的快慢程度 # 分析和应用:百度百科 同花顺学院 # real = ROC(df.close, timeperiod=10) dfa["ROC"] = ta.ROC(df.close, timeperiod=10) # ROCP - Rate of change Percentage: (price-prevPrice)/prevPrice # real = ROCP(df.close, timeperiod=10) dfa["ROCP"] = ta.ROCP(df.close, timeperiod=10) # ROCR - Rate of change ratio: (price/prevPrice) # real = ROCR(df.close, timeperiod=10) dfa["ROCR"] = ta.ROCR(df.close, timeperiod=10) # ROCR100 - Rate of change ratio 100 scale: (price/prevPrice)*100 # real = ROCR100(df.close, timeperiod=10) dfa["ROCR100"] = ta.ROCR100(df.close, timeperiod=10) # RSI - Relative Strength Index 相对强弱指数 # 函数名:RSI # 名称:相对强弱指数 # 简介:是通过比较一段时期内的平均收盘涨数和平均收盘跌数来分析市场买沽盘的 # 意向和实力,从而作出未来市场的走势。 # NOTE: The RSI function has an unstable period. # real = RSI(df.close, timeperiod=14) dfa["RSI"] = ta.RSI(df.close, timeperiod=14) # STOCH - Stochastic 随机指标,俗称KD # 函数名:STOCH # 名称:随机指标,俗称KD # slowk, slowd = STOCH(df.high, df.low, df.close, fastk_period=5, # slowk_period=3, slowk_matype=0, slowd_period=3, # slowd_matype=0) dfa["STOCH_slowk"], dfa["STOCH_slowd"] = ta.STOCH(df.high, df.low, df.close, fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0) # STOCHF - Stochastic Fast # fastk, fastd = STOCHF(df.high, df.low, df.close, fastk_period=5, # fastd_period=3, fastd_matype=0) dfa["STOCHF_fastk"], dfa["STOCHF_fastd"] = ta.STOCHF(df.high, df.low, df.close, fastk_period=5, fastd_period=3, fastd_matype=0) # STOCHRSI - Stochastic Relative Strength Index # NOTE: The STOCHRSI function has an unstable period. # fastk, fastd = STOCHRSI(df.close, timeperiod=14, fastk_period=5, # fastd_period=3, fastd_matype=0) dfa["STOCHRSI_fastk"], dfa["STOCHRSI_fastd"] = ta.STOCHRSI(df.close, timeperiod=14, fastk_period=5, fastd_period=3, fastd_matype=0) # TRIX - 1-day Rate-Of-Change (ROC) of a Triple Smooth EMA # real = TRIX(df.close, timeperiod=30) dfa["TRIX"] = ta.TRIX(df.close, timeperiod=30) # ULTOSC - Ultimate Oscillator 终极波动指标 # 函数名:ULTOSC # 名称:终极波动指标 # 简介:UOS是一种多方位功能的指标,除了趋势确认及超买超卖方面的作用之外, # 它的“突破”讯号不仅可以提供最适当的交易时机之外, # 更可以进一步加强指标的可靠度。 # 分析和应用:百度百科 同花顺学院 # real = ULTOSC(df.high, df.low, df.close, timeperiod1=7, timeperiod2=14, # timeperiod3=28) dfa["ULTOSC"] = ta.ULTOSC(df.high, df.low, df.close, timeperiod1=7, timeperiod2=14, timeperiod3=28) # WILLR - Williams' %R 威廉指标 # 函数名:WILLR # 名称:威廉指标 # 简介:WMS表示的是市场处于超买还是超卖状态。 # 股票投资分析方法主要有如下三种:基本分析、技术分析、演化分析。 # 在实际应用中,它们既相互联系,又有重要区别。 # 分析和应用:百度百科 维基百科 同花顺学院 # real = WILLR(df.high, df.low, df.close, timeperiod=14) dfa["WILLR"] = ta.WILLR(df.high, df.low, df.close, timeperiod=14) # Statistic Functions 统计学指标 # BETA - Beta # 函数名:BETA # 名称:β系数也称为贝塔系数 # 简介:一种风险指数,用来衡量个别股票或股票基金相对于整个股市的价格波动情况 # 贝塔系数衡量股票收益相对于业绩评价基准收益的总体波动性,是一个相对指标。 # β 越高,意味着股票相对于业绩评价基准的波动性越大。 # β 大于 1 , 则股票的波动性大于业绩评价基准的波动性。反之亦然。 # 用途: # 1)计算资本成本,做出投资决策(只有回报率高于资本成本的项目才应投资); # 2)计算资本成本,制定业绩考核及激励标准; # 3)计算资本成本,进行资产估值(Beta是现金流贴现模型的基础); # 4)确定单个资产或组合的系统风险,用于资产组合的投资管理, # 特别是股指期货或其他金融衍生品的避险(或投机) # real = BETA(df.high, df.low, timeperiod=5) dfa["BETA"] = ta.BETA(df.high, df.low, timeperiod=5) # CORREL - Pearson's Correlation Coefficient (r) # 函数名:CORREL # 名称:皮尔逊相关系数 # 简介:用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间 # 皮尔逊相关系数是一种度量两个变量间相关程度的方法。 # 它是一个介于 1 和 -1 之间的值, # 其中,1 表示变量完全正相关, 0 表示无关,-1 表示完全负相关。 # real = CORREL(df.high, df.low, timeperiod=30) dfa["CORREL"] = ta.CORREL(df.high, df.low, timeperiod=30) # LINEARREG - Linear Regression # 直线回归方程:当两个变量x与y之间达到显著地线性相关关系时, # 应用最小二乘法原理确定一条最优直线的直线方程y=a+bx, # 这条回归直线与个相关点的距离比任何其他直线与相关点的距离都小, # 是最佳的理想直线. 回归截距a:表示直线在y轴上的截距,代表直线的起点. # 回归系数b:表示直线的斜率,他的实际意义是说明x每变化一个单位时, # 影响y平均变动的数量. 即x每增加1单位,y变化b个单位. # 函数名:LINEARREG # 名称:线性回归 # 简介:来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法 # 其表达形式为y = w'x+e,e为误差服从均值为0的正态分布。 # real = LINEARREG(df.close, timeperiod=14) dfa["LINEARREG"] = ta.LINEARREG(df.close, timeperiod=14) # LINEARREG_ANGLE - Linear Regression Angle # 函数名:LINEARREG_ANGLE # 名称:线性回归的角度 # 简介:来确定价格的角度变化. 参考 # real = LINEARREG_ANGLE(df.close, timeperiod=14) dfa["LINEARREG_ANGLE"] = ta.LINEARREG_ANGLE(df.close, timeperiod=14) # LINEARREG_INTERCEPT - Linear Regression Intercept # 函数名:LINEARREG_INTERCEPT # 名称:线性回归截距 # real = LINEARREG_INTERCEPT(df.close, timeperiod=14) dfa["LINEARREG_INTERCEPT"] = ta.LINEARREG_INTERCEPT(df.close, timeperiod=14) # LINEARREG_SLOPE - Linear Regression Slope # 函数名:LINEARREG_SLOPE # 名称:线性回归斜率指标 # real = LINEARREG_SLOPE(df.close, timeperiod=14) dfa["LINEARREG_SLOPE"] = ta.LINEARREG_SLOPE(df.close, timeperiod=14) # STDDEV - Standard Deviation # 函数名:STDDEV # 名称:标准偏差 # 简介:种量度数据分布的分散程度之标准,用以衡量数据值偏离算术平均值的程度。 # 标准偏差越小,这些值偏离平均值就越少,反之亦然。 # 标准偏差的大小可通过标准偏差与平均值的倍率关系来衡量。 # real = STDDEV(df.close, timeperiod=5, nbdev=1) dfa["STDDEV"] = ta.STDDEV(df.close, timeperiod=5, nbdev=1) # TSF - Time Series Forecast # 函数名:TSF # 名称:时间序列预测 # 简介:一种历史资料延伸预测,也称历史引伸预测法。 # 是以时间数列所能反映的社会经济现象的发展过程和规律性, # 进行引伸外推,预测其发展趋势的方法 # real = TSF(df.close, timeperiod=14) dfa["TSF"] = ta.TSF(df.close, timeperiod=14) # VAR - VAR # 函数名: VAR 名称:方差 # 简介:方差用来计算每一个变量(观察值)与总体均数之间的差异。 # 为避免出现离均差总和为零,离均差平方和受样本含量的影响, # 统计学采用平均离均差平方和来描述变量的变异程度 # real = VAR(df.close, timeperiod=5, nbdev=1) dfa["VAR"] = ta.VAR(df.close, timeperiod=5, nbdev=1) return dfa
def get_talib_indicators(df, freq_lst=(5, 15, 30), divided_by_close=False): """ Additional indicators with different indicator parameters customized :param df: pandas.DataFrame with {'open', 'close', 'high', 'low', 'volume'} and index == date :return: pandas.DataFrame """ for n in freq_lst: # Overlap Studies Functions #BBANDS df['BBANDS_' + str(n) + '_UP'], df['BBANDS_' + str(n) + '_MID'], df['BBANDS_' + str(n) + '_LOW'] = ta.BBANDS( df.close, timeperiod=n, nbdevup=2, nbdevdn=2, matype=0) #DEMA df['DEMA' + str(n)] = ta.DEMA(df.close, timeperiod=n) #EMA df['EMA' + str(n)] = ta.EMA(df.close, timeperiod=n) #KAMA df['KAMA' + str(n)] = ta.KAMA(df.close, timeperiod=n) #MA df['MA' + str(n)] = ta.MA(df.close, timeperiod=n) #MAMA(ERROR) #df['MAMA' + str(n)] = ta.MAMA(df.close, fastlimit=0, slowlimit=0) #MAVP(periods 参数暂时无法确定) #df['' + str(n)] = ta.MAVP(df.close, periods, minperiod=2, maxperiod=30, matype=0) #MIDPOINT df['MIDPOINT' + str(n)] = ta.MIDPOINT(df.close, timeperiod=n) #MIDPRICE df['MIDPRICE' + str(n)] = ta.MIDPRICE(df.high, df.low, timeperiod=n) #SAR df['SAR' + str(n)] = ta.SAR(df.high, df.low, acceleration=0, maximum=0) #SAREXT(参数太多,暂时无法知道如何设置) #df['SAREXT' + str(n)] = ta.SAREXT(df.high, df.low, startvalue=0, offsetonreverse=0, accelerationinitlong=0, accelerationlong=0, accelerationmaxlong=0, accelerationinitshort=0, accelerationshort=0, accelerationmaxshort=0) #SMA df['SMA' + str(n)] = ta.SMA(df.close, timeperiod=n) #T3 df['T3' + str(n)] = ta.T3(df.close, timeperiod=n, vfactor=0.7) #TEMA df['TEMA' + str(n)] = ta.TEMA(df.close, timeperiod=n) #TRIMA df['TRIMA' + str(n)] = ta.TRIMA(df.close, timeperiod=n) #WMA df['WMA' + str(n)] = ta.WMA(df.close, timeperiod=n) #Momentum Indicator Functions #ADX df['ADX' + str(n)] = ta.ADX(df.high, df.low, df.close, timeperiod=n) #ADXR df['ADXR' + str(n)] = ta.ADXR(df.high, df.low, df.close, timeperiod=n) #APO df['APO' + str(n)] = ta.APO(df.close, fastperiod=12, slowperiod=26, matype=0) #AROON df['AROON_DOWN_' + str(n)], df['AROON_UP_' + str(n)] = ta.AROON( df.high, df.low, timeperiod=n) #AROONOSC df['AROONOSC' + str(n)] = ta.AROONOSC(df.high, df.low, timeperiod=n) #CCI df['CCI' + str(n)] = ta.CCI(df.high, df.low, df.close, timeperiod=n) #CMO df['CMO' + str(n)] = ta.CMO(df.close, timeperiod=n) #DX df['DX' + str(n)] = ta.DX(df.high, df.low, df.close, timeperiod=n) #MFI df['MFI' + str(n)] = ta.MFI(df.high, df.low, df.close, df.volume, timeperiod=n) #MINUS_DI df['MINUS_DI' + str(n)] = ta.MINUS_DI(df.high, df.low, df.close, timeperiod=n) #MINUS_DM df['MINUS_DM' + str(n)] = ta.MINUS_DM(df.high, df.low, timeperiod=n) #MOM df['MOM' + str(n)] = ta.MOM(df.close, timeperiod=n) #PLUS_DI df['PLUS_DI' + str(n)] = ta.PLUS_DI(df.high, df.low, df.close, timeperiod=n) #PLUS_DM df['PLUS_DM' + str(n)] = ta.PLUS_DM(df.high, df.low, timeperiod=n) #ROC df['ROC' + str(n)] = ta.ROC(df.close, timeperiod=n) #ROCP df['ROCP' + str(n)] = ta.ROCP(df.close, timeperiod=n) #ROCR df['ROCR' + str(n)] = ta.ROCR(df.close, timeperiod=n) #ROCR100 df['ROCR100_' + str(n)] = ta.ROCR100(df.close, timeperiod=n) #RSI df['RSI' + str(n)] = ta.RSI(df.close, timeperiod=n) #TRIX df['TRIX' + str(n)] = ta.TRIX(df.close, timeperiod=n) #WILLR df['WILLR' + str(n)] = ta.WILLR(df.high, df.low, df.close, timeperiod=n) #Volatility Indicator Functions #ATR df['ATR' + str(n)] = ta.ATR(df.high, df.low, df.close, timeperiod=n) #NATR df['NATR' + str(n)] = ta.NATR(df.high, df.low, df.close, timeperiod=n) # Statistic Functions #BETA df['BETA' + str(n)] = ta.BETA(df.high, df.low, timeperiod=n) #CORREL df['CORREL' + str(n)] = ta.CORREL(df.high, df.low, timeperiod=n) #LINEARREG df['LINEARREG' + str(n)] = ta.LINEARREG(df.close, timeperiod=n) #LINEARREG_ANGLE df['LINEARREG_ANGLE' + str(n)] = ta.LINEARREG_ANGLE(df.close, timeperiod=n) #LINEARREG_INTERCEPT df['LINEARREG_INTERCEPT' + str(n)] = ta.LINEARREG_INTERCEPT( df.close, timeperiod=n) #LINEARREG_SLOPE df['LINEARREG_SLOPE' + str(n)] = ta.LINEARREG_SLOPE(df.close, timeperiod=n) #STDDEV df['STDDEV' + str(n)] = ta.STDDEV(df.close, timeperiod=n, nbdev=1) #TSF df['TSF' + str(n)] = ta.TSF(df.close, timeperiod=n) #VAR df['VAR' + str(n)] = ta.VAR(df.close, timeperiod=n, nbdev=1) # Math Operator Functions #MAX df['MAX' + str(n)] = ta.MAX(df.close, timeperiod=n) #MAXINDEX #df['MAXINDEX' + str(n)] = ta.MAXINDEX(df.close, timeperiod=n) #MIN df['MIN' + str(n)] = ta.MIN(df.close, timeperiod=n) #MININDEX #df['MININDEX' + str(n)] = ta.MININDEX(df.close, timeperiod=n) #SUM #df['SUM' + str(n)] = ta.SUM(df.close, timeperiod=n) # HT_TRENDLINE df['HT_TRENDLINE'] = ta.HT_TRENDLINE(df.close) # BOP df['BOP'] = ta.BOP(df.open, df.high, df.low, df.close) # MACD df['MACD'], df['MACD_SIGNAL'], df['MACD_HIST'] = ta.MACD(df.close, fastperiod=12, slowperiod=26, signalperiod=9) # STOCH df['slowk'], df['slowd'] = ta.STOCH(df.high, df.low, df.close, fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0) # STOCHF df['fsatk'], df['fastd'] = ta.STOCHF(df.high, df.low, df.close, fastk_period=5, fastd_period=3, fastd_matype=0) # STOCHRSI df['fsatk_RSI'], df['fastd_RSI'] = ta.STOCHRSI(df.close, timeperiod=n, fastk_period=5, fastd_period=3, fastd_matype=0) # PPO df['PPO'] = ta.PPO(df.close, fastperiod=12, slowperiod=26, matype=0) # ULTOSC df['ULTOSC'] = ta.ULTOSC(df.high, df.low, df.close, timeperiod1=7, timeperiod2=14, timeperiod3=28) # Volume Indicator Functions # AD #df['AD'] = ta.AD(df.high, df.low, df.close, df.volume) # ADOSC #df['ADOSC'] = ta.ADOSC(df.high, df.low, df.close, df.volume, fastperiod=3, slowperiod=10) # OBV # OBV is too large #df['OBV'] = ta.OBV(df.close, df.volume) # TRANGE df['TRANGE'] = ta.TRANGE(df.high, df.low, df.close) # Price Indicator Functions # AVGPRICE df['AVGPRICE'] = ta.AVGPRICE(df.open, df.high, df.low, df.close) # MEDPRICE df['MEDPRICE'] = ta.MEDPRICE(df.high, df.low) # TYPPRICE df['TYPPRICE'] = ta.TYPPRICE(df.high, df.low, df.close) # WCLPRICE df['WCLPRICE'] = ta.WCLPRICE(df.high, df.low, df.close) # Cycle Indicator Functions # HT_DCPERIOD df['HT_DCPERIOD'] = ta.HT_DCPERIOD(df.close) # HT_DCPHASE df['HT_DCPHASE'] = ta.HT_DCPHASE(df.close) # HT_PHASOR df['HT_PHASOR_inphase'], df['HT_PHASOR_quadrature'] = ta.HT_PHASOR( df.close) # HT_SINE df['HT_SINE_sine'], df['HT_SINE_leadsine'] = ta.HT_SINE(df.close) # HT_TRENDMODE df['HT_TRENDMODE'] = ta.HT_TRENDMODE(df.close) #Indicators regardless of time_period #Pattern Recognition Functions #CDL2CROWS '''df['CDL2CROWS'] = ta.CDL2CROWS(df.open, df.high, df.low, df.close) # CDL3BLACKCROWS df['CDL3BLACKCROWS'] = ta.CDL3BLACKCROWS(df.open, df.high, df.low, df.close) # CDL3INSIDE df['CDL3INSIDE'] = ta.CDL3INSIDE(df.open, df.high, df.low, df.close) # CDL3LINESTRIKE df['CDL3LINESTRIKE'] = ta.CDL3LINESTRIKE(df.open, df.high, df.low, df.close) # CDL3OUTSIDE df['CDL3OUTSIDE'] = ta.CDL3OUTSIDE(df.open, df.high, df.low, df.close) # CDL3STARSINSOUTH df['CDL3STARSINSOUTH'] = ta.CDL3STARSINSOUTH(df.open, df.high, df.low, df.close) # CDL3WHITESOLDIERS df['CDL3WHITESOLDIERS'] = ta.CDL3WHITESOLDIERS(df.open, df.high, df.low, df.close) # CDLABANDONEDBABY df['CDLABANDONEDBABY'] = ta.CDLABANDONEDBABY(df.open, df.high, df.low, df.close, penetration=0) # CDLADVANCEBLOCK df['CDLADVANCEBLOCK'] = ta.CDLADVANCEBLOCK(df.open, df.high, df.low, df.close) # CDLBELTHOLD df['CDLBELTHOLD'] = ta.CDLBELTHOLD(df.open, df.high, df.low, df.close) # CDLBREAKAWAY df['CDLBREAKAWAY'] = ta.CDLBREAKAWAY(df.open, df.high, df.low, df.close) # CDLCLOSINGMARUBOZU df['CDLCLOSINGMARUBOZU'] = ta.CDLCLOSINGMARUBOZU(df.open, df.high, df.low, df.close) # CDLCONCEALBABYSWALL df['CDLCONCEALBABYSWALL'] = ta.CDLCONCEALBABYSWALL(df.open, df.high, df.low, df.close) # CDLCOUNTERATTACK df['CDLCOUNTERATTACK'] = ta.CDLCOUNTERATTACK(df.open, df.high, df.low, df.close) # CDLDARKCLOUDCOVER df['CDLDARKCLOUDCOVER'] = ta.CDLDARKCLOUDCOVER(df.open, df.high, df.low, df.close, penetration=0) # CDLDOJI df['CDLDOJI'] = ta.CDLDOJI(df.open, df.high, df.low, df.close) # CDLDOJISTAR df['CDLDOJISTAR'] = ta.CDLDOJISTAR(df.open, df.high, df.low, df.close) # CDLDRAGONFLYDOJI df['CDLDRAGONFLYDOJI'] = ta.CDLDRAGONFLYDOJI(df.open, df.high, df.low, df.close) # CDLENGULFING df['CDLENGULFING'] = ta.CDLENGULFING(df.open, df.high, df.low, df.close) # CDLEVENINGDOJISTAR df['CDLEVENINGDOJISTAR'] = ta.CDLEVENINGDOJISTAR(df.open, df.high, df.low, df.close, penetration=0) # CDLEVENINGSTAR df['CDLEVENINGSTAR'] = ta.CDLEVENINGSTAR(df.open, df.high, df.low, df.close, penetration=0) # CDLGAPSIDESIDEWHITE df['CDLGAPSIDESIDEWHITE'] = ta.CDLGAPSIDESIDEWHITE(df.open, df.high, df.low, df.close) # CDLGRAVESTONEDOJI df['CDLGRAVESTONEDOJI'] = ta.CDLGRAVESTONEDOJI(df.open, df.high, df.low, df.close) # CDLHAMMER df['CDLHAMMER'] = ta.CDLHAMMER(df.open, df.high, df.low, df.close) # CDLHANGINGMAN df['CDLHANGINGMAN'] = ta.CDLHANGINGMAN(df.open, df.high, df.low, df.close) # CDLHARAMI df['CDLHARAMI'] = ta.CDLHARAMI(df.open, df.high, df.low, df.close) # CDLHARAMICROSS df['CDLHARAMICROSS'] = ta.CDLHARAMICROSS(df.open, df.high, df.low, df.close) # CDLHIGHWAVE df['CDLHIGHWAVE'] = ta.CDLHIGHWAVE(df.open, df.high, df.low, df.close) # CDLHIKKAKE df['CDLHIKKAKE'] = ta.CDLHIKKAKE(df.open, df.high, df.low, df.close) # CDLHIKKAKEMOD df['CDLHIKKAKEMOD'] = ta.CDLHIKKAKEMOD(df.open, df.high, df.low, df.close) # CDLHOMINGPIGEON df['CDLHOMINGPIGEON'] = ta.CDLHOMINGPIGEON(df.open, df.high, df.low, df.close) # CDLIDENTICAL3CROWS df['CDLIDENTICAL3CROWS'] = ta.CDLIDENTICAL3CROWS(df.open, df.high, df.low, df.close) # CDLINNECK df['CDLINNECK'] = ta.CDLINNECK(df.open, df.high, df.low, df.close) # CDLINVERTEDHAMMER df['CDLINVERTEDHAMMER'] = ta.CDLINVERTEDHAMMER(df.open, df.high, df.low, df.close) # CDLKICKING df['CDLKICKING'] = ta.CDLKICKING(df.open, df.high, df.low, df.close) # CDLKICKINGBYLENGTH df['CDLKICKINGBYLENGTH'] = ta.CDLKICKINGBYLENGTH(df.open, df.high, df.low, df.close) # CDLLADDERBOTTOM df['CDLLADDERBOTTOM'] = ta.CDLLADDERBOTTOM(df.open, df.high, df.low, df.close) # CDLLONGLEGGEDDOJI df['CDLLONGLEGGEDDOJI'] = ta.CDLLONGLEGGEDDOJI(df.open, df.high, df.low, df.close) # CDLLONGLINE df['CDLLONGLINE'] = ta.CDLLONGLINE(df.open, df.high, df.low, df.close) # CDLMARUBOZU df['CDLMARUBOZU'] = ta.CDLMARUBOZU(df.open, df.high, df.low, df.close) # CDLMATCHINGLOW df['CDLMATCHINGLOW'] = ta.CDLMATCHINGLOW(df.open, df.high, df.low, df.close) # CDLMATHOLD df['CDLMATHOLD'] = ta.CDLMATHOLD(df.open, df.high, df.low, df.close, penetration=0) # CDLMORNINGDOJISTAR df['CDLMORNINGDOJISTAR'] = ta.CDLMORNINGDOJISTAR(df.open, df.high, df.low, df.close, penetration=0) # CDLMORNINGSTAR df['CDLMORNINGSTAR'] = ta.CDLMORNINGSTAR(df.open, df.high, df.low, df.close, penetration=0) # CDLONNECK df['CDLONNECK'] = ta.CDLONNECK(df.open, df.high, df.low, df.close) # CDLPIERCING df['CDLPIERCING'] = ta.CDLPIERCING(df.open, df.high, df.low, df.close) # CDLRICKSHAWMAN df['CDLRICKSHAWMAN'] = ta.CDLRICKSHAWMAN(df.open, df.high, df.low, df.close) # CDLRISEFALL3METHODS df['CDLRISEFALL3METHODS'] = ta.CDLRISEFALL3METHODS(df.open, df.high, df.low, df.close) # CDLSEPARATINGLINES df['CDLSEPARATINGLINES'] = ta.CDLSEPARATINGLINES(df.open, df.high, df.low, df.close) # CDLSHOOTINGSTAR df['CDLSHOOTINGSTAR'] = ta.CDLSHOOTINGSTAR(df.open, df.high, df.low, df.close) # CDLSHORTLINE df['CDLSHORTLINE'] = ta.CDLSHORTLINE(df.open, df.high, df.low, df.close) # CDLSPINNINGTOP df['CDLSPINNINGTOP'] = ta.CDLSPINNINGTOP(df.open, df.high, df.low, df.close) # CDLSTALLEDPATTERN df['CDLSTALLEDPATTERN'] = ta.CDLSTALLEDPATTERN(df.open, df.high, df.low, df.close) # CDLSTICKSANDWICH df['CDLSTICKSANDWICH'] = ta.CDLSTICKSANDWICH(df.open, df.high, df.low, df.close) # CDLTAKURI df['CDLTAKURI'] = ta.CDLTAKURI(df.open, df.high, df.low, df.close) # CDLTASUKIGAP df['CDLTASUKIGAP'] = ta.CDLTASUKIGAP(df.open, df.high, df.low, df.close) # CDLTHRUSTING df['CDLTHRUSTING'] = ta.CDLTHRUSTING(df.open, df.high, df.low, df.close) # CDLTRISTAR df['CDLTRISTAR'] = ta.CDLTRISTAR(df.open, df.high, df.low, df.close) # CDLUNIQUE3RIVER df['CDLUNIQUE3RIVER'] = ta.CDLUNIQUE3RIVER(df.open, df.high, df.low, df.close) # CDLUPSIDEGAP2CROWS df['CDLUPSIDEGAP2CROWS'] = ta.CDLUPSIDEGAP2CROWS(df.open, df.high, df.low, df.close) # CDLXSIDEGAP3METHODS df['CDLXSIDEGAP3METHODS'] = ta.CDLXSIDEGAP3METHODS(df.open, df.high, df.low, df.close)''' # Math Transform Functions #ACOS #df['ACOS'] = ta.ACOS(df.close) #ASIN #df['ASIN'] = ta.ASIN(df.close) #ATAN df['ATAN'] = ta.ATAN(df.close) #CEIL #df['CEIL'] = ta.CEIL(df.close) #COS df['COS'] = ta.COS(df.close) #COSH #df['COSH'] = ta.COSH(df.close) #EXP #df['EXP'] = ta.EXP(df.close) #FLOOR #df['FLOOR'] = ta.FLOOR(df.close) #LN df['LN'] = ta.LN(df.close) #LOG10 df['LOG10'] = ta.LOG10(df.close) #SIN df['SIN'] = ta.SIN(df.close) #SINH #df['SINH'] = ta.SINH(df.close) #SQRT df['SQRT'] = ta.SQRT(df.close) #TAN df['TAN'] = ta.TAN(df.close) #TANH df['TANH'] = ta.TANH(df.close) # Math Operator Functions # ADD #df['ADD'] = ta.ADD(df.high, df.low) # DIV #df['DIV'] = ta.DIV(df.high, df.low) # MULT #df['MULT'] = ta.MULT(df.high, df.low) # ADD #df['SUB'] = ta.SUB(df.high, df.low) if divided_by_close: bias = 1 df['BBANDS_5_UP'] = df['BBANDS_5_UP'] / df.close - bias df['BBANDS_5_MID'] = df['BBANDS_5_MID'] / df.close - bias df['BBANDS_5_LOW'] = df['BBANDS_5_LOW'] / df.close - bias df['DEMA5'] = df['DEMA5'] / df.close - bias df['EMA5'] = df['EMA5'] / df.close - bias df['KAMA5'] = df['KAMA5'] / df.close - bias df['MA5'] = df['MA5'] / df.close - bias df['MIDPOINT5'] = df['MIDPOINT5'] / df.close - bias df['MIDPRICE5'] = df['MIDPRICE5'] / df.close - bias df['SMA5'] = df['SMA5'] / df.close - bias df['T35'] = df['T35'] / df.close - bias df['TEMA5'] = df['TEMA5'] / df.close - bias df['TRIMA5'] = df['TRIMA5'] / df.close - bias df['WMA5'] = df['WMA5'] / df.close - bias df['LINEARREG5'] = df['LINEARREG5'] / df.close - bias df['LINEARREG_INTERCEPT5'] = df[ 'LINEARREG_INTERCEPT5'] / df.close - bias df['TSF5'] = df['TSF5'] / df.close - bias df['MAX5'] = df['MAX5'] / df.close - bias df['MIN5'] = df['MIN5'] / df.close - bias df['BBANDS_15_UP'] = df['BBANDS_15_UP'] / df.close - bias df['BBANDS_15_MID'] = df['BBANDS_15_MID'] / df.close - bias df['BBANDS_15_LOW'] = df['BBANDS_15_LOW'] / df.close - bias df['DEMA15'] = df['DEMA15'] / df.close - bias df['EMA15'] = df['EMA15'] / df.close - bias df['KAMA15'] = df['KAMA15'] / df.close - bias df['MA15'] = df['MA15'] / df.close - bias df['MIDPOINT15'] = df['MIDPOINT15'] / df.close - bias df['MIDPRICE15'] = df['MIDPRICE15'] / df.close - bias df['SMA15'] = df['SMA15'] / df.close - bias df['T315'] = df['T315'] / df.close - bias df['TEMA15'] = df['TEMA15'] / df.close - bias df['TRIMA15'] = df['TRIMA15'] / df.close - bias df['WMA15'] = df['WMA15'] / df.close - bias df['LINEARREG15'] = df['LINEARREG15'] / df.close - bias df['LINEARREG_INTERCEPT15'] = df[ 'LINEARREG_INTERCEPT15'] / df.close - bias df['TSF15'] = df['TSF15'] / df.close - bias df['MAX15'] = df['MAX15'] / df.close - bias df['MIN15'] = df['MIN15'] / df.close - bias df['BBANDS_30_UP'] = df['BBANDS_30_UP'] / df.close - bias df['BBANDS_30_MID'] = df['BBANDS_30_MID'] / df.close - bias df['BBANDS_30_LOW'] = df['BBANDS_30_LOW'] / df.close - bias df['DEMA30'] = df['DEMA30'] / df.close - bias df['EMA30'] = df['EMA30'] / df.close - bias df['KAMA30'] = df['KAMA30'] / df.close - bias df['MA30'] = df['MA30'] / df.close - bias df['MIDPOINT30'] = df['MIDPOINT30'] / df.close - bias df['MIDPRICE30'] = df['MIDPRICE30'] / df.close - bias df['SMA30'] = df['SMA30'] / df.close - bias df['T330'] = df['T330'] / df.close - bias df['TEMA30'] = df['TEMA30'] / df.close - bias df['TRIMA30'] = df['TRIMA30'] / df.close - bias df['WMA30'] = df['WMA30'] / df.close - bias df['LINEARREG_INTERCEPT30'] = df[ 'LINEARREG_INTERCEPT30'] / df.close - bias df['TSF30'] = df['TSF30'] / df.close - bias df['MAX30'] = df['MAX30'] / df.close - bias df['MIN30'] = df['MIN30'] / df.close - bias df['HT_TRENDLINE'] = df['HT_TRENDLINE'] / df.close - bias df['AVGPRICE'] = df['AVGPRICE'] / df.close - bias df['MEDPRICE'] = df['MEDPRICE'] / df.close - bias df['TYPPRICE'] = df['TYPPRICE'] / df.close - bias df['WCLPRICE'] = df['WCLPRICE'] / df.close - bias df['open'] = df['open'] / df.close - bias df['high'] = df['high'] / df.close - bias df['low'] = df['low'] / df.close - bias
def calc_beta(cls, term, high, low): return list(ta.BETA(np.array(high, dtype='f8'), np.array(low, dtype='f8'), timeperiod=term))
def BETA(data, **kwargs): _check_talib_presence() _, phigh, plow, _, _ = _extract_ohlc(data) return talib.BETA(phigh, plow, **kwargs)
def trans_features(stockk): """该函数主要用于继续新增各种个股的特征,增加了各种常用技术指标入EMA,布林线等""" # stockk就是融合了各种特征列,标签列的df格式的data数据 # stockk[['open','close','low','high']]=stockk[['open','close','low','high']]/stockk['close'].iloc[-1] # 特征工程,继续增加新特征 stockk['preclose']=stockk['close'].shift() stockk['volume']=stockk['volume']/1000000 # 个股交易量数据缩放 stockk['amount']=stockk['amount']/1000000 stockk['pctChg']=cut_to1(8*stockk['close'].diff()/stockk['close'].shift()) # 当日涨幅 # stockk['pctChg2']=(1+stockk['pctChg']).rolling(2).cumprod()-1 stockk['pctChg2']=cut_to1(5*(stockk['close']/stockk['close'].shift(2))-5) # 过去2日涨幅 stockk['pctChg4']=cut_to1(4*(stockk['close']/stockk['close'].shift(5))-4) stockk['pctChg8']=cut_to1(2*(stockk['close']/stockk['close'].shift(8))-2) stockk['pctChg15']=cut_to1(2*(stockk['close']/stockk['close'].shift(15))-2) stockk['pctChg30']=cut_to1(2*(stockk['close']/stockk['close'].shift(15))-2) stockk['avg_price']=stockk['amount']/(0.01+stockk['volume']) # 平均成交价,成交额/交易量 stockk['sma5']=stockk['close'].rolling(5).mean() # 个股前5日均价 stockk['sma10']=stockk['close'].rolling(10).mean() stockk['sma20']=stockk['close'].rolling(20).mean() stockk['sma40']=stockk['close'].rolling(40).mean() stockk['sma80']=stockk['close'].rolling(80).mean() stockk['max20']=stockk['high'].rolling(20).max().shift() # 个股前20日最高价(不含当日) stockk['max60']=stockk['high'].rolling(60).max().shift() stockk['max120']=stockk['high'].rolling(120).max().shift() stockk['min20']=stockk['low'].rolling(20).min().shift() # 个股前20日最低价(不含当日) stockk['min60']=stockk['low'].rolling(60).min().shift() stockk['min120']=stockk['low'].rolling(120).min().shift() stockk['20_min']=cut_to1(1*stockk['close']/stockk['min20']-0.9)### (个股20日内最大涨幅 + 10%),涨幅超110%,则截断。----10%有何用?????? stockk['60_min']=cut_to1(1*stockk['close']/stockk['min60']-0.9)### stockk['120_min']=cut_to1(1*stockk['close']/stockk['min120']-0.9)### stockk['20_max']=cut_to1(2*stockk['close']/stockk['max20']-2)### 2*(个股20日内最大跌幅), 跌幅超50%,则截断。 stockk['60_max']=cut_to1(2*stockk['close']/stockk['max60']-2)### (即便昨天是max20,今天最多涨10%,不会截断) stockk['120_max']=cut_to1(2*stockk['close']/stockk['max120']-2)### stockk['5_d']=cut_to1(20*stockk['sma5'].diff()/stockk['sma5'].shift()) # 个股5日均线涨幅,±5%截断 stockk['10_d']=cut_to1(40*stockk['sma10'].diff()/stockk['sma10'].shift()) stockk['20_d']=cut_to1(60*stockk['sma20'].diff()/stockk['sma20'].shift()) stockk['40_d']=cut_to1(80*stockk['sma40'].diff()/stockk['sma40'].shift()) stockk['80_d']=cut_to1(100*stockk['sma80'].diff()/stockk['sma80'].shift()) stockk['r5']=cut_to1(6*stockk['close']/stockk['sma5']-6) # 个股收盘价较5日均线偏移幅度(±16.6%截断) stockk['r10']=cut_to1(4*stockk['close']/stockk['sma10']-4) stockk['r20']=cut_to1(4*stockk['close']/stockk['sma20']-4) stockk['r40']=cut_to1(3*stockk['close']/stockk['sma40']-3) stockk['r80']=cut_to1(2*stockk['close']/stockk['sma80']-2) stockk['r5_20']=(3*stockk['sma5']/stockk['sma20']-3) # 个股5日均线较20日均线偏移幅度(下面语句会进行±33.3%截断) stockk['r10_40']=(2*stockk['sma10']/stockk['sma40']-2) stockk['r20_80']=(2*stockk['sma20']/stockk['sma80']-2) stockk['r5_40']=(2*stockk['sma5']/stockk['sma40']-2) stockk['r5_20_d']=cut_to1(10*stockk['r5_20'].diff()) # 5日20日均线偏移幅度变动量(±10%截断)----不太可能一天变动10%吧! stockk['r10_40_d']=cut_to1(20*stockk['r10_40'].diff()) stockk['r20_80_d']=cut_to1(20*stockk['r20_80'].diff()) stockk['r5_20']=cut_to1(stockk['r5_20']) # ±33.3%截断 stockk['r10_40']=cut_to1(stockk['r10_40']) stockk['r20_80']=cut_to1(stockk['r20_80']) stockk['r5_40']=cut_to1(stockk['r5_40']) stockk['day_price'] = 0.5*(stockk['open']+stockk['close'])/stockk['volume'] # (开盘价-收盘价)的平均值除以交易量 stockk['v5']=(10*stockk['volume']/(0.1+stockk['volume'].rolling(5).mean())) # 交易量/5日交易量均值,0.1是避免出现0交易量,导致报错 stockk['v10']=(10*stockk['volume']/(0.1+stockk['volume'].rolling(10).mean())) stockk['v20']=(10*stockk['volume']/(0.1+stockk['volume'].rolling(20).mean())) stockk['v40']=(10*stockk['volume']/(0.1+stockk['volume'].rolling(40).mean())) stockk['v80']=(10*stockk['volume']/(0.1+stockk['volume'].rolling(80).mean())) stockk['v3_9']=(10*stockk['volume'].rolling(3).mean()/(0.1+stockk['volume'].rolling(9).mean())) # 交易量3日均/交易量9日均 stockk['v5_20']=(10*stockk['volume'].rolling(5).mean()/(0.1+stockk['volume'].rolling(20).mean())) stockk['v9_50']=(10*stockk['volume'].rolling(9).mean()/(0.1+stockk['volume'].rolling(50).mean())) stockk['v5_d']=0.6366*np.arctan(0.1*stockk['v5'].diff()) # 用arctan()进行数据归一化,交易量过大,用0.1压一压,避难arctan()饱和 stockk['v10_d']=0.6366*np.arctan(0.1*stockk['v10'].diff()) stockk['v20_d']=0.6366*np.arctan(0.1*stockk['v20'].diff()) stockk['v40_d']=0.6366*np.arctan(0.1*stockk['v40'].diff()) stockk['v80_d']=0.6366*np.arctan(0.1*stockk['v80'].diff()) stockk['v3_9_d']=0.6366*np.arctan(1*stockk['v3_9'].diff()) stockk['v5_20_d']=0.6366*np.arctan(1*stockk['v5_20'].diff()) stockk['v9_50_d']=0.6366*np.arctan(1*stockk['v9_50'].diff()) stockk['v3_9']=0.6366*np.arctan(0.1*stockk['v3_9']) stockk['v5_20']=0.6366*np.arctan(0.1*stockk['v5_20']) stockk['v9_50']=0.6366*np.arctan(0.1*stockk['v9_50']) stockk['v5']=0.6366*np.arctan(0.1*stockk['v5']) stockk['v10']=0.6366*np.arctan(0.1*stockk['v10']) stockk['v20']=0.6366*np.arctan(0.1*stockk['v20']) stockk['v40']=0.6366*np.arctan(0.1*stockk['v40']) stockk['v80']=0.6366*np.arctan(0.1*stockk['v80']) # 个股macd(12,26,9) stockk['dif'], stockk['dea'],stockk['hist'] = talib.MACD(stockk['close'].astype(float).values, fastperiod=12, slowperiod=26, signalperiod=9) stockk['dif']=cut_to1(0.7*stockk['dif']) # 个股dif截断怎么用1.42吗,超过1.42的dif就没了??? stockk['dea']=cut_to1(0.7*stockk['dea']) stockk['hist']=(1*stockk['hist']) stockk['hist_d']=cut_to1(4*stockk['hist'].diff()) stockk['hist']=cut_to1(stockk['hist']) #计算几个指标相对前收盘的涨幅 stockk['highratio']=cut_to1(10*(stockk['high'])/stockk['close'].shift()-10.2) # 当日最高涨幅(为何设10.2???) stockk['lowratio']=cut_to1(10*(stockk['low'])/stockk['close'].shift()-9.8) stockk['openratio']=cut_to1(20*(stockk['open'])/stockk['close'].shift()-20) # 当日开盘涨幅(±5%截断,不合适吧,开盘涨停的没了???) #talib均线指标 stockk['tema']=0.6366*np.arctan(0.1*talib.TEMA(stockk['close'],timeperiod=30)**0.5) # 三重移动平均线 stockk['trima']=0.6366*np.arctan(0.1*talib.TRIMA(stockk['close'],timeperiod=30)**0.5) # 三角移动平均线 stockk['wma']=0.6366*np.arctan(0.1*talib.WMA(stockk['close'],timeperiod=30)**0.5) # 加权移动平均线 stockk['t3']=0.6366*np.arctan(0.1*talib.T3(stockk['close'],timeperiod=5, vfactor=0)**0.5) # 超短线使用的三重移动平均线 #talib量价指标 stockk['natr']=cut_to1(-0.2+0.1*talib.NATR(stockk['high'],stockk['low'],stockk['close'],timeperiod=14)) stockk['adline'] = 0.6366*np.arctan(0.005*talib.AD(stockk['high'],stockk['low'],stockk['close'],stockk['volume'])-0.5) stockk['adosc'] = 0.6366*np.arctan(0.1*talib.ADOSC(stockk['high'],stockk['low'],stockk['close'],stockk['volume'], fastperiod=3, slowperiod=10)) stockk['obv'] =0.6366*np.arctan(0.001*talib.OBV(stockk['close'],stockk['volume'])) ##静态指标 stockk['beta'] = 0.6366*np.arctan(talib.BETA(stockk['high'],stockk['low'], timeperiod=5)) stockk['correl'] = cut_to1(-3*talib.CORREL(stockk['high'],stockk['low'], timeperiod=30)+3) stockk['linearreg'] = 0.6366*np.arctan(0.1*talib.LINEARREG(stockk['close'], timeperiod=14)-1) stockk['lineangle'] = 0.6366*np.arctan(0.1*talib.LINEARREG_ANGLE(stockk['close'], timeperiod=14)) # stockk['lineslope'] =0.1*talib.LINEARREG_SLOPE(stockk['close'], timeperiod=14) stockk['var'] = 0.6366*np.arctan(30*talib.VAR(stockk['close'], timeperiod=5,nbdev=1)) stockk['TSF'] = 0.6366*np.arctan(2*talib.TSF(stockk['close'], timeperiod=14)) stockk['lineintercept'] = 0.6366*np.arctan(0.05*talib.LINEARREG_INTERCEPT(stockk['close'], timeperiod=14)) stockk['stddev'] =cut_to1((talib.STDDEV(stockk['close'], timeperiod=5,nbdev=1))**0.25-1) ###动量指标 stockk['sar'] = 0.6366*np.arctan(0.1*talib.SAR(stockk['high'], stockk['low'], acceleration=0, maximum=0)) stockk['adx'] = cut_to1(0.015*talib.ADX(stockk['high'],stockk['low'],stockk['close'], timeperiod=14)) stockk['adxr'] = cut_to1(0.015*talib.ADXR(stockk['high'],stockk['low'],stockk['close'],timeperiod=14)) stockk['apo'] = cut_to1(0.5*talib.APO(stockk['close'], fastperiod=12, slowperiod=26, matype=0)) stockk['ardown'], stockk['arup']= talib.AROON(stockk['high'],stockk['low'],timeperiod=14) stockk['ardown']=0.02*stockk['ardown']-1 stockk['arup']=0.02*stockk['arup']-1 stockk['arosc'] = 0.01*talib.AROONOSC(stockk['high'],stockk['low'],timeperiod=14) stockk['bop'] = talib.BOP(stockk['open'],stockk['high'],stockk['low'],stockk['close']) stockk['cci'] = 0.004*talib.CCI(stockk['high'],stockk['low'],stockk['close'],timeperiod=14) stockk['cci_d']=0.637*np.arctan(1*stockk['cci'].diff()/(0.1+stockk['cci'].shift())) return stockk
def appendAllTAData(df=pd.DataFrame([])): resDF = pd.DataFrame([]) # 函数名:AD名称:ChaikinA/DLine累积/派发线(Accumulation/DistributionLine) # 简介:MarcChaikin提出的一种平衡交易量指标,以当日的收盘价位来估算成交流量,用于估定一段时间内该证券累积的资金流量。 # 计算公式:A/D=昨日A/D+多空对比*今日成交量多空对比=[(收盘价-最低价)-(最高价-收盘价)]/(最高价-最低价) # 若最高价等于最低价:多空对比=(收盘价/昨收盘)-1 # 研判:1、A/D测量资金流向,向上的A/D表明买方占优势,而向下的A/D表明卖方占优势 # 2、A/D与价格的背离可视为买卖信号,即底背离考虑买入,顶背离考虑卖出 # 3、应当注意A/D忽略了缺口的影响,事实上,跳空缺口的意义是不能轻易忽略的 # A/D指标无需设置参数,但在应用时,可结合指标的均线进行分析例子:real=AD(high,low,close,volume) resDF['AD'] = ta.AD(df['max_price'].values, df['min_price'].values, df['price'].values, df['vol'].values) # 函数名:ADOSC名称:Chaikin A/D Oscillator Chaikin震荡指标 # 简介:将资金流动情况与价格行为相对比,检测市场中资金流入和流出的情况 # 计算公式:fastperiod A/D - slowperiod A/D # 研判:1、交易信号是背离:看涨背离做多,看跌背离做空 # 2、股价与90天移动平均结合,与其他指标结合 # 3、由正变负卖出,由负变正买进 # 例子:real = ADOSC(high, low, close, volume, fastperiod=3, slowperiod=10) resDF['ADOSC'] = ta.ADOSC(df['max_price'].values, df['min_price'].values, df['price'].values, df['vol'].values, fastperiod=3, slowperiod=10) resDF['ADX'] = ta.ADX(df['max_price'].values, df['min_price'].values, df['price'].values) resDF['ADXR'] = ta.ADXR(df['max_price'].values, df['min_price'].values, df['price'].values, timeperiod=14) resDF['APO'] = ta.APO(df['price'].values, fastperiod=12, slowperiod=26, matype=0) resDF['aroondown'], resDF['aroonup'] = ta.AROON(df['max_price'].values, df['min_price'].values, timeperiod=14) resDF['AROONOSC'] = ta.AROONOSC(df['max_price'].values, df['min_price'].values, timeperiod=14) resDF['ATR'] = ta.ATR(df['max_price'].values, df['min_price'].values, df['price'].values, timeperiod=14) resDF['AVGPRICE'] = ta.AVGPRICE(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) resDF['upperband'], resDF['middleband'], resDF['lowerband'] = ta.BBANDS( df['price'].values, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0) resDF['BETA'] = ta.BETA(df['max_price'].values, df['min_price'].values, timeperiod=5) resDF['BOP'] = ta.BOP(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) resDF['CCI'] = ta.CCI(df['max_price'].values, df['min_price'].values, df['price'].values, timeperiod=10)[-1] # 函数名:CDL2CROWS名称:Two Crows 两只乌鸦 # 简介:三日K线模式,第一天长阳,第二天高开收阴,第三天再次高开继续收阴,收盘比前一日收盘价低,预示股价下跌。 # 例子:integer = CDL2CROWS(open, high, low, close) resDF['CDL2CROWS'] = ta.CDL2CROWS(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDL3BLACKCROWS名称:Three Black Crows 三只乌鸦 # 简介:三日K线模式,连续三根阴线,每日收盘价都下跌且接近最低价,每日开盘价都在上根K线实体内,预示股价下跌。 # 例子:integer = CD3BLACKCROWS(open, high, low, close) resDF['CDL3BLACKCROWS'] = ta.CDL3BLACKCROWS(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDL3INSIDE名称: Three Inside Up/Down 三内部上涨和下跌 # 简介:三日K线模式,母子信号+长K线,以三内部上涨为例,K线为阴阳阳,第三天收盘价高于第一天开盘价,第二天K线在第一天K线内部,预示着股价上涨。 # 例子:integer = CDL3INSIDE(open, high, low, close) resDF['CDL3INSIDE'] = ta.CDL3INSIDE(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDL3LINESTRIKE名称: Three-Line Strike 三线打击 # 简介:四日K线模式,前三根阳线,每日收盘价都比前一日高,开盘价在前一日实体内,第四日市场高开,收盘价低于第一日开盘价,预示股价下跌。 # 例子:integer = CDL3LINESTRIKE(open, high, low, close) resDF['CDL3LINESTRIKE'] = ta.CDL3LINESTRIKE(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDL3OUTSIDE名称:Three Outside Up/Down 三外部上涨和下跌 # 简介:三日K线模式,与三内部上涨和下跌类似,K线为阴阳阳,但第一日与第二日的K线形态相反,以三外部上涨为例,第一日K线在第二日K线内部,预示着股价上涨。 # 例子:integer = CDL3OUTSIDE(open, high, low, close) resDF['CDL3OUTSIDE'] = ta.CDL3OUTSIDE(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDL3STARSINSOUTH名称:Three Stars In The South 南方三星 # 简介:三日K线模式,与大敌当前相反,三日K线皆阴,第一日有长下影线,第二日与第一日类似,K线整体小于第一日,第三日无下影线实体信号,成交价格都在第一日振幅之内,预示下跌趋势反转,股价上升。 # 例子:integer = CDL3STARSINSOUTH(open, high, low, close) resDF['CDL3STARSINSOUTH'] = ta.CDL3STARSINSOUTH( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDL3WHITESOLDIERS名称:Three Advancing White Soldiers 三个白兵 # 简介:三日K线模式,三日K线皆阳,每日收盘价变高且接近最高价,开盘价在前一日实体上半部,预示股价上升。 # 例子:integer = CDL3WHITESOLDIERS(open, high, low, close) resDF['CDL3WHITESOLDIERS'] = ta.CDL3WHITESOLDIERS( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLABANDONEDBABY名称:Abandoned Baby 弃婴 # 简介:三日K线模式,第二日价格跳空且收十字星(开盘价与收盘价接近,最高价最低价相差不大),预示趋势反转,发生在顶部下跌,底部上涨。 # 例子:integer = CDLABANDONEDBABY(open, high, low, close, penetration=0) resDF['CDLABANDONEDBABY'] = ta.CDLABANDONEDBABY( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values, penetration=0) # 函数名:CDLADVANCEBLOCK名称:Advance Block 大敌当前 # 简介:三日K线模式,三日都收阳,每日收盘价都比前一日高,开盘价都在前一日实体以内,实体变短,上影线变长。 # 例子:integer = CDLADVANCEBLOCK(open, high, low, close) resDF['CDLADVANCEBLOCK'] = ta.CDLADVANCEBLOCK( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLBELTHOLD名称:Belt-hold 捉腰带线 # 简介:两日K线模式,下跌趋势中,第一日阴线,第二日开盘价为最低价,阳线,收盘价接近最高价,预示价格上涨。 # 例子:integer = CDLBELTHOLD(open, high, low, close) resDF['CDLBELTHOLD'] = ta.CDLBELTHOLD(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLBREAKAWAY名称:Breakaway 脱离 # 简介:五日K线模式,以看涨脱离为例,下跌趋势中,第一日长阴线,第二日跳空阴线,延续趋势开始震荡,第五日长阳线,收盘价在第一天收盘价与第二天开盘价之间,预示价格上涨。 # 例子:integer = CDLBREAKAWAY(open, high, low, close) resDF['CDLBREAKAWAY'] = ta.CDLBREAKAWAY(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名: CDLCLOSINGMARUBOZU 名称:Closing Marubozu 收盘缺影线 # 简介:一日K线模式,以阳线为例,最低价低于开盘价,收盘价等于最高价,预示着趋势持续。 # 例子:integer = CDLCLOSINGMARUBOZU(open, high, low, close) resDF['CDLCLOSINGMARUBOZU'] = ta.CDLCLOSINGMARUBOZU( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLCONCEALBABYSWALL名称: Concealing Baby Swallow 藏婴吞没 # 简介:四日K线模式,下跌趋势中,前两日阴线无影线,第二日开盘、收盘价皆低于第二日,第三日倒锤头,第四日开盘价高于前一日最高价,收盘价低于前一日最低价,预示着底部反转。 # 例子:integer = CDLCONCEALBABYSWALL(open, high, low, close) resDF['CDLCONCEALBABYSWALL'] = ta.CDLCONCEALBABYSWALL( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLCOUNTERATTACK # 名称:Counterattack 反击线 # 简介:二日K线模式,与分离线类似。 # 例子:integer = CDLCOUNTERATTACK(open, high, low, close) resDF['CDLCOUNTERATTACK'] = ta.CDLCOUNTERATTACK( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLDARKCLOUDCOVER名称:Dark Cloud Cover 乌云压顶 # 简介:二日K线模式,第一日长阳,第二日开盘价高于前一日最高价,收盘价处于前一日实体中部以下,预示着股价下跌。 # 例子:integer = CDLDARKCLOUDCOVER(open, high, low, close, penetration=0) resDF['CDLDARKCLOUDCOVER'] = ta.CDLDARKCLOUDCOVER( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values, penetration=0) # 函数名: CDLDOJI # 名称:Doji 十字 # 简介:一日K线模式,开盘价与收盘价基本相同。 # 例子:integer = CDLDOJI(open, high, low, close) resDF['CDLDOJI'] = ta.CDLDOJI(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名: CDLDOJISTAR # 名称:Doji Star 十字星 # 简介:一日K线模式,开盘价与收盘价基本相同,上下影线不会很长,预示着当前趋势反转。 # 例子:integer = CDLDOJISTAR(open, high, low, close) resDF['CDLDOJISTAR'] = ta.CDLDOJISTAR(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLDRAGONFLYDOJI名称:Dragonfly Doji 蜻蜓十字/T形十字 # 简介:一日K线模式,开盘后价格一路走低,之后收复,收盘价与开盘价相同,预示趋势反转。 # 例子:integer = CDLDRAGONFLYDOJI(open, high, low, close) resDF['CDLDRAGONFLYDOJI'] = ta.CDLDRAGONFLYDOJI( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLENGULFING名称:Engulfing Pattern 吞噬模式 # 简介:两日K线模式,分多头吞噬和空头吞噬,以多头吞噬为例,第一日为阴线,第二日阳线,第一日的开盘价和收盘价在第二日开盘价收盘价之内,但不能完全相同。 # 例子:integer = CDLENGULFING(open, high, low, close) resDF['CDLENGULFING'] = ta.CDLENGULFING(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLEVENINGDOJISTAR名称:Evening Doji Star 十字暮星 # 简介:三日K线模式,基本模式为暮星,第二日收盘价和开盘价相同,预示顶部反转。 # 例子:integer = CDLEVENINGDOJISTAR(open, high, low, close, penetration=0) resDF['CDLEVENINGDOJISTAR'] = ta.CDLEVENINGDOJISTAR( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values, penetration=0) # 函数名:CDLEVENINGSTAR名称:Evening Star 暮星 # 简介:三日K线模式,与晨星相反,上升趋势中,第一日阳线,第二日价格振幅较小,第三日阴线,预示顶部反转。 # 例子:integer = CDLEVENINGSTAR(open, high, low, close, penetration=0) resDF['CDLEVENINGSTAR'] = ta.CDLEVENINGSTAR(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values, penetration=0) # 函数名:CDLGAPSIDESIDEWHITE名称:Up/Down-gap side-by-side white lines 向上/下跳空并列阳线 # 简介:二日K线模式,上升趋势向上跳空,下跌趋势向下跳空,第一日与第二日有相同开盘价,实体长度差不多,则趋势持续。 # 例子:integer = CDLGAPSIDESIDEWHITE(open, high, low, close) resDF['CDLGAPSIDESIDEWHITE'] = ta.CDLGAPSIDESIDEWHITE( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLGRAVESTONEDOJI名称:Gravestone Doji 墓碑十字/倒T十字 # 简介:一日K线模式,开盘价与收盘价相同,上影线长,无下影线,预示底部反转。 # 例子:integer = CDLGRAVESTONEDOJI(open, high, low, close) resDF['CDLGRAVESTONEDOJI'] = ta.CDLGRAVESTONEDOJI( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLHAMMER # 名称:Hammer 锤头 # 简介:一日K线模式,实体较短,无上影线,下影线大于实体长度两倍,处于下跌趋势底部,预示反转。 # 例子:integer = CDLHAMMER(open, high, low, close) resDF['CDLHAMMER'] = ta.CDLHAMMER(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLHANGINGMAN # 名称:Hanging Man 上吊线 # 简介:一日K线模式,形状与锤子类似,处于上升趋势的顶部,预示着趋势反转。 # 例子:integer = CDLHANGINGMAN(open, high, low, close) resDF['CDLHANGINGMAN'] = ta.CDLHANGINGMAN(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLHARAMI名称:Harami Pattern 母子线 # 简介:二日K线模式,分多头母子与空头母子,两者相反,以多头母子为例,在下跌趋势中,第一日K线长阴,第二日开盘价收盘价在第一日价格振幅之内,为阳线,预示趋势反转,股价上升。 # 例子:integer = CDLHARAMI(open, high, low, close) resDF['CDLHARAMI'] = ta.CDLHARAMI(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLHARAMICROSS名称:Harami Cross Pattern 十字孕线 # 简介:二日K线模式,与母子县类似,若第二日K线是十字线,便称为十字孕线,预示着趋势反转。 # 例子:integer = CDLHARAMICROSS(open, high, low, close) resDF['CDLHARAMICROSS'] = ta.CDLHARAMICROSS(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLHIGHWAVE # 名称:High-Wave Candle 风高浪大线 # 简介:三日K线模式,具有极长的上/下影线与短的实体,预示着趋势反转。 # 例子:integer = CDLHIGHWAVE(open, high, low, close) resDF['CDLHIGHWAVE'] = ta.CDLHIGHWAVE(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLHIKKAKE名称:Hikkake Pattern 陷阱 # 简介:三日K线模式,与母子类似,第二日价格在前一日实体范围内,第三日收盘价高于前两日,反转失败,趋势继续。 # 例子:integer = CDLHIKKAKE(open, high, low, close) resDF['CDLHIKKAKE'] = ta.CDLHIKKAKE(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLHIKKAKEMOD名称:Modified Hikkake Pattern 修正陷阱 # 简介:三日K线模式,与陷阱类似,上升趋势中,第三日跳空高开;下跌趋势中,第三日跳空低开,反转失败,趋势继续。 # 例子:integer = CDLHIKKAKEMOD(open, high, low, close) resDF['CDLHIKKAKEMOD'] = ta.CDLHIKKAKEMOD(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLHOMINGPIGEON名称:Homing Pigeon 家鸽 # 简介:二日K线模式,与母子线类似,不同的的是二日K线颜色相同,第二日最高价、最低价都在第一日实体之内,预示着趋势反转。 # 例子:integer = CDLHOMINGPIGEON(open, high, low, close) resDF['CDLHOMINGPIGEON'] = ta.CDLHOMINGPIGEON( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLIDENTICAL3CROWS名称:Identical Three Crows 三胞胎乌鸦 # 简介:三日K线模式,上涨趋势中,三日都为阴线,长度大致相等,每日开盘价等于前一日收盘价,收盘价接近当日最低价,预示价格下跌。 # 例子:integer = CDLIDENTICAL3CROWS(open, high, low, close) resDF['CDLIDENTICAL3CROWS'] = ta.CDLIDENTICAL3CROWS( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLINNECK名称:In-Neck Pattern 颈内线 # 简介:二日K线模式,下跌趋势中,第一日长阴线,第二日开盘价较低,收盘价略高于第一日收盘价,阳线,实体较短,预示着下跌继续。 # 例子:integer = CDLINNECK(open, high, low, close) resDF['CDLINNECK'] = ta.CDLINNECK(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLINVERTEDHAMMER名称:Inverted Hammer 倒锤头 # 简介:一日K线模式,上影线较长,长度为实体2倍以上,无下影线,在下跌趋势底部,预示着趋势反转。 # 例子:integer = CDLINVERTEDHAMMER(open, high, low, close) resDF['CDLINVERTEDHAMMER'] = ta.CDLINVERTEDHAMMER( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLKICKING # 名称:Kicking 反冲形态 # 简介:二日K线模式,与分离线类似,两日K线为秃线,颜色相反,存在跳空缺口。 # 例子:integer = CDLKICKING(open, high, low, close) resDF['CDLKICKING'] = ta.CDLKICKING(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLKICKINGBYLENGTH名称:Kicking - bull/bear determined by the longer marubozu 由较长缺影线决定的反冲形态 # 简介:二日K线模式,与反冲形态类似,较长缺影线决定价格的涨跌。 # 例子:integer = CDLKICKINGBYLENGTH(open, high, low, close) resDF['CDLKICKINGBYLENGTH'] = ta.CDLKICKINGBYLENGTH( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLLADDERBOTTOM名称:Ladder Bottom 梯底 # 简介:五日K线模式,下跌趋势中,前三日阴线,开盘价与收盘价皆低于前一日开盘、收盘价,第四日倒锤头,第五日开盘价高于前一日开盘价,阳线,收盘价高于前几日价格振幅,预示着底部反转。 # 例子:integer = CDLLADDERBOTTOM(open, high, low, close) resDF['CDLLADDERBOTTOM'] = ta.CDLLADDERBOTTOM( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLLONGLEGGEDDOJI名称:Long Legged Doji 长脚十字 # 简介:一日K线模式,开盘价与收盘价相同居当日价格中部,上下影线长,表达市场不确定性。 # 例子:integer = CDLLONGLEGGEDDOJI(open, high, low, close) resDF['CDLLONGLEGGEDDOJI'] = ta.CDLLONGLEGGEDDOJI( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLLONGLINE # 名称:Long Line Candle 长蜡烛 # 简介:一日K线模式,K线实体长,无上下影线。 # 例子:integer = CDLLONGLINE(open, high, low, close) resDF['CDLLONGLINE'] = ta.CDLLONGLINE(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLMARUBOZU # 名称:Marubozu 光头光脚/缺影线 # 简介:一日K线模式,上下两头都没有影线的实体,阴线预示着熊市持续或者牛市反转,阳线相反。 # 例子:integer = CDLMARUBOZU(open, high, low, close) resDF['CDLMARUBOZU'] = ta.CDLMARUBOZU(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLMATCHINGLOW名称:Matching Low 相同低价 # 简介:二日K线模式,下跌趋势中,第一日长阴线,第二日阴线,收盘价与前一日相同,预示底部确认,该价格为支撑位。 # 例子:integer = CDLMATCHINGLOW(open, high, low, close) resDF['CDLMATCHINGLOW'] = ta.CDLMATCHINGLOW(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLMATHOLD名称:Mat Hold 铺垫 # 简介:五日K线模式,上涨趋势中,第一日阳线,第二日跳空高开影线,第三、四日短实体影线,第五日阳线,收盘价高于前四日,预示趋势持续。 # 例子:integer = CDLMATHOLD(open, high, low, close, penetration=0) resDF['CDLMATHOLD'] = ta.CDLMATHOLD(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values, penetration=0) # 函数名:CDLMORNINGDOJISTAR名称:Morning Doji Star 十字晨星 # 简介:三日K线模式,基本模式为晨星,第二日K线为十字星,预示底部反转。 # 例子:integer = CDLMORNINGDOJISTAR(open, high, low, close, penetration=0) resDF['CDLMORNINGDOJISTAR'] = ta.CDLMORNINGDOJISTAR( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values, penetration=0) # 函数名:CDLMORNINGSTAR名称:Morning Star 晨星 # 简介:三日K线模式,下跌趋势,第一日阴线,第二日价格振幅较小,第三天阳线,预示底部反转。 # 例子:integer = CDLMORNINGSTAR(open, high, low, close, penetration=0) resDF['CDLMORNINGSTAR'] = ta.CDLMORNINGSTAR(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values, penetration=0) # 函数名:CDLONNECK名称:On-Neck Pattern 颈上线 # 简介:二日K线模式,下跌趋势中,第一日长阴线,第二日开盘价较低,收盘价与前一日最低价相同,阳线,实体较短,预示着延续下跌趋势。 # 例子:integer = CDLONNECK(open, high, low, close) resDF['CDLONNECK'] = ta.CDLONNECK(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLPIERCING名称:Piercing Pattern 刺透形态 # 简介:两日K线模式,下跌趋势中,第一日阴线,第二日收盘价低于前一日最低价,收盘价处在第一日实体上部,预示着底部反转。 # 例子:integer = CDLPIERCING(open, high, low, close) resDF['CDLPIERCING'] = ta.CDLPIERCING(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLRICKSHAWMAN名称:Rickshaw Man 黄包车夫 # 简介:一日K线模式,与长腿十字线类似,若实体正好处于价格振幅中点,称为黄包车夫。 # 例子:integer = CDLRICKSHAWMAN(open, high, low, close) resDF['CDLRICKSHAWMAN'] = ta.CDLRICKSHAWMAN(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLRISEFALL3METHODS名称:Rising/Falling Three Methods 上升/下降三法 # 简介: 五日K线模式,以上升三法为例,上涨趋势中,第一日长阳线,中间三日价格在第一日范围内小幅震荡,第五日长阳线,收盘价高于第一日收盘价,预示股价上升。 # 例子:integer = CDLRISEFALL3METHODS(open, high, low, close) resDF['CDLRISEFALL3METHODS'] = ta.CDLRISEFALL3METHODS( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLSEPARATINGLINES名称:Separating Lines 分离线 # 简介:二日K线模式,上涨趋势中,第一日阴线,第二日阳线,第二日开盘价与第一日相同且为最低价,预示着趋势继续。 # 例子:integer = CDLSEPARATINGLINES(open, high, low, close) resDF['CDLSEPARATINGLINES'] = ta.CDLSEPARATINGLINES( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLSHOOTINGSTAR名称:Shooting Star 射击之星 # 简介:一日K线模式,上影线至少为实体长度两倍,没有下影线,预示着股价下跌 # 例子:integer = CDLSHOOTINGSTAR(open, high, low, close) resDF['CDLSHOOTINGSTAR'] = ta.CDLSHOOTINGSTAR( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLSHORTLINE # 名称:Short Line Candle 短蜡烛 # 简介:一日K线模式,实体短,无上下影线。 # 例子:integer = CDLSHORTLINE(open, high, low, close) resDF['CDLSHORTLINE'] = ta.CDLSHORTLINE(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLSPINNINGTOP # 名称:Spinning Top 纺锤 # 简介:一日K线,实体小。 # 例子:integer = CDLSPINNINGTOP(open, high, low, close) resDF['CDLSPINNINGTOP'] = ta.CDLSPINNINGTOP(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLSTALLEDPATTERN名称:Stalled Pattern 停顿形态 # 简介:三日K线模式,上涨趋势中,第二日长阳线,第三日开盘于前一日收盘价附近,短阳线,预示着上涨结束。 # 例子:integer = CDLSTALLEDPATTERN(open, high, low, close) resDF['CDLSTALLEDPATTERN'] = ta.CDLSTALLEDPATTERN( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLSTICKSANDWICH名称:Stick Sandwich 条形三明治 # 简介:三日K线模式,第一日长阴线,第二日阳线,开盘价高于前一日收盘价,第三日开盘价高于前两日最高价,收盘价于第一日收盘价相同。 # 例子:integer = CDLSTICKSANDWICH(open, high, low, close) resDF['CDLSTICKSANDWICH'] = ta.CDLSTICKSANDWICH( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLTAKURI名称:Takuri (Dragonfly Doji with very long lower shadow) 探水竿 # 简介:一日K线模式,大致与蜻蜓十字相同,下影线长度长。 # 例子:integer = CDLTAKURI(open, high, low, close) resDF['CDLTAKURI'] = ta.CDLTAKURI(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLTASUKIGAP名称:Tasuki Gap 跳空并列阴阳线 # 简介:三日K线模式,分上涨和下跌,以上升为例,前两日阳线,第二日跳空,第三日阴线,收盘价于缺口中,上升趋势持续。 # 例子:integer = CDLTASUKIGAP(open, high, low, close) resDF['CDLTASUKIGAP'] = ta.CDLTASUKIGAP(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLTHRUSTING名称:Thrusting Pattern 插入 # 简介:二日K线模式,与颈上线类似,下跌趋势中,第一日长阴线,第二日开盘价跳空,收盘价略低于前一日实体中部,与颈上线相比实体较长,预示着趋势持续。 # 例子:integer = CDLTHRUSTING(open, high, low, close) resDF['CDLTHRUSTING'] = ta.CDLTHRUSTING(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLTRISTAR # 名称:Tristar Pattern 三星 # 简介:三日K线模式,由三个十字组成,第二日十字必须高于或者低于第一日和第三日,预示着反转。 # 例子:integer = CDLTRISTAR(open, high, low, close) resDF['CDLTRISTAR'] = ta.CDLTRISTAR(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLUNIQUE3RIVER名称:Unique 3 River 奇特三河床 # 简介:三日K线模式,下跌趋势中,第一日长阴线,第二日为锤头,最低价创新低,第三日开盘价低于第二日收盘价,收阳线,收盘价不高于第二日收盘价,预示着反转,第二日下影线越长可能性越大。 # 例子:integer = CDLUNIQUE3RIVER(open, high, low, close) resDF['CDLUNIQUE3RIVER'] = ta.CDLUNIQUE3RIVER( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLUPSIDEGAP2CROWS名称:Upside Gap Two Crows 向上跳空的两只乌鸦 # 简介:三日K线模式,第一日阳线,第二日跳空以高于第一日最高价开盘,收阴线,第三日开盘价高于第二日,收阴线,与第一日比仍有缺口。 # 例子:integer = CDLUPSIDEGAP2CROWS(open, high, low, close) resDF['CDLUPSIDEGAP2CROWS'] = ta.CDLUPSIDEGAP2CROWS( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) # 函数名:CDLXSIDEGAP3METHODS名称:Upside/Downside Gap Three Methods 上升/下降跳空三法 # 简介:五日K线模式,以上升跳空三法为例,上涨趋势中,第一日长阳线,第二日短阳线,第三日跳空阳线,第四日阴线,开盘价与收盘价于前两日实体内,第五日长阳线,收盘价高于第一日收盘价,预示股价上升。 # 例子:integer = CDLXSIDEGAP3METHODS(open, high, low, close) resDF['CDLXSIDEGAP3METHODS'] = ta.CDLXSIDEGAP3METHODS( df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values) resDF['CMO'] = ta.CMO(df['price'].values, timeperiod=14) resDF['CORREL'] = ta.CORREL(df['max_price'].values, df['min_price'].values, timeperiod=30) resDF['DEMA'] = ta.DEMA(df['price'].values, timeperiod=30) resDF['DX'] = ta.DX(df['max_price'].values, df['min_price'].values, df['price'].values, timeperiod=14) resDF['EMA'] = ta.EMA(df['price'].values, timeperiod=30) resDF['HT_DCPERIOD'] = ta.HT_DCPERIOD(df['price'].values) resDF['HT_DCPHASE'] = ta.HT_DCPHASE(df['price'].values) resDF['inphase'], resDF['quadrature'] = ta.HT_PHASOR(df['price'].values) resDF['sine'], resDF['leadsine'] = ta.HT_SINE(df['price'].values) resDF['HT_TRENDLINE'] = ta.HT_TRENDLINE(df['price'].values) resDF['HT_TRENDMODE'] = ta.HT_TRENDMODE(df['price'].values) resDF['KAMA'] = ta.KAMA(df['price'].values, timeperiod=30) resDF['LINEARREG'] = ta.LINEARREG(df['price'].values, timeperiod=14) resDF['LINEARREG_ANGLE'] = ta.LINEARREG_ANGLE(df['price'].values, timeperiod=14) resDF['LINEARREG_INTERCEPT'] = ta.LINEARREG_INTERCEPT(df['price'].values, timeperiod=14) resDF['LINEARREG_SLOPE'] = ta.LINEARREG_SLOPE(df['price'].values, timeperiod=14) resDF['MA'] = ta.MA(df['price'].values, timeperiod=30, matype=0) resDF['macd'], resDF['macdsignal'], resDF['macdhist'] = ta.MACD( df['price'].values, fastperiod=12, slowperiod=26, signalperiod=9) resDF['macd'], resDF['macdsignal'], resDF['macdhist'] = ta.MACDEXT( df['price'].values, fastperiod=12, fastmatype=0, slowperiod=26, slowmatype=0, signalperiod=9, signalmatype=0) resDF['macd'], resDF['macdsignal'], resDF['macdhist'] = ta.MACDFIX( df['price'].values, signalperiod=9) #resDF['mama'], resDF['fama'] = ta.MAMA (df['price'].values, fastlimit=0, slowlimit=0) resDF['MAX'] = ta.MAX(df['price'].values, timeperiod=30) resDF['MAXINDEX'] = ta.MAXINDEX(df['price'].values, timeperiod=30) resDF['MEDPRICE'] = ta.MEDPRICE(df['max_price'].values, df['min_price'].values) resDF['MFI'] = ta.MFI(df['price_today_open'].values, df['max_price'].values, df['min_price'].values, df['price'].values, timeperiod=14) resDF['MIDPOINT'] = ta.MIDPOINT(df['price'].values, timeperiod=14) resDF['MIDPRICE'] = ta.MIDPRICE(df['max_price'].values, df['min_price'].values, timeperiod=14) resDF['MIN'] = ta.MIN(df['price'].values, timeperiod=30) resDF['MININDEX'] = ta.MININDEX(df['price'].values, timeperiod=30) resDF['min'], resDF['max'] = ta.MINMAX(df['price'].values, timeperiod=30) resDF['minidx'], resDF['maxidx'] = ta.MINMAXINDEX(df['price'].values, timeperiod=30) resDF['MINUS_DI'] = ta.MINUS_DI(df['max_price'].values, df['min_price'].values, df['price'].values, timeperiod=14) resDF['MINUS_DM'] = ta.MINUS_DM(df['max_price'].values, df['min_price'].values, timeperiod=14) resDF['MOM'] = ta.MOM(df['max_price'].values, timeperiod=10) resDF['NATR'] = ta.NATR(df['max_price'].values, df['min_price'].values, df['price'].values, timeperiod=14) # 函数名:OBV 名称:On Balance Volume 能量潮 # 简介:Joe Granville提出,通过统计成交量变动的趋势推测股价趋势计算公式:以某日为基期,逐日累计每日上市股票总成交量,若隔日指数或股票上涨,则基期OBV加上本日成交量为本日OBV。隔日指数或股票下跌,则基期OBV减去本日成交量为本日OBV # 研判:1、以“N”字型为波动单位,一浪高于一浪称“上升潮”,下跌称“跌潮”;上升潮买进,跌潮卖出 # 2、须配合K线图走势 # 3、用多空比率净额法进行修正,但不知TA-Lib采用哪种方法 # 多空比率净额= [(收盘价-最低价)-(最高价-收盘价)] ÷( 最高价-最低价)×成交量 # 例子:real = OBV(close, volume) resDF['OBV'] = ta.OBV(df['price'].values, df['vol'].values) # resDF['PLUS_DI'] = ta.PLUS_DI # resDF['PLUS_DM'] = ta.PLUS_DM resDF['PPO'] = ta.PPO(df['price'].values, fastperiod=12, slowperiod=26, matype=0) resDF['ROC'] = ta.ROC(df['price'].values, timeperiod=10) resDF['ROCP'] = ta.ROCP(df['price'].values, timeperiod=10) resDF['ROCR'] = ta.ROCR(df['price'].values, timeperiod=10) resDF['ROCR100'] = ta.ROCR100(df['price'].values, timeperiod=10) resDF['RSI'] = ta.RSI(df['price'].values, timeperiod=14) resDF['SAR'] = ta.SAR(df['max_price'].values, df['min_price'].values, acceleration=0, maximum=0) resDF['SAREXT'] = ta.SAREXT(df['max_price'].values, df['min_price'].values, startvalue=0, offsetonreverse=0, accelerationinitlong=0, accelerationlong=0, accelerationmaxlong=0, accelerationinitshort=0, accelerationshort=0, accelerationmaxshort=0) resDF['SMA'] = ta.SMA(df['price'].values, timeperiod=30) resDF['STDDEV'] = ta.STDDEV(df['price'].values, timeperiod=5, nbdev=1) # resDF['STOCH'] = ta.STOCH # resDF['STOCHF'] = ta.STOCHF resDF['fastk'], resDF['fastd'] = ta.STOCHRSI(df['price'].values, timeperiod=14, fastk_period=5, fastd_period=3, fastd_matype=0) resDF['SUM'] = ta.SUM(df['price'].values, timeperiod=30) resDF['T3'] = ta.T3(df['price'].values, timeperiod=5, vfactor=0) resDF['TEMA'] = ta.TEMA(df['price'].values, timeperiod=30) resDF['TRANGE'] = ta.TRANGE(df['max_price'].values, df['min_price'].values, df['price'].values) resDF['TRIMA'] = ta.TRIMA(df['price'].values, timeperiod=30) resDF['TRIX'] = ta.TRIX(df['price'].values, timeperiod=30) resDF['TSF'] = ta.TSF(df['price'].values, timeperiod=14) resDF['TYPPRICE'] = ta.TYPPRICE(df['max_price'].values, df['min_price'].values, df['price'].values) # resDF['ULTOSC'] = ta.ULTOSC resDF['VAR'] = ta.VAR(df['price'].values, timeperiod=5, nbdev=1) resDF['WCLPRICE'] = ta.WCLPRICE(df['max_price'].values, df['min_price'].values, df['price'].values) # resDF['WILLR'] = ta.WILLR resDF['WMA'] = ta.WMA(df['price'].values, timeperiod=30) return resDF
def BETA(data, **kwargs): _check_talib_presence() popen, phigh, plow, pclose, pvolume = _extract_ohlc(data) return talib.BETA(phigh, plow, **kwargs)
def BETA(High, Low, timeperiod=5): real = pd.DataFrame() for i in High.columns: real[i] = ta.BETA(High[i], Low[i], timeperiod) return real
def add_technical_indicators_with_intervals(df, indicators=[], intervals=[], true_value=False, verbose=False): indicators_range = range(len(indicators)) if not verbose else tqdm( range(len(indicators))) for i in indicators_range: indicator = indicators[i] for interval in intervals: # 1 SMA if indicator == 'SMA': if not true_value: df["SMA_" + str(interval)] = df["Close"] - talib.SMA( df["Close"], timeperiod=interval) else: df["SMA_" + str(interval)] = talib.SMA(df["Close"], timeperiod=interval) # 2 KAMA if indicator == 'KAMA': if not true_value: df["KAMA_" + str(interval)] = df["Close"] - talib.KAMA( df["Close"], timeperiod=interval) else: df["KAMA_" + str(interval)] = talib.KAMA( df["Close"], timeperiod=interval) # 3 MIDPRICE if indicator == 'MIDPRICE': if not true_value: df["MIDPRICE_" + str(interval)] = df["Close"] - talib.MIDPRICE( df["High"], df["Low"], timeperiod=interval) else: df["MIDPRICE_" + str(interval)] = talib.MIDPRICE( df["High"], df["Low"], timeperiod=interval) # 4 MIDPOINT if indicator == 'MIDPOINT': if not true_value: df["MIDPOINT_" + str(interval)] = df["Close"] - talib.MIDPOINT( df["Close"], timeperiod=interval) else: df["MIDPOINT_" + str(interval)] = talib.MIDPOINT( df["Close"], timeperiod=interval) # 5 EMA if indicator == 'EMA': if not true_value: df["EMA_" + str(interval)] = df["Close"] - talib.EMA( df["Close"], timeperiod=interval) else: df["EMA_" + str(interval)] = talib.EMA(df["Close"], timeperiod=interval) # 6 DEMA if indicator == 'DEMA': if not true_value: df["DEMA_" + str(interval)] = df["Close"] - talib.DEMA( df["Close"], timeperiod=interval) else: df["DEMA_" + str(interval)] = talib.DEMA( df["Close"], timeperiod=interval) # 7 TEMA if indicator == 'TEMA': if not true_value: df["TEMA_" + str(interval)] = df["Close"] - talib.TEMA( df["Close"], timeperiod=interval) else: df["TEMA_" + str(interval)] = talib.TEMA( df["Close"], timeperiod=interval) # 8 TRIMA if indicator == 'TRIMA': if not true_value: df["TRIMA_" + str(interval)] = df["Close"] - talib.TRIMA( df["Close"], timeperiod=interval) else: df["TRIMA_" + str(interval)] = talib.TRIMA( df["Close"], timeperiod=interval) # 9 WMA if indicator == 'WMA': if not true_value: df["WMA_" + str(interval)] = df["Close"] - talib.WMA( df["Close"], timeperiod=interval) else: df["WMA_" + str(interval)] = talib.WMA(df["Close"], timeperiod=interval) # 10 LINEARREG if indicator == 'LINEARREG': if not true_value: df["LINEARREG_" + str(interval)] = df["Close"] - talib.LINEARREG( df["Close"], timeperiod=interval) else: df["LINEARREG_" + str(interval)] = talib.LINEARREG( df["Close"], timeperiod=interval) # 11 TSF if indicator == 'TSF': if not true_value: df["TSF_" + str(interval)] = df["Close"] - talib.TSF( df["Close"], timeperiod=interval) else: df["TSF_" + str(interval)] = talib.TSF(df["Close"], timeperiod=interval) # 12 SMAO if indicator == 'SMAO': if not true_value: df["SMAO_" + str(interval)] = df["Close"] - talib.SMA( df["Open"], timeperiod=interval) else: df["SMAO_" + str(interval)] = talib.SMA( df["Open"], timeperiod=interval) # 13 KAMAO if indicator == 'KAMAO': if not true_value: df["KAMAO_" + str(interval)] = df["Close"] - talib.KAMA( df["Open"], timeperiod=interval) else: df["KAMAO_" + str(interval)] = talib.KAMA( df["Open"], timeperiod=interval) # 14 MIDPOINTO if indicator == 'MIDPOINTO': if not true_value: df["MIDPOINTO_" + str(interval)] = df["Close"] - talib.MIDPOINT( df["Open"], timeperiod=interval) else: df["MIDPOINTO_" + str(interval)] = talib.MIDPOINT( df["Open"], timeperiod=interval) # 15 EMAO if indicator == 'EMAO': if not true_value: df["EMAO_" + str(interval)] = df["Close"] - talib.EMA( df["Open"], timeperiod=interval) else: df["EMAO_" + str(interval)] = talib.EMA( df["Open"], timeperiod=interval) # 16 DEMAO if indicator == 'DEMAO': if not true_value: df["DEMAO_" + str(interval)] = df["Close"] - talib.DEMA( df["Open"], timeperiod=interval) else: df["DEMAO_" + str(interval)] = talib.DEMA( df["Open"], timeperiod=interval) # 17 TEMAO if indicator == 'TEMAO': if not true_value: df["TEMAO_" + str(interval)] = df["Close"] - talib.TEMA( df["Open"], timeperiod=interval) else: df["TEMAO_" + str(interval)] = talib.TEMA( df["Open"], timeperiod=interval) # 18 TRIMAO if indicator == 'TRIMAO': if not true_value: df["TRIMAO_" + str(interval)] = df["Close"] - talib.TRIMA( df["Open"], timeperiod=interval) else: df["TRIMAO_" + str(interval)] = talib.TRIMA( df["Open"], timeperiod=interval) # 19 WMAO if indicator == 'WMAO': if not true_value: df["WMAO_" + str(interval)] = df["Close"] - talib.WMA( df["Open"], timeperiod=interval) else: df["WMAO_" + str(interval)] = talib.WMA( df["Open"], timeperiod=interval) # 20 LINEARREGO if indicator == 'LINEARREGO': if not true_value: df["LINEARREGO_" + str(interval)] = df["Close"] - talib.LINEARREG( df["Open"], timeperiod=interval) else: df["LINEARREGO_" + str(interval)] = talib.LINEARREG( df["Open"], timeperiod=interval) # 21 TSFO if indicator == 'TSFO': if not true_value: df["TSFO_" + str(interval)] = df["Close"] - talib.TSF( df["Open"], timeperiod=interval) else: df["TSFO_" + str(interval)] = talib.TSF( df["Open"], timeperiod=interval) # 22 MACD if indicator == 'MACD' or indicator == 'MACDhist': df["MACD_" + str(interval)], _, df["MACDhist_" + str(interval)] = talib.MACD( df["Close"], fastperiod=interval, slowperiod=interval * 2, signalperiod=int( interval * 1.5)) # 23 MACDFIX if indicator == 'MACDFIX': df["MACDFIX_" + str(interval)], _, _ = talib.MACDFIX( df["Close"], signalperiod=interval) # 24 MOM if indicator == 'MOM': df["MOM_" + str(interval)] = talib.MOM(df["Close"], timeperiod=interval) # 25 ROCP if indicator == 'ROCP': df["ROCP_" + str(interval)] = talib.ROCP(df["Close"], timeperiod=interval) # 26 APO if indicator == 'APO': df["APO_" + str(interval)] = talib.APO(df["Close"], fastperiod=interval, slowperiod=interval * 2) # 27 MINUS_DM if indicator == 'MINUS_DM': df["MINUS_DM_" + str(interval)] = talib.MINUS_DM( df["High"], df["Low"], timeperiod=interval) # 28 PLUS_DM if indicator == 'PLUS_DM': df["PLUS_DM_" + str(interval)] = talib.PLUS_DM( df["High"], df["Low"], timeperiod=interval) # 29 BETA if indicator == 'BETA': df["BETA_" + str(interval)] = talib.BETA( df["High"], df["Low"], timeperiod=interval) / 100.0 # 30 TRIX if indicator == 'TRIX': df["TRIX_" + str(interval)] = talib.TRIX(df["Close"], timeperiod=interval) # 31 ATR if indicator == 'ATR': df["ATR_" + str(interval)] = talib.ATR(df["High"], df["Low"], df["Close"], timeperiod=interval) # 32 PPO if indicator == 'PPO': df["PPO_" + str(interval)] = talib.PPO(df["Close"], fastperiod=interval, slowperiod=interval * 2) # 33 RSI if indicator == 'RSI': df["RSI_" + str(interval)] = talib.RSI( df["Close"], timeperiod=interval) / 100.0 # 34 RSIO if indicator == 'RSIO': df["RSIO_" + str(interval)] = talib.RSI( df["Open"], timeperiod=interval) / 100.0 # 35 LINEARREG_ANGLE if indicator == 'LINEARREG_ANGLE': df["LINEARREG_ANGLE_" + str(interval)] = talib.LINEARREG_ANGLE( df["Close"], timeperiod=interval) / 100.0 # 36 MINUS_DI if indicator == 'MINUS_DI': df["MINUS_DI_" + str(interval)] = talib.MINUS_DI( df["High"], df["Low"], df["Close"], timeperiod=interval) / 100.0 # 37 PLUS_DI if indicator == 'PLUS_DI': df["PLUS_DI_" + str(interval)] = talib.PLUS_DI( df["High"], df["Low"], df["Close"], timeperiod=interval) / 100.0 # 38 DX if indicator == 'DX': df["DX_" + str(interval)] = talib.DX( df["High"], df["Low"], df["Close"], timeperiod=interval) / 100.0 # 39 ADX if indicator == 'ADX': df["ADX_" + str(interval)] = talib.ADX( df["High"], df["Low"], df["Close"], timeperiod=interval) / 100.0 # 40 ADXO if indicator == 'ADXO': df["ADXO_" + str(interval)] = talib.ADX( df["High"], df["Low"], df["Open"], timeperiod=interval) / 100.0 # 41 ADXR if indicator == 'ADXR': df["ADXR_" + str(interval)] = talib.ADXR( df["High"], df["Low"], df["Close"], timeperiod=interval) / 100.0 # 42 CCI if indicator == 'CCI': df["CCI_" + str(interval)] = talib.CCI( df["High"], df["Low"], df["Close"], timeperiod=interval) / 100.0 # 42 CCIO if indicator == 'CCIO': df["CCIO_" + str(interval)] = talib.CCI( df["High"], df["Low"], df["Open"], timeperiod=interval) / 100.0 # 43 WILLR if indicator == 'WILLR': df["WILLR_" + str(interval)] = talib.WILLR( df["High"], df["Low"], df["Close"], timeperiod=interval) / 100.0 # 44 WILLRO if indicator == 'WILLRO': df["WILLRO_" + str(interval)] = talib.WILLR( df["High"], df["Low"], df["Open"], timeperiod=interval) / 100.0 # 45 CMO if indicator == 'CMO': df["CMO_" + str(interval)] = talib.CMO( df["Close"], timeperiod=interval) / 100.0 # 46 AROONOSC if indicator == 'AROONOSC': df["AROONOSC_" + str(interval)] = talib.AROONOSC( df["High"], df["Low"], timeperiod=interval) / 100.0 # 47 CORREL if indicator == 'CORREL': df["CORREL_" + str(interval)] = talib.CORREL( df["High"], df["Low"], timeperiod=interval) return df.dropna()
def show(args, klines, kline_column_names, display_count, disp_ic_keys): for index, value in enumerate(kline_column_names): if value == "high": highindex = index if value == "low": lowindex = index if value == "open": openindex = index if value == "close": closeindex = index if value == "volume": volumeindex = index if value == "open_time": opentimeindex = index klines_df = pd.DataFrame(klines, columns=kline_column_names) open_times = [ datetime.fromtimestamp((float(open_time) / 1000)) for open_time in klines_df["open_time"][-display_count:] ] close_times = [ datetime.fromtimestamp((float(close_time) / 1000)) for close_time in klines_df["close_time"][-display_count:] ] fig, axes = plt.subplots(len(disp_ic_keys) + 1, 1, sharex=True) fig.subplots_adjust(left=0.05, bottom=0.04, right=1, top=1, wspace=0, hspace=0) fig.suptitle(args.s + ' ' + args.i) quotes = [] for k in klines[-display_count:]: d = datetime.fromtimestamp(k[0] / 1000) quote = (dts.date2num(d), float(k[1]), float(k[4]), float(k[2]), float(k[3])) quotes.append(quote) i = -1 # kine i += 1 ax = axes[i] mpf.candlestick_ochl(axes[i], quotes, width=0.02, colorup='g', colordown='r') ax.set_ylabel('price') ax.grid(True) ax.autoscale_view() ax.xaxis_date() handle_overlap_studies(args, ax, klines_df, close_times, display_count) """ if args.EBANDS: # BANDS name = 'EBANDS' upperband, middleband, lowerband = tal.EBANDS(klines_df, timeperiod=26) ax.plot(close_times, middleband[-display_count:], "b--", label=name) ax.plot(close_times, upperband[-display_count:], 'y--', label=name+' upperband') ax.plot(close_times, lowerband[-display_count:], 'y--', label=name+' lowerband') """ ic_key = 'macd' if ic_key in disp_ic_keys: i += 1 ax = axes[i] ax.set_ylabel('macd') ax.grid(True) klines_df = ic.pd_macd(klines_df) difs = [round(a, 2) for a in klines_df["dif"]] deas = [round(a, 2) for a in klines_df["dea"]] macds = [round(a, 2) for a in klines_df["macd"]] ax.plot(close_times, difs[-display_count:], "y", label="dif") ax.plot(close_times, deas[-display_count:], "b", label="dea") ax.plot(close_times, macds[-display_count:], "r", drawstyle="steps", label="macd") ic_key = 'RSI' if ic_key in disp_ic_keys: i += 1 ax = axes[i] ax.set_ylabel(ic_key) ax.grid(True) rsis = talib.RSI(klines_df["close"], timeperiod=14) rsis = [round(a, 2) for a in rsis][-display_count:] ax.plot(close_times, rsis, "r", label=ic_key) ax.plot(close_times, [70] * len(rsis), '-', color='r') ax.plot(close_times, [30] * len(rsis), '-', color='r') """ rs2 = ic.py_rsis(klines, closeindex, period=14) rs2 = [round(a, 2) for a in rs2][-display_count:] axes[i].plot(close_times, rs2, "y", label="rsi2") """ """ fastk, fastd = talib.STOCHRSI(klines_df["close"], timeperiod=14) rsifks = [round(a, 2) for a in fastk][-display_count:] rsifds = [round(a, 2) for a in fastd][-display_count:] axes[i].plot(close_times, rsifks, "b", label="rsi") axes[i].plot(close_times, rsifds, "y", label="rsi") """ ic_key = 'KDJ' if ic_key in disp_ic_keys: i += 1 ax = axes[i] ax.set_ylabel(ic_key) ax.grid(True) """ ks, ds = talib.STOCH(klines_df["high"], klines_df["low"], klines_df["close"], fastk_period=9, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0) js = ks - ds """ ks, ds, js = ic.pd_kdj(klines_df) ks = [round(a, 2) for a in ks][-display_count:] ds = [round(a, 2) for a in ds][-display_count:] js = [round(a, 2) for a in js][-display_count:] ax.plot(close_times, ks, "b", label="K") ax.plot(close_times, ds, "y", label="D") ax.plot(close_times, js, "m", label="J") # Volume Indicator ic_key = 'AD' if ic_key in disp_ic_keys: real = talib.AD(klines_df["high"], klines_df["low"], klines_df["close"], klines_df["volume"]) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'ADOSC' if ic_key in disp_ic_keys: real = talib.ADOSC(klines_df["high"], klines_df["low"], klines_df["close"], klines_df["volume"], fastperiod=3, slowperiod=10) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'OBV' if ic_key in disp_ic_keys: real = talib.OBV(klines_df["close"], klines_df["volume"]) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") # Volatility Indicator ic_key = 'ATR' if ic_key in disp_ic_keys: real = talib.ATR(klines_df["high"], klines_df["low"], klines_df["close"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'NATR' if ic_key in disp_ic_keys: real = talib.NATR(klines_df["high"], klines_df["low"], klines_df["close"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'TRANGE' if ic_key in disp_ic_keys: real = talib.TRANGE(klines_df["high"], klines_df["low"], klines_df["close"]) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") # Price Transform ic_key = 'AVGPRICE' if ic_key in disp_ic_keys: real = talib.AVGPRICE(klines_df["open"], klines_df["high"], klines_df["low"], klines_df["close"]) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'MEDPRICE' if ic_key in disp_ic_keys: real = talib.MEDPRICE(klines_df["high"], klines_df["low"]) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'TYPPRICE' if ic_key in disp_ic_keys: real = talib.TYPPRICE(klines_df["high"], klines_df["low"], klines_df["close"]) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'WCLPRICE' if ic_key in disp_ic_keys: real = talib.WCLPRICE(klines_df["high"], klines_df["low"], klines_df["close"]) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") # Cycle Indicator ic_key = 'HT_DCPERIOD' if ic_key in disp_ic_keys: real = talib.HT_DCPERIOD(klines_df["close"]) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'HT_DCPHASE' if ic_key in disp_ic_keys: real = talib.HT_DCPHASE(klines_df["close"]) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'HT_PHASOR' if ic_key in disp_ic_keys: real = talib.HT_PHASOR(klines_df["close"]) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'HT_SINE' if ic_key in disp_ic_keys: real = talib.HT_SINE(klines_df["close"]) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'HT_TRENDMODE' if ic_key in disp_ic_keys: real = talib.HT_TRENDMODE(klines_df["close"]) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") # Statistic ic_key = 'BETA' if ic_key in disp_ic_keys: real = talib.BETA(klines_df["high"], klines_df["low"], timeperiod=5) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'CORREL' if ic_key in disp_ic_keys: real = talib.CORREL(klines_df["high"], klines_df["low"], timeperiod=30) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'LINEARREG' if ic_key in disp_ic_keys: real = talib.LINEARREG(klines_df["close"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'LINEARREG_ANGLE' if ic_key in disp_ic_keys: real = talib.LINEARREG_ANGLE(klines_df["close"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'LINEARREG_INTERCEPT' if ic_key in disp_ic_keys: real = talib.LINEARREG_INTERCEPT(klines_df["close"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'LINEARREG_SLOPE' if ic_key in disp_ic_keys: real = talib.LINEARREG_SLOPE(klines_df["close"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'STDDEV' # Standard Deviation if ic_key in disp_ic_keys: real = talib.STDDEV(klines_df["close"], timeperiod=5, nbdev=1) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'TSF' # Time Series Forecast if ic_key in disp_ic_keys: real = talib.TSF(klines_df["close"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'VAR' # Variance if ic_key in disp_ic_keys: real = talib.VAR(klines_df["close"], timeperiod=5, nbdev=1) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") # Momentum Indicator ic_key = 'DX' if ic_key in disp_ic_keys: dxs = talib.DX(klines_df["high"], klines_df["low"], klines_df["close"], timeperiod=14) adxs = talib.ADX(klines_df["high"], klines_df["low"], klines_df["close"], timeperiod=14) adxrs = talib.ADXR(klines_df["high"], klines_df["low"], klines_df["close"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, dxs[-display_count:], "r:") ts.ax(axes[i], ic_key, close_times, adxs[-display_count:], "y:") ts.ax(axes[i], ic_key, close_times, adxrs[-display_count:], "k:") ic_key = 'APO' if ic_key in disp_ic_keys: real = talib.APO(klines_df["close"], fastperiod=12, slowperiod=26, matype=0) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'AROON' if ic_key in disp_ic_keys: aroondown, aroonup = talib.AROON(klines_df["high"], klines_df["low"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key + ' DOWN', close_times, aroondown[-display_count:], "y:") ts.ax(axes[i], ic_key + ' UP', close_times, aroonup[-display_count:], "y:") ic_key = 'AROONOSC' if ic_key in disp_ic_keys: real = talib.AROONOSC(klines_df["high"], klines_df["low"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'BOP' if ic_key in disp_ic_keys: real = talib.BOP(klines_df["open"], klines_df["high"], klines_df["low"], klines_df["close"]) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'CCI' if ic_key in disp_ic_keys: real = talib.CCI(klines_df["high"], klines_df["low"], klines_df["close"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'CMO' if ic_key in disp_ic_keys: real = talib.CMO(klines_df["close"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'MACD' if ic_key in disp_ic_keys: macd, macdsignal, macdhist = talib.MACD(klines_df["close"], fastperiod=12, slowperiod=26, signalperiod=9) i += 1 ts.ax(axes[i], ic_key, close_times, macd[-display_count:], "y") ts.ax(axes[i], ic_key, close_times, macdsignal[-display_count:], "b") ts.ax(axes[i], ic_key, close_times, macdhist[-display_count:], "r", drawstyle="steps") ic_key = 'MACDEXT' if ic_key in disp_ic_keys: macd, macdsignal, macdhist = talib.MACDEXT(klines_df["close"], fastperiod=12, fastmatype=0, slowperiod=26, slowmatype=0, signalperiod=9, signalmatype=0) i += 1 ts.ax(axes[i], ic_key, close_times, macd[-display_count:], "y") ts.ax(axes[i], ic_key, close_times, macdsignal[-display_count:], "b") ts.ax(axes[i], ic_key, close_times, macdhist[-display_count:], "r", drawstyle="steps") ic_key = 'MACDFIX' if ic_key in disp_ic_keys: macd, macdsignal, macdhist = talib.MACDFIX(klines_df["close"], signalperiod=9) i += 1 ts.ax(axes[i], ic_key, close_times, macd[-display_count:], "y") ts.ax(axes[i], ic_key, close_times, macdsignal[-display_count:], "b") ts.ax(axes[i], ic_key, close_times, macdhist[-display_count:], "r", drawstyle="steps") ic_key = 'MFI' if ic_key in disp_ic_keys: real = talib.MFI(klines_df["high"], klines_df["low"], klines_df["close"], klines_df["volume"]) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'MINUS_DI' if ic_key in disp_ic_keys: real = talib.MINUS_DI(klines_df["high"], klines_df["low"], klines_df["close"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'MINUS_DM' if ic_key in disp_ic_keys: real = talib.MINUS_DM(klines_df["high"], klines_df["low"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'MOM' if ic_key in disp_ic_keys: real = talib.MOM(klines_df["close"], timeperiod=10) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'PLUS_DI' if ic_key in disp_ic_keys: real = talib.PLUS_DI(klines_df["high"], klines_df["low"], klines_df["close"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'PLUS_DM' if ic_key in disp_ic_keys: real = talib.PLUS_DM(klines_df["high"], klines_df["low"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'PPO' if ic_key in disp_ic_keys: real = talib.PPO(klines_df["close"], fastperiod=12, slowperiod=26, matype=0) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'ROC' if ic_key in disp_ic_keys: real1 = talib.ROC(klines_df["close"], timeperiod=10) real2 = talib.ROCP(klines_df["close"], timeperiod=10) real3 = talib.ROCR(klines_df["close"], timeperiod=10) real4 = talib.ROCR100(klines_df["close"], timeperiod=10) i += 1 ts.ax(axes[i], ic_key, close_times, real1[-display_count:], "y:") ts.ax(axes[i], ic_key, close_times, real2[-display_count:], "k:") ts.ax(axes[i], ic_key, close_times, real3[-display_count:], "m:") ts.ax(axes[i], ic_key, close_times, real4[-display_count:], "b:") ic_key = 'STOCH' if ic_key in disp_ic_keys: slowk, slowd = talib.STOCH(klines_df["high"], klines_df["low"], klines_df["close"], fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0) i += 1 slowj = 3 * slowk - 2 * slowd ts.ax(axes[i], ic_key, close_times, slowk[-display_count:], "b") ts.ax(axes[i], ic_key, close_times, slowd[-display_count:], "y") ts.ax(axes[i], ic_key, close_times, slowj[-display_count:], "m") ic_key = 'STOCHF' if ic_key in disp_ic_keys: fastk, fastd = talib.STOCHF(klines_df["high"], klines_df["low"], klines_df["close"], fastk_period=5, fastd_period=3, fastd_matype=0) i += 1 fastj = 3 * fastk - 2 * fastd ts.ax(axes[i], ic_key, close_times, fastk[-display_count:], "y:") ts.ax(axes[i], ic_key, close_times, fastd[-display_count:], "b:") ts.ax(axes[i], ic_key, close_times, fastj[-display_count:], "m") ic_key = 'STOCHRSI' if ic_key in disp_ic_keys: fastk, fastd = talib.STOCHRSI(klines_df["close"], timeperiod=14, fastk_period=5, fastd_period=3, fastd_matype=0) i += 1 ts.ax(axes[i], ic_key, close_times, fastk[-display_count:], "y:") ts.ax(axes[i], ic_key, close_times, fastd[-display_count:], "b:") ic_key = 'TRIX' if ic_key in disp_ic_keys: real = talib.TRIX(klines_df["close"], timeperiod=30) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'ULTOSC' if ic_key in disp_ic_keys: real = talib.ULTOSC(klines_df["high"], klines_df["low"], klines_df["close"], timeperiod1=7, timeperiod2=14, timeperiod3=28) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") ic_key = 'WILLR' if ic_key in disp_ic_keys: real = talib.WILLR(klines_df["high"], klines_df["low"], klines_df["close"], timeperiod=14) i += 1 ts.ax(axes[i], ic_key, close_times, real[-display_count:], "y:") plt.show()
def formX(data, indx, X): if (indx[0]): X[:, 0] = data[0, :] #open if (indx[1]): X[:, 1] = data[1, :] #high if (indx[2]): X[:, 2] = data[2, :] #low if (indx[3]): X[:, 3] = data[3, :] #close if (indx[4]): X[:, 4] = 0 #data[4,:]#adj close if (indx[5]): X[:, 5] = 0 #data[5,:]#volume if (indx[6]): X[:, 6] = talib.RSI(data[3, :], timeperiod=14) #buy with low RSI <20-30 if (indx[7]): X[:, 7] = talib.ROC(data[3, :], timeperiod=10) #better if increasing if (indx[8]): X[:, 8] = 0 #talib.OBV(data[4,:], data[5,:]) if (indx[9]): X[:, 9] = talib.BETA(data[1, :], data[2, :], timeperiod=5) if (indx[10]): X[:, 10] = talib.STDDEV(data[3, :], timeperiod=5, nbdev=1) if (indx[11]): X[:, 11] = talib.WILLR(data[1, :], data[2, :], data[3, :], timeperiod=40) if (indx[12] and indx[13]): X[:, 12], X[:, 13] = talib.STOCH(data[1, :], data[2, :], data[3, :], fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0) if (indx[14] and indx[15] and indx[16]): X[:, 14], X[:, 15], X[:, 16] = talib.MACD(data[3, :], fastperiod=12, slowperiod=26, signalperiod=10) if (indx[17]): #ROC of MACD for i in range(1, len(X)): X[i, 17] = X[i, 16] - X[i - 1, 16] if (indx[18]): X[:, 18] = talib.SMA(data[3, :], timeperiod=30) if (indx[19]): X[:, 19] = talib.SMA( data[3, :], timeperiod=60) #MAs mix with crossovers of price/other averages if (indx[20]): X[:, 20] = talib.SMA(data[3, :], timeperiod=100) if (indx[21]): X[:, 21] = talib.SMA(X[:, 11], timeperiod=30) if (indx[22]): #ROC of WILLR for i in range(1, len(X)): X[i, 22] = X[i, 21] - X[i - 1, 21] if (indx[23] and indx[24]): #check of ROC of WILLR for i in range(1, len(X)): if (X[i - 1, 22] < 0 and X[i, 22] > 0): X[i, 23] = 1 elif (X[i - 1, 22] > 0 and X[i, 22] < 0): X[i, 24] = 1 return X
def BETA(SeriesA, SeriesB, timeperiod=5): res = talib.BETA(SeriesA.values, SeriesB.values, timeperiod) return pd.Series(res, index=SeriesA.index)
def main(): # read csv file and transform it to datafeed (df): df = pd.read_csv(current_dir + "/" + base_dir + "/" + in_dir + "/" + in_dir + '_' + stock_symbol + '.csv') # set numpy datafeed from df: df_numpy = { 'Date': np.array(df['date']), 'Open': np.array(df['open'], dtype='float'), 'High': np.array(df['high'], dtype='float'), 'Low': np.array(df['low'], dtype='float'), 'Close': np.array(df['close'], dtype='float'), 'Volume': np.array(df['volume'], dtype='float') } date = df_numpy['Date'] openp = df_numpy['Open'] high = df_numpy['High'] low = df_numpy['Low'] close = df_numpy['Close'] volume = df_numpy['Volume'] ######################################### ########## Statistic Function ########### ######################################### #BETA - Beta of 5 beta = ta.BETA(high, low, timeperiod=5) #CORREL - Pearson's Correlation Coefficient (r) correl = ta.CORREL(high, low, timeperiod=30) #LINEARREG - Linear Regression linearreg = ta.LINEARREG(close, timeperiod=14) #LINEARREG_ANGLE - Linear Regression Angle linearreg_angle = ta.LINEARREG_ANGLE(close, timeperiod=14) #LINEARREG_INTERCEPT - Linear Regression Intercept linearreg_intercept = ta.LINEARREG_INTERCEPT(close, timeperiod=14) #LINEARREG_SLOPE - Linear Regression Slope linearreg_slope = ta.LINEARREG_SLOPE(close, timeperiod=14) #STDDEV - Standard Deviation stdev = ta.STDDEV(close, timeperiod=5, nbdev=1) #TSF - Time Series Forecast tsf = ta.TSF(close, timeperiod=14) #VAR - Variance var = ta.VAR(close, timeperiod=5, nbdev=1) df_save = pd.DataFrame( data={ 'date': np.array(df['date']), 'beta': beta, 'correl': correl, 'linearreg': linearreg, 'linearreg': linearreg_angle, 'linearreg_intercept': linearreg_intercept, 'linearreg_slope': linearreg_slope, 'stdev': stdev, 'tsf': tsf, 'var': var }) df_save.to_csv(current_dir + "/" + base_dir + "/" + out_dir + '/' + stock_symbol + "/" + out_dir + '_ta_statistic_functions_' + stock_symbol + '.csv', index=False)