def get_state(self, t): """ return the state (define state here) given time t """ # time feature d = t - self.window_size if d <= 0: state = np.zeros((5, 5)) else: feature1 = volume.acc_dist_index( high=self.OHLCV_df[d - 1:t]["High"], low=self.OHLCV_df[d - 1:t]["Low"], close=self.OHLCV_df[d - 1:t]["Adj Close"], volume=self.OHLCV_df[d - 1:t]['Volume']) feature2 = volatility.average_true_range( high=self.OHLCV_df[d - 1:t]["High"], low=self.OHLCV_df[d - 1:t]["Low"], close=self.OHLCV_df[d - 1:t]["Adj Close"]) feature3 = trend.macd(close=self.OHLCV_df[d - 1:t]["Adj Close"], n_slow=self.window_size, n_fast=self.window_size // 2, fillna=True) feature4 = momentum.rsi(close=self.OHLCV_df[d - 1:t]["Adj Close"]) feature5 = others.daily_return( close=self.OHLCV_df[d - 1:t]["Adj Close"]) state = pd.concat( [feature1, feature2, feature3, feature4, feature5], axis=1).values[-5:, :] # block = self.timeseries[d-1:t] # state = np.diff(np.log(block)) state = state.flatten() state = np.append(state, (self.inventory, self.cash)) return state
def ATR(df0): df = df0 df['atr'] = average_true_range(df['high'], df['low'], df['low'], 14, fillna=False) return df
def test_atr(self): target = 'ATR' result = average_true_range(high=self._df['High'], low=self._df['Low'], close=self._df['Close'], n=14, fillna=False) pd.testing.assert_series_equal(self._df[target].tail(), result.tail(), check_names=False)
def calculate_Volitality_Indicators(): JSON_sent = request.get_json() df = pd.DataFrame(JSON_sent[0]) _, atr, bbsma, bbupper, bblower, keltnerC = JSON_sent # Average True Range if atr['displayATR']: indicator_ATR = average_true_range(high=df['high'], low=df['low'], close=df['close'], n=atr['nForATR']) df['atr'] = indicator_ATR # # Bollinger Band SMA if bbsma['displayBBSMA']: indicator_BBSMA = bollinger_mavg(close=df['close'], n=bbsma['nForBBSMA']) df['bbsma'] = indicator_BBSMA # # Bollinger Band Upper if bbupper['displayBBUpper']: indicator_BBUpper = bollinger_hband(close=df['close'], n=bbupper['nForBBUpper'], ndev=bbupper['ndevBBUpper']) df['BBupper'] = indicator_BBUpper # # Bollinger Band Lower if bblower['displayBBLower']: indicator_BBLower = bollinger_lband(close=df['close'], n=bblower['nForBBLower'], ndev=bblower['ndevBBLower']) df['BBlower'] = indicator_BBLower # # Keltner Channel Central if keltnerC['displayKeltnerC']: indicator_keltnerC = keltner_channel_mband(high=df['high'], low=df['low'], close=df['close'], n=keltnerC['nForKeltnerC']) df['keltnerC'] = indicator_keltnerC df.fillna(0, inplace=True) return (json.dumps(df.to_dict('records')))
def _calculate_keltner_bands(self, data: pd.DataFrame, period: int, multiplier) -> tuple: ema = self._calculate_ema(data, period) data = data.swaplevel(0, 1, 1) atr = (data.groupby( level=0, axis=1).apply(lambda stock_data: volatility.average_true_range( stock_data.xs("High", level=1, axis=1).squeeze(), stock_data.xs("Low", level=1, axis=1).squeeze(), stock_data.xs("Adj Close", level=1, axis=1).squeeze(), n=period, )).iloc[-1]) upper_band = ema + multiplier * atr lower_band = ema - multiplier * atr return upper_band, lower_band
def test_atr2(self): target = 'ATR' result = average_true_range(**self._params) pd.testing.assert_series_equal(self._df[target].tail(), result.tail(), check_names=False)
def RiskRange(Price_Data, window=10, length=63, volume_weighted=True, vol_window=10, mindiff=100000000.0, maxdiff=-100000000.0): """ Function to Calculate Risk Ranges """ Windowminus1 = window - 1 Close = (Price_Data[['Close']]).dropna() High = (Price_Data[['High']]).dropna() Low = (Price_Data[['Low']]).dropna() Volume = (Price_Data[['Volume']]).dropna() Slope = (Close.apply(func=lambda x: x - (x.shift(Windowminus1))) / (Windowminus1)).dropna() for i in range(0, Windowminus1): Min = np.minimum( mindiff, Close.apply(func=lambda x: x.shift(Windowminus1 - i) - (x.shift(Windowminus1) + (Slope['Close'] * i)), axis=0)) for i in range(0, Windowminus1): Max = np.maximum( maxdiff, Close.apply(func=lambda x: x.shift(Windowminus1 - i) - (x.shift(Windowminus1) + (Slope['Close'] * i)), axis=0)) BridgeBottom = (Close + Min).dropna() BridgeTop = (Close + Max).dropna() ATR = average_true_range(High['High'], Low['Low'], Close['Close'], window=window).dropna() Hurst = ((np.log( pd.DataFrame.rolling(High['High'], window=window).max() - pd.DataFrame.rolling(Low['Low'], window=window).min()) - np.log(ATR)) / (np.log(window))) Hurst_New = pd.DataFrame(Hurst.values, index=Hurst.index).rename(columns={0: 'Hurst'}) SD = (Close['Close']).rolling(vol_window).std() if volume_weighted == True: WMA = vwma(Close['Close'], Volume['Volume'], length=vol_window) elif volume_weighted == False: WMA = wma(Close['Close'], length=vol_window) BBBottom = (WMA - (SD * 2)).dropna() BBTop = (WMA + (SD * 2)).dropna() Final_Bottom = BBBottom + ((BridgeBottom['Close'] - BBBottom) * np.abs((Hurst_New['Hurst'] * 2) - 1)) Final_Top = BBTop + ( (BridgeTop['Close'] - BBTop) * np.abs((Hurst_New['Hurst'] * 2) - 1)) Final_Mid = Final_Bottom + ((Final_Top - Final_Bottom) / 2) Trend = ((pd.DataFrame.rolling(Low['Low'], window=length).min()) + ((pd.DataFrame.rolling(High['High'], window=length).max() - pd.DataFrame.rolling(Low['Low'], window=length).min()) / 2)) Output = pd.DataFrame(Final_Bottom).rename(columns={0: 'Bottom RR'}) Output['Top RR'] = Final_Top Output['Mid RR'] = Final_Mid Output['Trend'] = Trend Output['Price'] = Close Output = Output.dropna() return Output
#jstring1 = '2018-09-27' for entry in js: if entry == jstring: i = js[jstring].keys() for jkeys in i: if jkeys == '2018-09-27': return((jkeys, symbol, js[jstring][jkeys]['1. open'], js[jstring][jkeys]['2. high'], js[jstring][jkeys]['3. low'], js[jstring][jkeys]['4. close'], js[jstring][jkeys]['5. volume'])) return 'api limit' for items in symbols: stock_values.append((get_daily_data(items))) stock_df = pd.DataFrame(stock_values) stock_df = stock_df[[1,3,4,5]][0:4] vol.average_true_range(stock_df[3].astype(float), stock_df[4].astype(float), stock_df[5].astype(float), n=1, fillna=False) class TimeSeries(av): def get_batch_stock_quotes(self, symbols): _FUNCTION_KEY = "BATCH_STOCK_QUOTES" return _FUNCTION_KEY, 'Stock Quotes', 'Meta Data' ts.get_batch_stock_quotes(symbols)