In [1]:
import h2o
In [2]:
h2o.__version__
Out[2]:
In [3]:
import pandas as pd
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
In [4]:
df_eur_usd = pd.read_csv("price_EUR_USD_D1_merge.csv", header=0, index_col=0)
df_eur_usd.columns
Out[4]:
In [5]:
#df_eur_usd_h2o = h2o.import_frame(df_eur_usd)
h2o.init()
df_eur_usd_h2o = h2o.import_frame(path="./price_EUR_USD_D1_merge.csv")
In [6]:
df_eur_usd_h2o.describe()
In [7]:
r = df_eur_usd_h2o[0].runif()
df_eur_usd_h2o_train = df_eur_usd_h2o[r<0.8]
df_eur_usd_h2o_valid = df_eur_usd_h2o[r>=0.8]
In [8]:
features = [ u'Day Open', u'Day Close', u'Day High', u'Day Low', u'Day Average', u'Momentum_3day', u'Momentum_4day',
u'Momentum_5day', u'Momentum_8day', u'Momentum_9day', u'Momentum_10day',
u'Roc_3day', u'Roc_4day', u'Roc_5day', u'Roc_8day', u'Roc_9day', u'Roc_10day', u'Fast_k_3day',
u'Fast_d_3day', u'Fast_k_4day', u'Fast_d_4day', u'Fast_k_5day', u'Fast_d_5day', u'Fast_k_8day',
u'Fast_d_8day', u'Fast_k_9day', u'Fast_d_9day', u'Fast_k_10day', u'Fast_d_10day', u'PROC_12day',
u'PROC_13day', u'PROC_14day', u'PROC_15day', u'Weighted_Close_Price', u'WILLIAM_A_D', u'ADOSC_1day',
u'ADOSC_2day', u'ADOSC_3day', u'ADOSC_4day', u'ADOSC_5day', u'EMA_12Day', u'EMA_26Day', u'MACD',
u'CCI', u'BOLLINGER_BANDS_LOW', u'BOLLINGER_BANDS_HIGH', u'HEIKIN_ASHI_XCLOSE', u'HEIKIN_ASHI_XOPEN',
u'HEIKIN_ASHI_XHIGH', u'HEIKIN_ASHI_XLOW', u'2DAY_HIGH', u'2DAY_LOW', u'1DAY_HIGH_LOW_AVG',
u'2DAY_HIGH_LOW_AVG', u'High_slope_3day', u'High_slope_4day', u'High_slope_5day', u'High_slope_8day',
u'High_slope_10day', u'High_slope_12day', u'High_slope_15day', u'High_slope_20day', u'High_slope_25day',
u'High_slope_30day', u'Pips', u'Volume', u'Active Hour', u'Active Hour Volume']
label = [u'Prediction_action']
In [9]:
model_gbm = h2o.gbm(
y= df_eur_usd_h2o_train[label],
validation_y = df_eur_usd_h2o_valid[label],
x = df_eur_usd_h2o_train[features],
validation_x = df_eur_usd_h2o_valid[features],
balance_classes=True,
ntrees =50,
max_depth =5,
distribution ="bernoulli",
learn_rate =0.1
)
In [10]:
train_metrics_gbm = model_gbm.model_performance(df_eur_usd_h2o_train)
train_metrics_gbm.show()
In [11]:
val_metrics_gbm = model_gbm.model_performance(df_eur_usd_h2o_valid)
val_metrics_gbm.show()
In [12]:
predict_df_eur_usd_h2o_valid = model_gbm.predict(df_eur_usd_h2o_valid[features])
In [13]:
predict_df_eur_usd_h2o_valid.show()
In [14]:
predict_df_eur_usd_valid = predict_df_eur_usd_h2o_valid.as_data_frame()
df_eur_usd_valid = df_eur_usd_h2o_valid.as_data_frame()
In [15]:
predict_df_eur_usd_valid[:5]
Out[15]:
In [16]:
df_eur_usd_valid[:5]
Out[16]:
In [17]:
result = df_eur_usd_valid.join(predict_df_eur_usd_valid)
In [18]:
result_col = ['Prediction_action','predict','buy','sell','Prediction_Pips']
result[result_col][:5]
Out[18]:
In [19]:
wrong_result = result[result['Prediction_action'] != result['predict']]
In [20]:
#Possbile loss in pips
sum(abs(wrong_result[abs(wrong_result['buy'] - wrong_result['sell']) >0.25]['Prediction_Pips']))
Out[20]:
In [21]:
#possible profit in pips
correct_result = result[result['Prediction_action'] == result['predict']]
sum(abs(correct_result['Prediction_Pips']))
Out[21]:
In [ ]: