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
Exemple #3
0
 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)
Exemple #4
0
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
Exemple #6
0
 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)
Exemple #7
0
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
Exemple #8
0
    #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)