diff --git a/.github/workflows/quant.yml b/.github/workflows/quant.yml
new file mode 100644
index 00000000..68cd650f
--- /dev/null
+++ b/.github/workflows/quant.yml
@@ -0,0 +1,20 @@
+name: QUANT CI
+
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Set up Rust
+ uses: actions/setup-rust@v1
+
+ - name: Check out code
+ uses: actions/checkout@v2
+
+ - name: Test ta_lib
+ run: cargo test --manifest-path=ta_lib/Cargo.toml
diff --git a/.gitignore b/.gitignore
index 011102ba..6e8912c3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,5 @@
__pycache__
.ipynb_checkpoints
.DS_Store
-.csv
\ No newline at end of file
+.csv
+target
\ No newline at end of file
diff --git a/ta_lib/Cargo.lock b/ta_lib/Cargo.lock
new file mode 100644
index 00000000..daa55d28
--- /dev/null
+++ b/ta_lib/Cargo.lock
@@ -0,0 +1,14 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "momentum"
+version = "0.1.0"
+dependencies = [
+ "overlap",
+]
+
+[[package]]
+name = "overlap"
+version = "0.1.0"
diff --git a/ta_lib/Cargo.toml b/ta_lib/Cargo.toml
new file mode 100644
index 00000000..f07f1793
--- /dev/null
+++ b/ta_lib/Cargo.toml
@@ -0,0 +1,5 @@
+[workspace]
+members = [
+"overlap",
+"momentum"
+]
diff --git a/ta_lib/momentum/Cargo.toml b/ta_lib/momentum/Cargo.toml
new file mode 100644
index 00000000..da261e3e
--- /dev/null
+++ b/ta_lib/momentum/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "momentum"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+overlap = { path = "../overlap"}
diff --git a/ta_lib/momentum/src/lib.rs b/ta_lib/momentum/src/lib.rs
new file mode 100644
index 00000000..09eb9054
--- /dev/null
+++ b/ta_lib/momentum/src/lib.rs
@@ -0,0 +1 @@
+pub mod rsi;
diff --git a/ta_lib/momentum/src/rsi.rs b/ta_lib/momentum/src/rsi.rs
new file mode 100644
index 00000000..214e7aef
--- /dev/null
+++ b/ta_lib/momentum/src/rsi.rs
@@ -0,0 +1,90 @@
+use overlap::smma::smma;
+
+pub fn rsi(data: &[f64], period: usize) -> Vec