コード例 #1
0
 def add_indicators(self):
     #self.add_ema(9)
     #self.add_ema(21)
     #self.strategy = strategies.CustomStrategy(self.df['close'], self.df['ema9'], self.df['ema21'])
     #return self.strategy
     self.rsi = indicators.RSI(self.df['close'], 9)
     self.macd = indicators.MACD(self.df['close'], 12, 26, 9)
コード例 #2
0
def inputs(company, begin="2000-01-03", end=datetime.date.today()):
    df = dataframe.get_data([company])
    boll = indicators.bollinger_differential(company)
    rsi = indicators.RSI(company)
    oscillator = indicators.stochastic_oscillator(company)
    input_set = df.join(boll.join(rsi))
    return input_set[20:]
コード例 #3
0
 def test_RSI(self):
     rsi = pd.read_csv('tests/data/BTCUSDT_15m_RSI9.csv',
                       index_col='time',
                       parse_dates=True)
     myrsi = indicators.RSI(self.ohlc.close, period=9)
     isclose = np.isclose(rsi.rsi.iloc[100:],
                          myrsi.df.rsi.iloc[100:],
                          equal_nan=True)
     # consider first 100 values as warmup
     self.assertTrue(np.all(isclose))
コード例 #4
0
def drawRSI(ax, data, periods=[6, 12, 24], hlines=[20, 50, 80]):
    for period in periods:
        if data.__contains__('rsi%d' % period):
            rsi = data['rsi%d' % period]
        elif data.__contains__('rsi'):
            rsi = data['rsi']
        else:
            price = data['close']
            rsi = ind.RSI(price, time_period=period)
        ax.plot(rsi, label='rsi%d' % period)
    drawHline(ax, hlines)
    ax.set_ylabel('RSI')
コード例 #5
0
    def test_RSI(self):
        rsi = indicators.RSI(self.ohlc.close, period=9)
        strategy = strategies.RSIStrategy(self.ohlc, rsi)

        result = strategy.backtest(self.ohlc.close)

        self.assertEqual(result.start, datetime(2020, 1, 8, 1, 30, 0))
        self.assertEqual(result.end, datetime(2020, 1, 18, 11, 15, 0))
        self.assertEqual(result.trades, 11)
        self.assertTrue(math.isclose(result.netret, 12.81, rel_tol=1e-02))
        self.assertTrue(math.isclose(result.sharpe, 0.1164, rel_tol=1e-03))
        self.assertTrue(math.isclose(result.maxdrawdown, -4.0, rel_tol=1e-02))
        self.assertEqual(result.maxdrawdownduration, 174)
コード例 #6
0
    def test_RSI_MACD(self):
        rsi = indicators.RSI(self.ohlc.close, period=9)
        macd = indicators.MACD(self.ohlc.close, 12, 26, 9)
        strategy = strategies.RSIMACDStrategy(self.ohlc, rsi, macd)

        result = strategy.backtest(self.ohlc.close)

        self.assertEqual(result.start, datetime(2020, 1, 8, 1, 30, 0))
        self.assertEqual(result.end, datetime(2020, 1, 18, 11, 15, 0))
        self.assertEqual(result.trades, 41)
        self.assertTrue(math.isclose(result.netret, 26.06, rel_tol=1e-02))
        self.assertTrue(math.isclose(result.sharpe, 0.1297, rel_tol=1e-03))
        self.assertTrue(math.isclose(result.maxdrawdown, -2.85, rel_tol=1e-02))
        self.assertEqual(result.maxdrawdownduration, 82)
