{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"## Load the training set","metadata":{"id":"OevdFjmtar0j"}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom datetime import datetime\nimport time\nimport matplotlib.pyplot as plt\n\nplt.rcParams[\"figure.figsize\"] = (20,7)\n\n# import gresearch_crypto","metadata":{"id":"90fqnpNQ2wd8","execution":{"iopub.status.busy":"2021-12-29T21:32:30.452255Z","iopub.execute_input":"2021-12-29T21:32:30.452815Z","iopub.status.idle":"2021-12-29T21:32:30.477089Z","shell.execute_reply.started":"2021-12-29T21:32:30.452730Z","shell.execute_reply":"2021-12-29T21:32:30.476397Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_folder = \"../input/g-research-crypto-forecasting/\"\n# !ls $data_folder","metadata":{"id":"Zw_oi4NETkKv","outputId":"e6fe292d-721e-4c6a-bc70-9026cfd5b915","execution":{"iopub.status.busy":"2021-12-29T21:32:30.478952Z","iopub.execute_input":"2021-12-29T21:32:30.479209Z","iopub.status.idle":"2021-12-29T21:32:30.483628Z","shell.execute_reply.started":"2021-12-29T21:32:30.479162Z","shell.execute_reply":"2021-12-29T21:32:30.481777Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"crypto_df = pd.read_csv(data_folder + 'train.csv')","metadata":{"id":"La0-ivRAUopA","scrolled":true,"execution":{"iopub.status.busy":"2021-12-29T21:32:30.484841Z","iopub.execute_input":"2021-12-29T21:32:30.485099Z","iopub.status.idle":"2021-12-29T21:33:30.039882Z","shell.execute_reply.started":"2021-12-29T21:32:30.485070Z","shell.execute_reply":"2021-12-29T21:33:30.038815Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"asset_details = pd.read_csv(data_folder + 'asset_details.csv')\n# asset_details\n\ndict_weights = {}\n\nfor i in range(asset_details.shape[0]):\n    dict_weights[asset_details.iloc[i,0]] = asset_details.iloc[i,1]\nweights = np.array([dict_weights[i] for i in range(14)])","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:33:30.041170Z","iopub.execute_input":"2021-12-29T21:33:30.041457Z","iopub.status.idle":"2021-12-29T21:33:30.060316Z","shell.execute_reply.started":"2021-12-29T21:33:30.041415Z","shell.execute_reply":"2021-12-29T21:33:30.058073Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"asset_symbols = {'Bitcoin Cash'     :    'BCH',\n                 'Binance Coin'     :    'BNB',\n                 'Bitcoin'          :    'BTC',\n                 'EOS.IO'           :    'EOS',\n                 'Ethereum Classic' :    'ETC',\n                 'Ethereum'         :    'ETH',\n                 'Litecoin'         :    'LTC',\n                 'Monero'           :    'XMR',\n                 'TRON'             :    'TRX',\n                 'Stellar'          :    'XLM',\n                 'Cardano'          :    'ADA',\n                 'IOTA'             :    'IOTA',\n                 'Maker'            :    'MKR',\n                 'Dogecoin'         :    'DOGE'\n                }\n    \n\n# auxiliary function, from datetime to timestamp\ntotimestamp = lambda s: np.int32(time.mktime(datetime.strptime(s, \"%d/%m/%Y\").timetuple()))\n\ndef get_asset_dict():\n    dict = {}\n    for id in range(14):\n        df = crypto_df[crypto_df[\"Asset_ID\"]==id].set_index(\"timestamp\") \n        name = asset_details.loc[asset_details['Asset_ID']==id,'Asset_Name'].iloc[0]\n        symbol = asset_symbols[name]\n        dict[symbol] = df\n    return dict\n\ndef get_asset_dict_by_id():\n    dict = {}\n    for id in range(14):\n        df = crypto_df[crypto_df[\"Asset_ID\"]==id].set_index(\"timestamp\") \n        name = asset_details.loc[asset_details['Asset_ID']==id,'Asset_Name'].iloc[0]\n        dict[id] = df\n    return dict\n\ndef find_missing_data(symbol):\n    return (df_dict[symbol].index[1:]-df_dict[symbol].index[:-1]).value_counts() # returns df\n\ndef handle_missing_data(df_dict):\n     for symbol,asset in df_dict.items():\n        df_dict[symbol] = df_dict[symbol].dropna()\n        df_dict[symbol] = asset.reindex(range(asset.index[0],asset.index[-1]+60,60),method='pad')\n     return df_dict\n\ndef handle_asset_missing_data(asset_df):\n    asset_df = asset_df.dropna()\n    asset_df = asset_df.reindex(range(asset_df.index[0],asset_df.index[-1]+60,60),method='pad')\n    return asset_df\n\ndef view_charts(df_dict):\n    figure, axis = plt.subplots(7, 2, figsize=(15,10))\n    row,col = 0,0\n    for symbol,asset in df_dict.items():\n        axis[row, col].plot(asset['Close'])\n    #     axis[row, col].set_title(str(id))\n        axis[row, col].legend([symbol], loc='upper center')\n        col += 1\n        if col > 1:\n            col = 0\n            row += 1\n    plt.show()\n\ndef log_return(series, periods=1):\n    return np.log(series).diff(periods=periods)\n\ndef show_colleration_map():\n    all_assets_2021 = pd.DataFrame([])\n    for asset_id, asset_name in zip(asset_details.Asset_ID, asset_details.Asset_Name):\n      asset = crypto_df[crypto_df[\"Asset_ID\"]==asset_id].set_index(\"timestamp\")\n      asset = asset.loc[totimestamp('01/01/2021'):totimestamp('01/05/2021')]\n      asset = asset.reindex(range(asset.index[0],asset.index[-1]+60,60),method='pad')\n      lret = log_return(asset.Close.fillna(0))[1:]\n      all_assets_2021 = all_assets_2021.join(lret, rsuffix=asset_name, how=\"outer\")\n\n    plt.imshow(all_assets_2021.corr())\n    plt.yticks(asset_details.Asset_ID.values, asset_details.Asset_Name.values)\n    plt.xticks(asset_details.Asset_ID.values, asset_details.Asset_Name.values, rotation='vertical')\n    plt.colorbar()\n\n    \ndef Clean_df(x):\n    Asset_ID = x[:,1]\n    timestamp = x[0,0]\n\n    if len(Asset_ID)<14:\n        missing_ID = [i for i in range(14) if i not in Asset_ID]\n        for i in missing_ID:\n            row = np.array((timestamp,i,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan))\n            x = np.concatenate((x,np.expand_dims(row,axis=0)))\n    x = x[np.argsort(x[:,1])]\n    return (x[:,i] for i in range(x.shape[1]))\n\n\n# online - deployment\ndef Base_Feature_fn(timestamp,Asset_ID,Count,O,H,L,C,Volume,VWAP):\n\n    VWAP = np.where(np.isinf(VWAP),(C+O)/2,VWAP)\n    base = C\n    O = O/base\n    H = H/base\n    L = L/base\n    C = C/base\n    VWAP = VWAP/base\n    Price = base\n\n    Dollars = Volume * Price\n    Volume_per_trade = Volume/Count\n    Dollars_per_trade = Dollars/Count\n\n    log_ret = np.log(C/O)\n    GK_vol = (1 / 2 * np.log(H/L) ** 2 - (2 * np.log(2) - 1) * np.log(C/O) ** 2)\n    RS_vol = np.log(H/C)*np.log(H/O) + np.log(L/C)*np.log(L/O)\n\n    return(np.transpose(np.array([Count,O,H,L,C,Price,Volume,VWAP,Dollars,Volume_per_trade,Dollars_per_trade,log_ret,GK_vol,RS_vol])))\n\n# offline - training\ndef create_features(df):\n    \n    base = df.Close\n    \n    df['VWAP'] = np.where(np.isinf(df.VWAP),(df.Close+df.Open)/2,df.VWAP)\n    df['O'] = df.Open / base\n    df['H'] = df.High / base\n    df['L'] = df.Low / base\n    df['C'] = df.Close / base\n    \n    df['VWAP'] = df.VWAP / base\n    \n    Price = base\n    Dollars = df.Volume * Price\n    \n    df['Dollars'] = Dollars\n    df['Price'] = Price\n    \n    df['Volume_per_trade'] = df.Volume / df.Count\n    df['Dollars_per_trade'] = Dollars / df.Count\n    \n    df['log_ret'] = np.log(df.C / df.O)\n    df['GK_vol'] = (1 / 2 * np.log(df.H/df.L) ** 2 - (2 * np.log(2) - 1) * np.log(df.C / df.O) ** 2)\n    df['RS_vol'] = np.log(df.H/df.C)*np.log(df.H/df.O) + np.log(df.L/df.C)*np.log(df.L/df.O)\n    \n    df['slow_MA'] = pd.Series.rolling(df.Price, window=10).mean()\n    df['fast_MA'] = pd.Series.rolling(df.Price, window=5).mean()\n    \n    df['bullish_MA'] = df['fast_MA'] > df['slow_MA'] \n    df['bullish_MA'] = df['bullish_MA'].astype(int)\n    \n    df['bullish_target'] = df['Target'] > 0\n    df['bullish_target'] = df['bullish_target'].astype(int)\n    \n    df['slow_EMA'] = df['Price'].ewm(span=30, adjust=False).mean()\n    df['fast_EMA'] = df['Price'].ewm(span=15, adjust=False).mean()   \n    \n    df['bullish_EMA'] = df['slow_EMA'] < df['fast_EMA']\n    df['bullish_EMA'] = df['bullish_EMA'].astype(int)\n    \n    \n    \n    return df   \n\ndef weighted_correlation(a, b, weights):\n    w = np.ravel(weights)\n    a = np.ravel(a)\n    b = np.ravel(b)\n\n    sum_w = np.sum(w)\n    mean_a = np.sum(a * w) / sum_w\n    mean_b = np.sum(b * w) / sum_w\n    var_a = np.sum(w * np.square(a - mean_a)) / sum_w\n    var_b = np.sum(w * np.square(b - mean_b)) / sum_w\n\n    cov = np.sum((a * b * w)) / np.sum(w) - mean_a * mean_b\n    corr = cov / np.sqrt(var_a * var_b)\n\n    return corr\n\n# Function log_return_ahead computes R_t = log(P_{t+16} / P_{t+1})\ndef log_return_ahead(series, periods=1):\n    return np.exp(-np.log(series).diff(periods=-periods).shift(-1)) - 1","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:33:30.064798Z","iopub.execute_input":"2021-12-29T21:33:30.065362Z","iopub.status.idle":"2021-12-29T21:33:30.124255Z","shell.execute_reply.started":"2021-12-29T21:33:30.065272Z","shell.execute_reply":"2021-12-29T21:33:30.123583Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Asset:\n    def __init__(self, prediction=0.0, target=1.0):\n        self.prediction = prediction\n        self.target = target\n    \n    def set_predition(self,prediction):\n        self.prediction = prediction\n    \n    def set_target(self,target):\n        self.target = target    \n    \n    def compute_error(self):\n        self.err = abs(self.prediction-self.target)\n    \n    def get_error(self):\n        return self.err       \n","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:33:30.125513Z","iopub.execute_input":"2021-12-29T21:33:30.125967Z","iopub.status.idle":"2021-12-29T21:33:30.136134Z","shell.execute_reply.started":"2021-12-29T21:33:30.125933Z","shell.execute_reply":"2021-12-29T21:33:30.135503Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Feature creation","metadata":{}},{"cell_type":"code","source":"# Select some input features from the trading data: \n# 5 min log return, abs(5 min log return), upper shadow, and lower shadow.\nupper_shadow = lambda asset: pd.Series(asset.High - np.maximum(asset.Close,asset.Open))\nlower_shadow = lambda asset: pd.Series(np.minimum(asset.Close,asset.Open)- asset.Low)\n\n\ndef get_features(asset_df):\n    data = handle_asset_missing_data(asset_df)\n    data.pop('Target')\n    data.pop('Asset_ID')\n    return data","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:33:30.137745Z","iopub.execute_input":"2021-12-29T21:33:30.138367Z","iopub.status.idle":"2021-12-29T21:33:30.149261Z","shell.execute_reply.started":"2021-12-29T21:33:30.138323Z","shell.execute_reply":"2021-12-29T21:33:30.148450Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Split data","metadata":{}},{"cell_type":"code","source":"# select training and test periods\ntrain_window = [totimestamp(\"01/01/2021\"), totimestamp(\"01/03/2021\")]\ntest_window = [totimestamp(\"02/03/2021\"), totimestamp(\"03/03/2021\")]\n\n# divide data into train and test, compute X and y\n# we aim to build simple regression models using a window_size of 1\ndef split_data(X,y):\n    X_train = X.loc[train_window[0]:train_window[1]].fillna(0).to_numpy()  # filling NaN's with zeros\n    y_train = y.loc[train_window[0]:train_window[1]].fillna(0).to_numpy()  \n    \n    X_test = X.loc[test_window[0]:test_window[1]].fillna(0).to_numpy()  # filling NaN's with zeros\n    y_test = y.loc[test_window[0]:test_window[1]].fillna(0).to_numpy()  \n    return X_train, y_train, X_test, y_test   \n","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:33:30.150881Z","iopub.execute_input":"2021-12-29T21:33:30.151459Z","iopub.status.idle":"2021-12-29T21:33:30.161736Z","shell.execute_reply.started":"2021-12-29T21:33:30.151416Z","shell.execute_reply":"2021-12-29T21:33:30.160799Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Transform data","metadata":{}},{"cell_type":"code","source":"from sklearn.preprocessing import StandardScaler\n# simple preprocessing of the data \nscaler = StandardScaler()\n# def scale_data(data):\n#     return scaler.fit_transform(data)\ndef scale_data(data):\n    return data","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:33:30.163311Z","iopub.execute_input":"2021-12-29T21:33:30.163828Z","iopub.status.idle":"2021-12-29T21:33:31.053154Z","shell.execute_reply.started":"2021-12-29T21:33:30.163787Z","shell.execute_reply":"2021-12-29T21:33:31.052436Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Train & Test model","metadata":{}},{"cell_type":"code","source":"# from sklearn.linear_model import LinearRegression\n\n# implement basic ML baseline (one per asset)\n# lr = LinearRegression()\ndef train(model,X_train,y_train):\n    return model.fit(X_train,y_train)\n\n# X_test should be scaled if possible \ndef predict(model,X_test):\n    return model.predict(X_test)\n\n# def test(y_pred, y_test):\n#     return np.corrcoef(y_pred, y_test)[0,1]\n\ndef test(y_pred, y_test):\n    y_test = np.atleast_2d(y_test).T\n    N = y_test.shape[0]\n    accuracy = (y_test == y_pred).sum() / N\n#     TP = ((predictions == 1) & (true_values == 1)).sum()\n#     FP = ((predictions == 1) & (true_values == 0)).sum()\n#     precision = TP / (TP+FP)\n    return accuracy\n\nfrom sklearn.metrics import classification_report, confusion_matrix","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:33:31.054402Z","iopub.execute_input":"2021-12-29T21:33:31.055366Z","iopub.status.idle":"2021-12-29T21:33:31.096652Z","shell.execute_reply.started":"2021-12-29T21:33:31.055317Z","shell.execute_reply":"2021-12-29T21:33:31.096074Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"asset_dict = get_asset_dict_by_id()","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:33:31.097714Z","iopub.execute_input":"2021-12-29T21:33:31.098399Z","iopub.status.idle":"2021-12-29T21:33:36.110504Z","shell.execute_reply.started":"2021-12-29T21:33:31.098360Z","shell.execute_reply":"2021-12-29T21:33:36.109483Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"asset_dict = handle_missing_data(asset_dict)","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:33:36.111969Z","iopub.execute_input":"2021-12-29T21:33:36.112259Z","iopub.status.idle":"2021-12-29T21:33:42.025460Z","shell.execute_reply.started":"2021-12-29T21:33:36.112218Z","shell.execute_reply":"2021-12-29T21:33:42.024486Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# asset_features_dict = {id : get_features(asset) for (id,asset) in asset_dict.items()}\n# asset_target_dict = {id: asset.Target for (id,asset) in asset_dict.items()}","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:33:42.026540Z","iopub.execute_input":"2021-12-29T21:33:42.026750Z","iopub.status.idle":"2021-12-29T21:33:42.030028Z","shell.execute_reply.started":"2021-12-29T21:33:42.026725Z","shell.execute_reply":"2021-12-29T21:33:42.029433Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"asset_features_dict = {id : create_features(asset) for (id,asset) in asset_dict.items()}","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:33:42.032618Z","iopub.execute_input":"2021-12-29T21:33:42.032943Z","iopub.status.idle":"2021-12-29T21:33:50.895624Z","shell.execute_reply.started":"2021-12-29T21:33:42.032916Z","shell.execute_reply":"2021-12-29T21:33:50.894740Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"asset_features_dict = {id : asset_features_dict[id].dropna(axis=0) for id in range(14)}","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:33:50.896756Z","iopub.execute_input":"2021-12-29T21:33:50.896991Z","iopub.status.idle":"2021-12-29T21:34:04.113990Z","shell.execute_reply.started":"2021-12-29T21:33:50.896966Z","shell.execute_reply":"2021-12-29T21:34:04.113136Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"asset_features_dict[0][['Price','slow_MA','fast_MA','Target','bullish_MA','bullish_target']].tail(30)","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:34:04.115176Z","iopub.execute_input":"2021-12-29T21:34:04.115454Z","iopub.status.idle":"2021-12-29T21:34:04.166119Z","shell.execute_reply.started":"2021-12-29T21:34:04.115424Z","shell.execute_reply":"2021-12-29T21:34:04.165574Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.linear_model import LinearRegression","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:34:04.167292Z","iopub.execute_input":"2021-12-29T21:34:04.167648Z","iopub.status.idle":"2021-12-29T21:34:04.250835Z","shell.execute_reply.started":"2021-12-29T21:34:04.167602Z","shell.execute_reply":"2021-12-29T21:34:04.250253Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# First XGBoost model for Pima Indians dataset\nfrom numpy import loadtxt\nfrom xgboost import XGBClassifier\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import accuracy_score\n\nfrom sklearn.linear_model import LogisticRegression\n\n# load data\n# dataset = loadtxt('pima-indians-diabetes.csv', delimiter=\",\")\n# # split data into X and y\n# X = dataset[:,0:8]\n# Y = dataset[:,8]\n# # split data into train and test sets\n# seed = 7\n# test_size = 0.33\n# X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)\n# fit model no training data\n# model = XGBClassifier()\n# model.fit(X_train, y_train)\n# # make predictions for test data\n# y_pred = model.predict(X_test)\n# predictions = [round(value) for value in y_pred]\n# # evaluate predictions\n# accuracy = accuracy_score(y_test, predictions)\n# print(\"Accuracy: %.2f%%\" % (accuracy * 100.0))","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:34:04.251963Z","iopub.execute_input":"2021-12-29T21:34:04.252324Z","iopub.status.idle":"2021-12-29T21:34:04.463909Z","shell.execute_reply.started":"2021-12-29T21:34:04.252278Z","shell.execute_reply":"2021-12-29T21:34:04.463318Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def MyModel(X):\n    return (1 - X)\n    ","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:34:04.465043Z","iopub.execute_input":"2021-12-29T21:34:04.465456Z","iopub.status.idle":"2021-12-29T21:34:04.468536Z","shell.execute_reply.started":"2021-12-29T21:34:04.465407Z","shell.execute_reply":"2021-12-29T21:34:04.467914Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = pd.DataFrame([0,1,0,1,1]).to_numpy()\nprint(X)\nprint(MyModel(X))","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:34:04.469558Z","iopub.execute_input":"2021-12-29T21:34:04.470113Z","iopub.status.idle":"2021-12-29T21:34:04.481930Z","shell.execute_reply.started":"2021-12-29T21:34:04.470086Z","shell.execute_reply":"2021-12-29T21:34:04.481139Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"models = []\nperformance = []\n\n# features = ['O','H','L','C','Volume_per_trade','Dollars_per_trade','log_ret','GK_vol','RS_vol']\n# features = ['Count','O','H','L','C','Price','Volume','VWAP','Dollars','Volume_per_trade','Dollars_per_trade','log_ret','GK_vol','RS_vol']\n# features = ['Count','O','H','L','VWAP','Volume_per_trade','Dollars_per_trade','log_ret','GK_vol','RS_vol']\n\n# features = ['VWAP','Volume_per_trade','Dollars_per_trade','log_ret','GK_vol','RS_vol','bullish_EMA','bullish_MA']\n\nfeatures = ['bullish_MA']\n\nfor id in range(14):\n    \n    X = asset_features_dict[id]\n    \n    y = X.bullish_target\n    \n    X = X[features]\n    \n    X_train, y_train, X_test, y_test = split_data(X,y)\n    \n#     X_train_scaled = scale_data(X_train)\n#     X_test_scaled = scale_data(X_test)\n    \n#     model = LinearRegression()\n#     model = XGBClassifier()\n    \n#     model = LogisticRegression(random_state=0)\n    \n#     model = train(model,X_train_scaled,y_train)\n#     y_pred = predict(model,X_test_scaled)\n\n    y_pred = MyModel(X_test)\n    \n    accuracy = test(y_pred, y_test)\n    performance.append(accuracy)\n#     models.append(model)\n","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:34:04.483176Z","iopub.execute_input":"2021-12-29T21:34:04.483984Z","iopub.status.idle":"2021-12-29T21:34:04.666734Z","shell.execute_reply.started":"2021-12-29T21:34:04.483944Z","shell.execute_reply":"2021-12-29T21:34:04.665987Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(performance)","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:34:04.667841Z","iopub.execute_input":"2021-12-29T21:34:04.668091Z","iopub.status.idle":"2021-12-29T21:34:04.673471Z","shell.execute_reply.started":"2021-12-29T21:34:04.668059Z","shell.execute_reply":"2021-12-29T21:34:04.672700Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# t0 = asset_features_dict[0].shape[0] - 10000\n# T = t0 + 100;\n# t = [i for i in range(t0,T)]\n# for id in range(14):\n    \n#     try:\n        \n#         X = asset_features_dict[id]\n#         plt.figure()\n#         fig, ax1 = plt.subplots()\n#         ax1.plot(t,X.Close[t0:T], color='k')\n#         ax1.set_ylabel('Close', color='k')\n#         ax1.tick_params(axis='y', color='k', labelcolor='k')\n\n#         ax2 = ax1.twinx()\n#         ax2.scatter(t, X.Target[t0:T], c = [ 'r' if i < 0 else 'g' for i in X.Target[t0:T]])\n#         ax2.set_ylabel('Target', color='g')\n#         ax2.tick_params(axis='y', color='g', labelcolor='g')\n#         ax2.spines['right'].set_color('g')\n#         ax2.spines['left'].set_color('k')\n#         ax1.set_xlabel('Time')   \n\n#         ax1.grid(True, which='both')\n#     except:\n#         pass\n\n# plt.show()","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:34:04.675109Z","iopub.execute_input":"2021-12-29T21:34:04.675431Z","iopub.status.idle":"2021-12-29T21:34:04.684629Z","shell.execute_reply.started":"2021-12-29T21:34:04.675391Z","shell.execute_reply":"2021-12-29T21:34:04.683848Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# print(performance)","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:34:04.685977Z","iopub.execute_input":"2021-12-29T21:34:04.686217Z","iopub.status.idle":"2021-12-29T21:34:04.694198Z","shell.execute_reply.started":"2021-12-29T21:34:04.686167Z","shell.execute_reply":"2021-12-29T21:34:04.693393Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n# gresearch_crypto.make_env.__called__ = False\n\n# env = gresearch_crypto.make_env()\n# iter_test = env.iter_test()\n\n# for (test_df, sample_prediction_df) in iter_test:\n    \n#     print(test_df)\n#     print(sample_prediction_df)\n#     print('==========================================')\n    \n#     pred = []\n    \n#     timestamp,Asset_ID,Count,O,H,L,C,Volume,VWAP,row_id = Clean_df(test_df.values)\n    \n#     Features = Base_Feature_fn(timestamp,Asset_ID,Count,O,H,L,C,Volume,VWAP)\n    \n#     for i in range(len(Asset_ID)):\n        \n#         X_test = np.array([Features[i]])\n        \n#         y = models[int(Asset_ID[i])].predict(X_test)[0]\n        \n#         pred.append(y)\n        \n#     sample_prediction_df['Target'] = pd.Series(pred).values\n#     sample_prediction_df['Target'] = 0.0\n#     env.predict(sample_prediction_df)  ","metadata":{"execution":{"iopub.status.busy":"2021-12-29T21:34:04.695086Z","iopub.execute_input":"2021-12-29T21:34:04.695646Z","iopub.status.idle":"2021-12-29T21:34:04.705119Z","shell.execute_reply.started":"2021-12-29T21:34:04.695611Z","shell.execute_reply":"2021-12-29T21:34:04.704607Z"},"trusted":true},"execution_count":null,"outputs":[]}]}