Package: alphanet
AlphaNetA Recurrent Neural Network For Predicting Stock PricesAlphaNetV2Below is the structure of AlphaNetV2input: (batch_size, history time steps, features)

              stride = 5
input -> expand features -> BN -> LSTM -> BN -> Dense(linear)AlphaNetV3Below is the structure of AlphaNetV3input: (batch_size, history time steps, features)

                 stride = 5
        +-> expand features -> BN -> GRU -> BN -+
input --|       stride = 10                     |- concat -> Dense(linear)
        +-> expand features -> BN -> GRU -> BN -+InstallationEither clone this repository or just use pypi:pip install alphanet.The pypi project is here:alphanet.ExampleStep 0: import alphanetfromalphanetimportAlphaNetV3,load_modelfromalphanet.dataimportTrainValData,TimeSeriesDatafromalphanet.metricsimportUpDownAccuracyStep 1: build data# read datadf=pd.read_csv("some_data.csv")# compute label (future return)df_future_return=here_you_compute_it_by_your_selfdf=df_future_return.merge(df,how="inner",left_on=["date","security_code"],right_on=["date","security_code"])# create an empty liststock_data_list=[]# put each stock into the list using TimeSeriesData() classsecurity_codes=df["security_code"].unique()forcodeinsecurity_codes:table_part=df.loc[df["security_code"]==code,:]stock_data_list.append(TimeSeriesData(dates=table_part["date"].values,# date columndata=table_part.iloc[:,3:].values,# data columnslabels=table_part["future_10_cum_return"].values))# label column# put stock list into TrainValData() class, specify dataset lengthstrain_val_data=TrainValData(time_series_list=stock_data_list,train_length=1200,# 1200 trading days for trainingvalidate_length=150,# 150 trading days for validationhistory_length=30,# each input contains 30 days of historysample_step=2,# jump to days forward for each samplingtrain_val_gap=10# leave a 10-day gap between training and validationStep 2: get datasets from desired period# get one training period that start from 20110131train,val,dates_info=train_val_data.get(20110131,order="by_date")print(dates_info)Step 3: compile the model and start training# get an AlphaNetV3 instancemodel=AlphaNetV3(l2=0.001,dropout=0.0)# you may use UpDownAccuracy() here to evaluate performancemodel.compile(metrics=[tf.keras.metrics.RootMeanSquaredError(),UpDownAccuracy()]# trainmodel.fit(train.batch(500).cache(),validation_data=val.batch(500).cache(),epochs=100)Step 4: save and loadsaving# save model by save methodmodel.save("path_to_your_model")# or just save weightsmodel.save_weights("path_to_your_weights")loading# load entire model using load_model() from alphanet modulemodel=load_model("path_to_your_model")# only load weights by first creating a model instancemodel=AlphaNetV3(l2=0.001,dropout=0.0)model.load_weights("path_to_your_weights")Note: onlyalphanet.load_model(filename)recognizes customUpDownAccuracy.
If you do not useUpDownAccuracy,
you canalsousetf.keras.models.load_model(filename).DocumentationFor detailed documentation, go toalphanet documentation.For implementation details, go toalphanet source folder.One Little CaveatThe model expands features quadratically.
So, if you have 5 features, it will be expanded to more than 50 features (for AlphaNetV3),
and if you have 10 features, it will be expanded to more than 200 features.
Therefore, do not put too many features inside.One More Notealphanet.datamodule is completely independent fromalphanetmodule,
and can be a useful tool for training any timeseries neural network.