diff --git a/.github/workflows/quant.yml b/.github/workflows/quant.yml
index 19796175..e8cc4ed9 100644
--- a/.github/workflows/quant.yml
+++ b/.github/workflows/quant.yml
@@ -13,5 +13,8 @@ jobs:
- name: Check out code
uses: actions/checkout@v2
- - name: Test ta_lib
- run: cargo test --manifest-path=ta_lib/Cargo.toml
+ - name: Test
+ run: make test
+
+ - name: Check
+ run: make check
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..ac7ce334
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,10 @@
+.PHONY: test check
+
+TA_LIB_PATH ?= ta_lib/Cargo.toml
+
+test:
+ cargo test --manifest-path=$(TA_LIB_PATH)
+
+check:
+ cargo fmt --all --check --manifest-path=$(TA_LIB_PATH)
+ cargo clippy --all-features --all-targets --workspace --manifest-path=$(TA_LIB_PATH)
\ No newline at end of file
diff --git a/ta_lib/Cargo.lock b/ta_lib/Cargo.lock
index daa55d28..ef82fb33 100644
--- a/ta_lib/Cargo.lock
+++ b/ta_lib/Cargo.lock
@@ -12,3 +12,11 @@ dependencies = [
[[package]]
name = "overlap"
version = "0.1.0"
+
+[[package]]
+name = "price"
+version = "0.1.0"
+
+[[package]]
+name = "statistics"
+version = "0.1.0"
diff --git a/ta_lib/Cargo.toml b/ta_lib/Cargo.toml
index f07f1793..9fa72d42 100644
--- a/ta_lib/Cargo.toml
+++ b/ta_lib/Cargo.toml
@@ -1,5 +1,7 @@
[workspace]
members = [
"overlap",
-"momentum"
+"momentum",
+"price",
+"statistics"
]
diff --git a/ta_lib/price/Cargo.toml b/ta_lib/price/Cargo.toml
new file mode 100644
index 00000000..a00ab8fd
--- /dev/null
+++ b/ta_lib/price/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "price"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/ta_lib/price/src/lib.rs b/ta_lib/price/src/lib.rs
new file mode 100644
index 00000000..5704d791
--- /dev/null
+++ b/ta_lib/price/src/lib.rs
@@ -0,0 +1 @@
+pub mod typical;
diff --git a/ta_lib/price/src/typical.rs b/ta_lib/price/src/typical.rs
new file mode 100644
index 00000000..4561c709
--- /dev/null
+++ b/ta_lib/price/src/typical.rs
@@ -0,0 +1,30 @@
+pub fn typical_price(high: &[f64], low: &[f64], close: &[f64]) -> Vec