Example #1
0
    def test_trading_with_Machine_Learning(self):
        test_funcs = BacktestingTutorialWithML

        data = EURUSD.copy()

        close = data.Close.values
        sma10 = SMA(data.Close, 10)
        sma20 = SMA(data.Close, 20)
        sma50 = SMA(data.Close, 50)
        sma100 = SMA(data.Close, 100)
        upper, lower = test_funcs.BBANDS(data, 20, 2)

        # Design matrix / independent features:

        # Price-derived features
        data['X_SMA10'] = (close - sma10) / close
        data['X_SMA20'] = (close - sma20) / close
        data['X_SMA50'] = (close - sma50) / close
        data['X_SMA100'] = (close - sma100) / close

        data['X_DELTA_SMA10'] = (sma10 - sma20) / close
        data['X_DELTA_SMA20'] = (sma20 - sma50) / close
        data['X_DELTA_SMA50'] = (sma50 - sma100) / close

        # Indicator features
        data['X_MOM'] = data.Close.pct_change(periods=2)
        data['X_BB_upper'] = (upper - close) / close
        data['X_BB_lower'] = (lower - close) / close
        data['X_BB_width'] = (upper - lower) / close
        data['X_Sentiment'] = ~data.index.to_series().between(
            '2017-09-27', '2017-12-14')

        # Some datetime features for good measure
        data['X_day'] = data.index.dayofweek
        data['X_hour'] = data.index.hour

        data = data.dropna().astype(float)

        X, y = test_funcs.get_clean_Xy(data)
        X_train, X_test, y_train, y_test = train_test_split(X,
                                                            y,
                                                            test_size=.5,
                                                            random_state=0)

        clf = KNeighborsClassifier(
            7)  # Model the output based on 7 "nearest" examples
        clf.fit(X_train, y_train)

        y_pred = clf.predict(X_test)

        _ = pd.DataFrame({
            'y_true': y_test,
            'y_pred': y_pred
        }).plot(figsize=(15, 2), alpha=.7)
        print('Classification accuracy: ', np.mean(y_test == y_pred))

        bt = Backtest(data, MLTrainOnceStrategy, commission=.0002, margin=.05)
        bt.run()
Example #2
0
 def resets_index(*args):
     return pd.Series(SMA(*args).values)
# In our example, we'll try to map several price-derived features and common technical indicators to the price point two days in the future.
# We construct [model design matrix](https://en.wikipedia.org/wiki/Design_matrix) $X$ below:


# +
def BBANDS(data, n_lookback, n_std):
    """Bollinger bands indicator"""
    hlc3 = (data.High + data.Low + data.Close) / 3
    mean, std = hlc3.rolling(n_lookback).mean(), hlc3.rolling(n_lookback).std()
    upper = mean + n_std * std
    lower = mean - n_std * std
    return upper, lower


close = data.Close.values
sma10 = SMA(data.Close, 10)
sma20 = SMA(data.Close, 20)
sma50 = SMA(data.Close, 50)
sma100 = SMA(data.Close, 100)
upper, lower = BBANDS(data, 20, 2)

# Design matrix / independent features:

# Price-derived features
data['X_SMA10'] = (close - sma10) / close
data['X_SMA20'] = (close - sma20) / close
data['X_SMA50'] = (close - sma50) / close
data['X_SMA100'] = (close - sma100) / close

data['X_DELTA_SMA10'] = (sma10 - sma20) / close
data['X_DELTA_SMA20'] = (sma20 - sma50) / close