コード例 #7
0
 def _indicators(self):
     """ This will calculate our technical indicators based on the
     parameters in our ti dict ... this can be ran in one bang OR
     iteratively. It goes directly to the indicator structs. Not pretty,
     but what the f**k.
 """
     # TODO: update this if we ever want to add multiple OHLC frames
     for time_str in self.ohlc:
         for indicator in self.ti:
             if indicator == "RSI":
                 self.ti[indicator]["data"] = ind.RSI(
                     self.ohlc[time_str], self.ti[indicator]["n"])
             elif indicator == "ROC":
                 self.ti[indicator]["data"] = ind.ROC(
                     self.ohlc[time_str], self.ti[indicator]["n"])
             elif indicator == "AMA":
                 self.ti[indicator]["data"] = ind.AMA(
                     self.ohlc[time_str].close, self.ti[indicator]["n"],
                     self.ti[indicator]["fn"], self.ti[indicator]["sn"])
             elif indicator == "CCI":
                 self.ti[indicator]["data"] = ind.CCI(
                     self.ohlc[time_str], self.ti[indicator]["n"])
             elif indicator == "FRAMA":
                 self.ti[indicator]["data"] = ind.FRAMA(
                     self.ohlc[time_str], self.ti[indicator]["n"])
             elif indicator == "RVI2":
                 self.ti[indicator]["data"] = ind.RVI2(
                     self.ohlc[time_str], self.ti[indicator]["n"],
                     self.ti[indicator]["s"])
             elif indicator == "MACD":
                 self.ti[indicator]["data"] = ind.MACD(
                     self.ohlc[time_str], self.ti[indicator]["f"],
                     self.ti[indicator]["s"], self.ti[indicator]["m"])
             elif indicator == "ADX":
                 self.ti[indicator]["data"] = ind.ADX(
                     self.ohlc[time_str], self.ti[indicator]["n"])
             elif indicator == "ELI":
                 self.ti[indicator]["data"] = ind.ELI(
                     self.ohlc[time_str], self.ti[indicator]["n"])
             elif indicator == "TMI":
                 self.ti[indicator]["data"] = ind.TMI(
                     self.ohlc[time_str], self.ti[indicator]["nb"],
                     self.ti[indicator]["nf"])
