Skip to main content

AlphaNet

unittest Congyuwang publish

A Recurrent Neural Network For Predicting Stock Prices

AlphaNetV2

Below is the structure of AlphaNetV2

input: (batch_size, history time steps, features)

              stride = 5
input -> expand features -> BN -> LSTM -> BN -> Dense(linear)

AlphaNetV3

Below is the structure of AlphaNetV3

input: (batch_size, history time steps, features)

                 stride = 5
        +-> expand features -> BN -> GRU -> BN -+
input --|       stride = 10                     |- concat -> Dense(linear)
        +-> expand features -> BN -> GRU -> BN -+

Installation

Either clone this repository or just use pypi: pip install alphanet.

The pypi project is here: alphanet.

Example

Step 0: import alphanet

from alphanet import AlphaNetV3, load_model
from alphanet.data import TrainValData, TimeSeriesData
from alphanet.metrics import UpDownAccuracy

Step 1: build data

# read data
df = pd.read_csv("some_data.csv")

# compute label (future return)
df_future_return = here_you_compute_it_by_your_self
df = df_future_return.merge(df,
                            how="inner",
                            left_on=["date", "security_code"],
                            right_on=["date", "security_code"])

# create an empty list
stock_data_list = []

# put each stock into the list using TimeSeriesData() class
security_codes = df["security_code"].unique()
for code in security_codes:
    table_part = df.loc[df["security_code"] == code, :]
    stock_data_list.append(TimeSeriesData(dates=table_part["date"].values,                   # date column
                                          data=table_part.iloc[:, 3:].values,                # data columns
                                          labels=table_part["future_10_cum_return"].values)) # label column

# put stock list into TrainValData() class, specify dataset lengths
train_val_data = TrainValData(time_series_list=stock_data_list,
                              train_length=1200,   # 1200 trading days for training
                              validate_length=150, # 150 trading days for validation
                              history_length=30,   # each input contains 30 days of history
                              sample_step=2,       # jump to days forward for each sampling
                              train_val_gap=10     # leave a 10-day gap between training and validation

Step 2: get datasets from desired period

# get one training period that start from 20110131
train, 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 instance
model = AlphaNetV3(l2=0.001, dropout=0.0)

# you may use UpDownAccuracy() here to evaluate performance
model.compile(metrics=[tf.keras.metrics.RootMeanSquaredError(),
                       UpDownAccuracy()]

# train
model.fit(train.batch(500).cache(),
          validation_data=val.batch(500).cache(),
          epochs=100)

Step 4: save and load

saving

# save model by save method
model.save("path_to_your_model")

# or just save weights
model.save_weights("path_to_your_weights")

loading

# load entire model using load_model() from alphanet module
model = load_model("path_to_your_model")

# only load weights by first creating a model instance
model = AlphaNetV3(l2=0.001, dropout=0.0)
model.load_weights("path_to_your_weights")

Note: only alphanet.load_model(filename) recognizes custom UpDownAccuracy. If you do not use UpDownAccuracy, you can also use tf.keras.models.load_model(filename).

Documentation

For detailed documentation, go to alphanet documentation.

For implementation details, go to alphanet source folder.

One Little Caveat

The 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 Note

alphanet.datamodule is completely independent from alphanet module, and can be a useful tool for training any timeseries neural network.

Release files for alphanet 0.0.20

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for alphanet 0.0.20
File Size Uploaded
alphanet-0.0.20.tar.gz 17.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for alphanet 0.0.20
File Interpreter ABI Platform
alphanet-0.0.20-py3-none-any.whl Python 3 none any Details

Total release size:33.4 kB

Release files / alphanet-0.0.20.tar.gz

Download URL alphanet-0.0.20.tar.gz
Size 17.2 kB
Tags Source
SHA-256 checksum
How to use checksums
a32dbc8a26147ace1040ab18e68704582540ecd8c5d49b4669722eb58865e3c2
BLAKE2b-256 checksum
How to use checksums
2e7d4a79e0b9059f42d6370d2aa12a4287fbdeed1b11f7cc0e172a4a30606812
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.7.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.6

Release files / alphanet-0.0.20-py3-none-any.whl

Download URL alphanet-0.0.20-py3-none-any.whl
Size 16.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6aa3780e657e37f3bec1aa857438b2cbe9a0707d33352eec4bdd72d4b9204ff0
BLAKE2b-256 checksum
How to use checksums
18d94f09cccc691d658146f22edd57d0b9c84a6b905e109faf710204672adc9d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.7.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.6

Release history Release notifications | RSS feed

This release

0.0.20 This release

2 release files

0.0.19

2 release files

0.0.18

2 release files

0.0.17

2 release files

0.0.16

2 release files

0.0.15

2 release files

0.0.14

2 release files

0.0.13

2 release files

0.0.9

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page