17 const void* inputs[]) {
18 WU_PairsTradingStrat strat = (WU_PairsTradingStrat)strat_;
38 double spread = asset_a->
value - (strat->ratio * asset_b->
value);
45 if (isnan(spread_mean) || isnan(spread_stdev))
46 return strat->base.signal_buffer;
49 double upper_band = spread_mean + strat->threshold * spread_stdev;
50 double lower_band = spread_mean - strat->threshold * spread_stdev;
59 if (spread < lower_band && strat->last_signal !=
WU_SIDE_BUY) {
66 else if (spread > upper_band && strat->last_signal !=
WU_SIDE_SELL) {
76 bool spread_reverted =
false;
78 if (strat->last_signal ==
WU_SIDE_BUY && spread > spread_mean) {
80 spread_reverted =
true;
82 else if (strat->last_signal ==
WU_SIDE_SELL && spread < spread_mean) {
84 spread_reverted =
true;
87 if (spread_reverted) {
96 return strat->base.signal_buffer;
100 WU_PairsTradingStrat strat = (WU_PairsTradingStrat)strategy;
127 strat->threshold = threshold;
128 strat->ratio = ratio;
static WU_Signal signal_buffer[NUM_OUTPUTS]
static const WU_DataType input_types[]
WU_Signal wu_signal_init(WU_TimeStamp timestamp, WU_Side side, double price, double quantity)
#define wu_indicator_delete(indicator)
Delete the indicator and free any resources allocated by it.
#define wu_indicator_update(indicator, value)
Header file for technical indicators.
WU_MStDev wu_mstdev_new(int window_size, int dof)
Creates a new WU_MStDev (Moving Standard Deviation) indicator with the specified window size and degr...
WU_SMA wu_sma_new(int window_size)
Creates a new WU_SMA (Simple Moving Average) indicator with the specified window size.
WU_PairsTradingStrat wu_pairs_trading_strat_new(int window, double threshold, double ratio)
Creates a new pairs trading strategy.
static void pairs_trading_strat_free(struct WU_Strategy_ *strategy)
static WU_Signal * pairs_trading_strat_update(struct WU_Strategy_ *strat_, const void *inputs[])
WU_PairsTradingStrat implements a classic pairs trading strategy that trades the spread between two c...
WU_Signal represents a trading signal generated by a strategy.
WU_Single represents a single value with a timestamp, which can be a price, an indicator value,...
WU_DataType
WU_DataType represents the type of input data, which can be a candle, a trade, or a single value.
@ WU_DATA_TYPE_SINGLE_VALUE