コード例 #8
0
ファイル: analyse.py プロジェクト: quantXTZ/binance-algotrade
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("file")
    parser.add_argument("--sma", type=int, nargs='+', help='Adds SMA to the price graph')
    parser.add_argument("--ema", type=int, nargs='+', help='Adds EMA to the price graph')
    parser.add_argument("--rsi", type=int, help='Adds RSI in a subplot')
    parser.add_argument("--macd", type=int, nargs=3, help='Adds MACD in a subplot')
    parser.add_argument("--bbands", type=int, nargs=2, help='Adds Bollinger Bands to the price graph')
    parser.add_argument("--strategy", type=int, nargs='+', help='Adds a strategy, 1 : EMA Cross')
    args = parser.parse_args()

    ohlc = pd.read_csv(args.file, index_col='time', parse_dates=True)
    close = ohlc['close']

    # calculates the number of sublots
    rows = 1
    if args.rsi != None:
        rows += 1
    if args.macd != None:
        rows += 1

    fig = make_subplots(rows=rows, cols=1, shared_xaxes=True)

    # plots close bar graph with averages
    row = 1
    fig.add_trace(go.Scatter(x=ohlc.index, y=close, name="Close"), row=row, col=1)
    if args.ema != None:
        for period in args.ema:
            ema = indicators.EMA(close, period)
            fig.add_trace(go.Scatter(x=ohlc.index, y=ema.df['ema{}'.format(period)], name="EMA {}".format(period)), row=row, col=1)
    if args.sma != None:
        for period in args.sma:
            sma = indicators.SMA(close, period)
            fig.add_trace(go.Scatter(x=ohlc.index, y=sma.df['sma{}'.format(period)], name="SMA {}".format(period)), row=row, col=1)

    # plots Bollinger Bands
    if args.bbands != None:
        bbands = indicators.BollingerBands(close, args.bbands[0])
        fig.add_trace(go.Scatter(x=ohlc.index, y=bbands.df.ma), row=row, col=1)
        fig.add_trace(go.Scatter(x=ohlc.index, y=bbands.df.upper), row=row, col=1)
        fig.add_trace(go.Scatter(x=ohlc.index, y=bbands.df.lower), row=row, col=1)
        row += 1

    row += 1

    # plots RSI
    if args.rsi != None:
        rsi = indicators.RSI(close, args.rsi)
        fig.add_trace(go.Scatter(x=ohlc.index, y=rsi.df.rsi, name="RSI {}".format(args.rsi)), row=row, col=1)
        row += 1

    # plots MACD
    if args.macd != None:
        macd = indicators.MACD(close, args.macd[0], args.macd[1], args.macd[2])
        fig.add_trace(go.Scatter(x=ohlc.index, y=macd.df.MACD, name="MACD {} {} {}".format(args.macd[0], args.macd[1], args.macd[2])), row=row, col=1)
        fig.add_trace(go.Scatter(x=ohlc.index, y=macd.df.signal, name="MACD Signal"), row=row, col=1)
        row += 1

    # plots strategy
    if args.strategy != None:
        if args.strategy[0] == 1:

            fast_ema = indicators.EMA(ohlc.close, period=args.strategy[1])
            slow_ema = indicators.EMA(ohlc.close, period=args.strategy[2])

            strategy = strategies.AvgCrossStrategy(ohlc.close, fast_ema.data(), slow_ema.data())

            fig.add_trace(go.Scatter(x=close.loc[strategy.signals['positions'] == 1.0].index, y=close.loc[strategy.signals['positions'] == 1.0],
            mode='markers', marker=dict(size=12, symbol='triangle-up', color='green'),  name="Buy"), row=1, col=1)

            fig.add_trace(go.Scatter(x=close.loc[strategy.signals['positions'] == -1.0].index, y=close.loc[strategy.signals['positions'] == -1.0],
            mode='markers', marker=dict(size=12, symbol='triangle-down', color='red'),  name="Sell"), row=1, col=1)

        elif args.strategy[0] == 2:

            macd = indicators.MACD(ohlc.close, args.strategy[1], args.strategy[2], args.strategy[3])

            strategy = strategies.MACDStrategy(ohlc.close, macd)

            fig.add_trace(go.Scatter(x=close.loc[strategy.signals['positions'] == 1.0].index, y=close.loc[strategy.signals['positions'] == 1.0],
            mode='markers', marker=dict(size=12, symbol='triangle-up', color='green'),  name="Buy"), row=1, col=1)

            fig.add_trace(go.Scatter(x=close.loc[strategy.signals['positions'] == -1.0].index, y=close.loc[strategy.signals['positions'] == -1.0],
            mode='markers', marker=dict(size=12, symbol='triangle-down', color='red'),  name="Sell"), row=1, col=1)

        elif args.strategy[0] == 3:

            bb1 = indicators.BollingerBands(ohlc.close, 20, 1)
            bb2 = indicators.BollingerBands(ohlc.close, 20, 2)
            strategy = strategies.DBBStrategy(ohlc.close, bb1, bb2)

            fig.add_trace(go.Scatter(x=close.loc[strategy.signals['positions'] == 1.0].index, y=close.loc[strategy.signals['positions'] == 1.0],
            mode='markers', marker=dict(size=12, symbol='triangle-up', color='green'),  name="Buy"), row=1, col=1)

            fig.add_trace(go.Scatter(x=close.loc[strategy.signals['positions'] == -1.0].index, y=close.loc[strategy.signals['positions'] == -1.0],
            mode='markers', marker=dict(size=12, symbol='triangle-down', color='red'),  name="Sell"), row=1, col=1)

        elif args.strategy[0] == 4:

            rsi = indicators.RSI(ohlc.close, 9)
            macd = indicators.MACD(ohlc.close, 12, 26, 9)
            strategy = strategies.RSIMACDStrategy(ohlc.close, rsi, macd)

            fig.add_trace(go.Scatter(x=close.loc[strategy.signals['positions'] == 1.0].index, y=close.loc[strategy.signals['positions'] == 1.0],
            mode='markers', marker=dict(size=12, symbol='triangle-up', color='green'),  name="Buy"), row=1, col=1)

            fig.add_trace(go.Scatter(x=close.loc[strategy.signals['positions'] == -1.0].index, y=close.loc[strategy.signals['positions'] == -1.0],
            mode='markers', marker=dict(size=12, symbol='triangle-down', color='red'),  name="Sell"), row=1, col=1)

    fig.show()
