WU Trading Library 0.2.0
A backtesting and trading strategy library
Loading...
Searching...
No Matches
sma.c
Go to the documentation of this file.
1#include <stdlib.h>
2#include "wu.h"
3
4static double update(WU_SMA ma, double value) {
5 if (isnan(value)) return ma->value;
6 if (ma->len < ma->window_size)
7 ma->len++;
8 else
9 ma->sum -= ma->prev_values[ma->pos];
10 ma->sum += value;
11 ma->prev_values[ma->pos] = value;
12 ma->pos = (ma->pos + 1) % ma->window_size;
13 ma->value = ma->len < ma->window_size ? NAN : ma->sum / ma->window_size;
14 return ma->value;
15}
16
17static void delete(WU_SMA ma) {
18 free(ma->prev_values);
19 free(ma);
20}
21
22WU_SMA wu_sma_new(int window_size) {
23 WU_SMA ma = malloc(sizeof(struct WU_SMA_));
24 if (!ma) return NULL;
25
26 ma->prev_values = malloc(window_size * sizeof(double));
27 if (!ma->prev_values) {
28 free(ma);
29 return NULL;
30 }
31
32 ma->value = NAN;
33 ma->window_size = window_size;
34 for (int i = 0; i < window_size; i++) {
35 ma->prev_values[i] = NAN;
36 }
37 ma->pos = 0;
38 ma->len = 0;
39 ma->sum = 0.0;
40 ma->update = update;
41 ma->delete = delete;
42 return ma;
43}
static double update(WU_EMA ema, double value)
Definition ema.c:4
WU_SMA wu_sma_new(int window_size)
Creates a new WU_SMA (Simple Moving Average) indicator with the specified window size.
Definition sma.c:22
static double update(WU_SMA ma, double value)
Definition sma.c:4
MovingAverage is a simple moving average indicator that calculates the average of the last N values,...
Definition indicators.h:62