Example #1
0
def generate_signal_prices(dfs,
                           feature_names_filename,
                           model_params_filename,
                           period=1e7,
                           sample_th=10,
                           returns_th=5):
    file = open(model_params_filename, 'r')
    model_params = json.load(file)
    file.close()
    features_config = load_feature_config(feature_names_filename)
    timestamps = [subsample(df, sample_th) for df in dfs]
    model = Model(**model_params)
    returns = [calc_return(df, period) for df in dfs]
    features = [generate_features(df, features_config) for df in dfs]
    returns = [calc_return(df, period) for df in dfs]
    returns = [get_non_duplicated(x) for x in returns]
    features = [get_non_duplicated(feature) for feature in features]
    sub_features = [
        features[i].loc[timestamps[i]] for i in range(len(timestamps))
    ]
    sub_returns = [
        returns[i].loc[timestamps[i]] for i in range(len(timestamps))
    ]
    signal_prices_list = []
    for i in range(len(features)):
        test_features = features[i]
        X_test = get_non_duplicated(test_features)
        cond = (X_test.isnull().sum(axis=1) == 0)
        X_test = X_test.loc[cond]
        df = get_non_duplicated(dfs[i])
        df = df.loc[cond]
        mid_prices = 0.5 * (df['ap0'] + df['bp0'])
        X_train = []
        y_train = []
        for j in range(len(features)):
            if i == j:
                continue
            train_features = sub_features[j]
            train_returns = sub_returns[j]
            cond = (~train_returns.isnull()) & (train_features.isnull().sum(
                axis=1) == 0)
            train_features = train_features.loc[cond]
            train_returns = train_returns.loc[cond]
            X_train.append(train_features)
            y_train.append(train_returns)
        X_train = pd.concat(X_train)
        y_train = pd.concat(y_train)
        X_train, y_train = subsample_returns(X_train, y_train, returns_th)
        model.fit(X_train.values, y_train.values)
        pred = model.predict(X_test)
        pred = pd.Series(pred, index=X_test.index)
        signal_prices = mid_prices + pred
        signal_prices_list.append(signal_prices)
    return signal_prices_list
 def post(self):
     model = Model()
     text = request.json['text']
     predict = model.predict(text)
     return jsonify(predict)