WU Trading Library 0.2.0
A backtesting and trading strategy library
Loading...
Searching...
No Matches
macd.c
Go to the documentation of this file.
1#include <stdlib.h>
2#include "wu.h"
3
4static WU_MACDResult macd_update(WU_MACD macd, double value) {
5 if (isnan(value)) {
6 return macd->value;
7 }
8 macd->len++;
9 double ema_short = wu_indicator_update(macd->ema_short, value);
10 double ema_long = wu_indicator_update(macd->ema_long, value);
11 if (macd->len <= macd->start) {
12 return macd->value;
13 }
14 double diff = ema_short - ema_long;
15 double signal = wu_indicator_update(macd->signal_line, diff);
16 macd->value = (WU_MACDResult){.macd = diff, .signal = signal, .histogram = diff - signal};
17 return macd->value;
18}
19
20static void macd_free(WU_MACD macd) {
21 wu_indicator_delete(macd->ema_short);
22 wu_indicator_delete(macd->ema_long);
23 wu_indicator_delete(macd->signal_line);
24 free(macd);
25}
26
27WU_MACD wu_macd_new(int short_window, int long_window, int signal_window,
28 double smoothing) {
29 WU_MACD macd = malloc(sizeof(struct WU_MACD_));
30 macd->ema_short = wu_ema_new(short_window, smoothing);
31 macd->ema_long = wu_ema_new(long_window, smoothing);
32 macd->signal_line = wu_ema_new(signal_window, smoothing);
33 macd->update = macd_update;
34 macd->delete = macd_free;
35 macd->value = (WU_MACDResult){.macd = NAN, .signal = NAN, .histogram = NAN};
36 macd->len = 0;
37 macd->start = long_window > short_window ? long_window : short_window;
38 return macd;
39}
#define wu_indicator_delete(indicator)
Delete the indicator and free any resources allocated by it.
Definition indicators.h:56
WU_EMA wu_ema_new(int window_size, double smoothing)
Creates a new WU_EMA (Exponential Moving Average) indicator with the specified period and smoothing f...
Definition ema.c:27
#define wu_indicator_update(indicator, value)
Header file for technical indicators.
Definition indicators.h:41
static void macd_free(WU_MACD macd)
Definition macd.c:20
static WU_MACDResult macd_update(WU_MACD macd, double value)
Definition macd.c:4
WU_MACD wu_macd_new(int short_window, int long_window, int signal_window, double smoothing)
Creates a new WU_MACD (Moving Average Convergence Divergence) indicator with the specified short and ...
Definition macd.c:27
The WU_MACDResult structure holds the current values of the MACD line, signal line,...
Definition indicators.h:182
The WU_MACD (Moving Average Convergence Divergence) is a trend-following momentum indicator that show...
Definition indicators.h:198