コード例 #9
0
# ATR Channels:
ATRChannels26 = ind.ATRChannels(window_length=26, time_frame=time_frame)
print('Fitting ATR Channels...')
ATRChannels26.batch_fit(candles)

# Bollinger band:
print('Fitting Bollinger Bands...')
BB20 = ind.BollingerBand(window_length=80,
                         time_frame=time_frame,
                         tp_style='hlc3')
BB20.batch_fit(candles)

# RSI:
print('Fitting RSI...')
RSI = ind.RSI(window_length=14, time_frame=time_frame)
RSI.batch_fit(candles)

# Stochastic RSI:
print('Fitting Stochastic RSI...')
SRSI = ind.StochasticRSI(stoch_length=14, time_frame=time_frame)
SRSI.batch_fit(candles)

# MACD:
print('Fitting MACD...')
MACD = ind.MACD(12, 26, 9, time_frame, 'close')
MACD.batch_fit(candles)
""" Making plots using Plotly """
print('\nPlotting...')
fig = make_subplots(
    rows=5,
コード例 #10
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("file")
    args = parser.parse_args()

    df = pd.read_csv(args.file, index_col='time', parse_dates=True)

    #close = df.loc['20191225':,['close']].astype('float64')
    close = df

    print("Buy And Hold Strategy :")
    strat1 = strategies.BuyAndHoldStrategy(close, 0.001)
    res = strat1.backtest(close['close'])
    print(res)
    print(flush=True)

    add_ema(close, 12)
    add_ema(close, 26)

    macd = indicators.MACD(close['close'], 12, 26, 9)
    rsi = indicators.RSI(close['close'], 9)
    bb1 = indicators.BollingerBands(close['close'], 20, 1)
    bb2 = indicators.BollingerBands(close['close'], 20, 2)

    print("MACD Strategy :")
    strat3 = strategies.MACDStrategy(close, macd, 0.001)
    res = strat3.backtest(close['close'])
    print(res)
    print(flush=True)

    print("RSI Strategy :")
    strat4 = strategies.RSIStrategy(close, rsi, 0.001)
    res = strat4.backtest(close['close'])
    print(res)
    print(flush=True)

    print("Double Bollinger Bands Strategy :")
    strat5 = strategies.DBBStrategy(close['close'], bb1, bb2)
    res = strat5.backtest(close['close'])
    print(res)
    print(flush=True)

    print("Custom RSI + MACD Strategy :")
    strat2 = strategies.RSIMACDStrategy(close, rsi, macd, 0.001)
    res = strat2.backtest(close['close'])
    print(res)

    fig, (ax1, ax2, ax3, ax4) = plt.subplots(4, sharex=True)
    fig.suptitle(args.file)
    ax1.plot(close['close'])
    ax1.plot(close['ema12'], label='EMA12')
    ax1.plot(close['ema26'], label='EMA26')
    ax1.plot(close['close'].loc[strat2.signals['positions'] == 1.0].index,
             close['close'].loc[strat2.signals['positions'] == 1.0],
             '^',
             markersize=10,
             color='g')
    ax1.plot(close['close'].loc[strat2.signals['positions'] == -1.0].index,
             close['close'].loc[strat2.signals['positions'] == -1.0],
             'v',
             markersize=10,
             color='r')
    ax1.legend()
    macd, macd_signal = macd.data()
    ax2.plot(macd, label='MACD 12 26 9')
    ax2.plot(macd_signal)
    #ax3.plot(strat1.signals['equity'])
    ax3.plot(rsi.data(), label='RSI 9')
    ax4.plot(strat2.signals['equity'])
    plt.show()
コード例 #11
0
        print('')
        print('Period with best Neig_SQN: %i' %
              self.eventsRelevantData['Period with best Neig_SQN'])
        print('SQN of period with best Neig_SQN: %0.3f' %
              self.eventsRelevantData['Best Neig_SQN'])
        print('Sharpe of period with best Neig_SQN: %0.3f' %
              self.eventsRelevantData['Sharpe of period with best Neig_SQN'])
        print('RSQN of period with best Neig_SQN: %0.3f' %
              self.eventsRelevantData['RSQN of period with best Neig_SQN'])
        print('Mean of period with best Neig_SQN: %0.3f' %
              self.eventsRelevantData['Mean of period with best Neig_SQN'])
        print('')
        #print('Commission costs')
        print('Order type: %s' % self.orderType)
        print('')

if __name__ == "__main__":
    """
    """
    import indicators
    import datetime as dt

    endDate = dt.date(2016, 12, 31)
    startDate = endDate - dt.timedelta(365 * 5)

    RSI = indicators.RSI('EURCAD', 'H4', startDate=startDate, endDate=endDate)
    RSI.break_level(70)

    s = StrategyCreator('EURCAD', 'H4', indicatorsList=[RSI], commission=20)
    s.generate_optimized_event_study(occurrenceNumber=1, lookback=20)
コード例 #12
0
ファイル: main.py プロジェクト: wesley1001/pyIndicators
import database_tools as dt
import indicators
import datetime

print "standard_deviation " + str(
    indicators.standard_deviation("TXT", datetime.datetime.today(), 10))

print "simple_moving_average " + str(
    indicators.SMA("TXT", datetime.datetime.today(), 10))

print "volatility " + str(
    indicators.volatility("TXT", datetime.datetime.today(), 10))

print "WilliamsR " + str(
    indicators.willamsR("TXT", datetime.datetime.today(), 10))

print "RSI " + str(indicators.RSI("TXT", datetime.datetime.today(), 10))

print "average_true_range " + str(
    indicators.ATR("TXT", datetime.datetime.today(), 10))

print "EMA " + str(indicators.EMA("TXT", datetime.datetime.today(), 10))

print "bollinger_bands_customized " + str(
    indicators.bollinger_bands_customized("TXT", datetime.datetime.today(),
                                          10))
コード例 #13
0
    
    strat = Strategy('EURUSD', 'M15', 'BUY', commission = 15, swap=(-5,-9),
                     indicatorsList = [sma, rsi])
    strat.generate_optimized_event_study(eventwindow=(-100, 500), 
                                         commission = True, swap=True)
    #strat.plot_all_events(showExamples = 50, commission=True)
    print(strat.signalsSpan)
    print('')
    print(strat.eventsRelevantData)
    print('')
    print(strat.orderType)
    print('')
    print(strat.eventsNum)    
"""

indicator = indicators.RSI('EURUSD', 'H1', 14, forceCalculation=False)
indicator.filter_indicator(70, method='above')

#    strategy = Strategy('EURUSD', 'H1', 'BUY', commission = 15, swap=(-5,-9),
#                     indicatorsList = [indicator])
#    strategy.generate_optimized_event_study(eventwindow=(-100, 500),
#                                         commission = True, swap=True,
#                                         plot=True)
#    optimization[v] = strategy
#
#for k in np.sort(optimization.keys()):
#    optimization[k].plot_all_events(commission=True)
#    print(optimization[k].eventsRelevantData)
#    print(optimization[k].orderType)
#    print(optimization[k].signalsSpan)
"""