Skip to content

Commit

Permalink
cache len
Browse files Browse the repository at this point in the history
  • Loading branch information
m5l14i11 committed Jun 26, 2023
1 parent 1f2d1d8 commit 50aca5f
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 16 deletions.
10 changes: 6 additions & 4 deletions ta_lib/momentum/src/rsi.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
use overlap::smma::smma;

pub fn rsi(data: &[f64], period: usize) -> Vec<Option<f64>> {
if data.len() < period {
return vec![None; data.len()];
let len = data.len();

if len < period {
return vec![None; len];
}

let mut gains = vec![0.0; data.len()];
let mut losses = vec![0.0; data.len()];
let mut gains = vec![0.0; len];
let mut losses = vec![0.0; len];

for i in 1..data.len() {
let change = data[i] - data[i - 1];
Expand Down
12 changes: 7 additions & 5 deletions ta_lib/overlap/src/ema.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
pub fn ema(data: &[f64], period: usize) -> Vec<Option<f64>> {
if data.len() < period {
return vec![None; data.len()];
let len = data.len();

if len < period {
return vec![None; len];
}

let alpha = 2.0 / (period as f64 + 1.0);

let mut ema = vec![None; data.len()];

let mut ema = vec![None; len];
let mut ema_current = data[0];

for i in 1..data.len() {
for i in 1..len {
ema_current = (data[i] - ema_current) * alpha + ema_current;

if i >= period - 1 {
ema[i] = Some(ema_current);
}
Expand Down
10 changes: 8 additions & 2 deletions ta_lib/overlap/src/sma.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
pub fn sma(data: &[f64], period: usize) -> Vec<Option<f64>> {
let mut sma = vec![None; data.len()];
let len = data.len();

if len < period {
return vec![None; len];
}

let mut sma = vec![None; len];
let mut sum = 0.0;

for i in 0..data.len() {
for i in 0..len {
sum += data[i];

if i >= period {
Expand Down
12 changes: 7 additions & 5 deletions ta_lib/overlap/src/smma.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
pub fn smma(data: &[f64], period: usize) -> Vec<Option<f64>> {
if data.len() < period {
return vec![None; data.len()];
let len = data.len();

if len < period {
return vec![None; len];
}

let alpha = 1.0 / period as f64;

let mut smma = vec![None; data.len()];

let mut smma = vec![None; len];
let mut smma_current = data[0];

for i in 1..data.len() {
for i in 1..len {
smma_current = (data[i] - smma_current) * alpha + smma_current;

if i >= period - 1 {
smma[i] = Some(smma_current);
}
Expand Down

0 comments on commit 50aca5f

Please sign in to comment.