72 KiB
Use technical analysis functions to apply algorithms to your time series data. Many of these algorithms are often used to analyze financial and investment data, but have application in other use cases as well.
Predictive analysis
Predictive analysis functions are a type of technical analysis algorithms that predict and forecast future values.
HOLT_WINTERS()
Returns N number of predicted field values
using the Holt-Winters seasonal method.
HOLT_WINTERS_WITH_FIT()
returns the fitted values in addition to N
seasonally
adjusted predicted field values.
Input data points must occur at regular time intervals.
To ensure regular time intervals, HOLT_WINTERS
requires an aggregate expression
as input and a a GROUP BY time()
to apply the aggregate operation at regular intervals.
Use HOLT_WINTERS()
to:
- Predict when data values will cross a given threshold
- Compare predicted values with actual values to detect anomalies in your data
HOLT_WINTERS[_WITH_FIT](aggregate_expression, N, S)
Arguments
- aggregate_expression: Aggregate operation on a specified expression.
The operation can use any aggregate function.
The expression can operate on a field key,
constant, regular expression, or wildcard (
*
). Supports numeric fields. - N: Number of values to predict.
Predicted values occur at the same interval specified in the
GROUP BY time()
clause. - S: Seasonal pattern length (number of values per season) to use when
adjusting for seasonal patterns.
To not seasonally adjust predicted values, set
S
to0
or1.
Notable behaviors
- In some cases, you may receive fewer than
N
predicted points. This typically occurs when the seasonal adjustment (S
) is invalid or when input data is not suited for the Holt Winters algorithm.
Examples
The following examples use the NOAA Bay Area weather sample data.
{{< expand-wrapper >}} {{% expand "Use Holt Winters to predict field values with seasonal adjustment" %}}
SELECT
HOLT_WINTERS(MEAN(temp_avg), 12, 12)
FROM weather
WHERE
location = 'San Francisco'
AND time >= '2020-01-01T00:00:00Z'
AND time <= '2022-12-31T00:00:00Z'
GROUP BY time(30d)
{{% influxql/table-meta %}} name: weather {{% /influxql/table-meta %}}
time | holt_winters |
---|---|
2023-01-23T00:00:00Z | 52.141810685706844 |
2023-02-22T00:00:00Z | 55.41941302100692 |
2023-03-24T00:00:00Z | 59.74300473524414 |
2023-04-23T00:00:00Z | 59.91932719987093 |
2023-05-23T00:00:00Z | 56.03083957191051 |
2023-06-22T00:00:00Z | 59.98437978757551 |
2023-07-22T00:00:00Z | 60.903170945334175 |
2023-08-21T00:00:00Z | 60.75738169893358 |
2023-09-20T00:00:00Z | 56.619132830933445 |
2023-10-20T00:00:00Z | 56.10559366563841 |
2023-11-19T00:00:00Z | 56.248977829575935 |
2023-12-19T00:00:00Z | 56.075540144158985 |
{{% /expand %}} {{% expand "Use Holt Winters to predict field values with no seasonal adjustment" %}}
SELECT
HOLT_WINTERS(MEAN(temp_avg), 12, 0)
FROM weather
WHERE
location = 'San Francisco'
AND time >= '2020-01-01T00:00:00Z'
AND time <= '2022-12-31T00:00:00Z'
GROUP BY time(30d)
{{% influxql/table-meta %}} name: weather {{% /influxql/table-meta %}}
time | holt_winters |
---|---|
2023-01-23T00:00:00Z | 58.55632627159769 |
2023-02-22T00:00:00Z | 58.55632627159944 |
2023-03-24T00:00:00Z | 58.55632627160024 |
2023-04-23T00:00:00Z | 58.55632627160061 |
2023-05-23T00:00:00Z | 58.55632627160079 |
2023-06-22T00:00:00Z | 58.55632627160087 |
2023-07-22T00:00:00Z | 58.5563262716009 |
2023-08-21T00:00:00Z | 58.55632627160092 |
2023-09-20T00:00:00Z | 58.55632627160093 |
2023-10-20T00:00:00Z | 58.55632627160094 |
2023-11-19T00:00:00Z | 58.55632627160094 |
2023-12-19T00:00:00Z | 58.55632627160094 |
{{% /expand %}}
{{% expand "Use Holt Winters to predict field values with fitted values" %}}
SELECT
HOLT_WINTERS_WITH_FIT(MEAN(temp_avg), 12, 12)
FROM weather
WHERE
location = 'San Francisco'
AND time >= '2021-01-01T00:00:00Z'
AND time <= '2022-12-31T00:00:00Z'
GROUP BY time(30d)
{{% influxql/table-meta %}} name: weather {{% /influxql/table-meta %}}
time | holt_winters_with_fit |
---|---|
2020-12-04T00:00:00Z | 50.5 |
2021-01-03T00:00:00Z | 53.280924101779426 |
2021-02-02T00:00:00Z | 52.099111942046704 |
2021-03-04T00:00:00Z | 55.84541855092053 |
2021-04-03T00:00:00Z | 60.06803481717513 |
2021-05-03T00:00:00Z | 60.414989273392976 |
2021-06-02T00:00:00Z | 58.265755948192606 |
2021-07-02T00:00:00Z | 63.12426388001118 |
2021-08-01T00:00:00Z | 64.34281315294628 |
2021-08-31T00:00:00Z | 62.701261106938865 |
2021-09-30T00:00:00Z | 58.39095413696881 |
2021-10-30T00:00:00Z | 57.571954549171174 |
2021-11-29T00:00:00Z | 57.72622091917164 |
2021-12-29T00:00:00Z | 56.21981843845102 |
2022-01-28T00:00:00Z | 52.592076197024845 |
2022-02-27T00:00:00Z | 55.20608671167453 |
2022-03-29T00:00:00Z | 59.01290245961656 |
2022-04-28T00:00:00Z | 59.10660216049941 |
2022-05-28T00:00:00Z | 55.87577637598558 |
2022-06-27T00:00:00Z | 59.10005762573857 |
2022-07-27T00:00:00Z | 60.04395791516323 |
2022-08-26T00:00:00Z | 59.76994469907478 |
2022-09-25T00:00:00Z | 56.21467016861341 |
2022-10-25T00:00:00Z | 55.76538052914458 |
2022-11-24T00:00:00Z | 55.95817013792435 |
2022-12-24T00:00:00Z | 55.78474730739332 |
2023-01-23T00:00:00Z | 52.33558076070284 |
2023-02-22T00:00:00Z | 55.15350456137378 |
2023-03-24T00:00:00Z | 58.95292137832944 |
2023-04-23T00:00:00Z | 59.15381228655361 |
2023-05-23T00:00:00Z | 55.77542228450764 |
2023-06-22T00:00:00Z | 59.05797349347727 |
2023-07-22T00:00:00Z | 59.87830149275526 |
2023-08-21T00:00:00Z | 59.718176562030116 |
2023-09-20T00:00:00Z | 56.13817596332756 |
2023-10-20T00:00:00Z | 55.626497950276445 |
2023-11-19T00:00:00Z | 55.81338302167719 |
2023-12-19T00:00:00Z | 55.75008713518608 |
{{% /expand %}} {{< /expand-wrapper >}}
Technical analysis functions
Technical analysis functions apply widely used algorithms to your data. While they are primarily used in finance and investing, they have application in other industries.
- Notable behaviors of technical analysis functions
- CHANDE_MOMENTUM_OSCILLATOR()
- DOUBLE_EXPONENTIAL_MOVING_AVERAGE()
- EXPONENTIAL_MOVING_AVERAGE()
- KAUFMANS_EFFICIENCY_RATIO()
- KAUFMANS_ADAPTIVE_MOVING_AVERAGE()
- RELATIVE_STRENGTH_INDEX()
- TRIPLE_EXPONENTIAL_MOVING_AVERAGE()
- TRIPLE_EXPONENTIAL_DERIVATIVE()
Notable behaviors of technical analysis functions
Must use aggregate or selector functions when grouping by time
All technical analysis functions support GROUP BY
clauses that group by tags,
but do not directly support GROUP BY
clauses that group by time.
To use technical analysis functions with with a GROUP BY time()
clause, apply
an aggregate
or selector
function to the field_expression argument.
The technical analysis function operates on the result of the aggregate or
selector operation.
CHANDE_MOMENTUM_OSCILLATOR()
The Chande Momentum Oscillator (CMO) is a technical momentum indicator developed by Tushar Chande. The CMO indicator is created by calculating the difference between the sum of all recent higher data points and the sum of all recent lower data points, then dividing the result by the sum of all data movement over a given time period. The result is multiplied by 100 to give the -100 to +100 range. {{% cite %}}Source{{% /cite %}}
CHANDE_MOMENTUM_OSCILLATOR(field_expression, period[, hold_period[, warmup_type]])
Arguments
-
field_expression: Expression to identify one or more fields to operate on. Can be a field key, constant, regular expression, or wildcard (
*
). Supports numeric field types. -
period: Number of values to use as the sample size for the algorithm. Supports integers greater than or equal to 1. This also controls the exponential decay rate (α) used to determine the weight of an historical value. With a period of
3
, the algorithm uses the current value and the previous two values. -
hold_period: Number of values the algorithm needs before emitting results. Default is
-1
, which means thehold_period
is determined by thewarmup_type
andperiod
. Must be an integer greater than or equal to-1
.Warmup type Default hold_period exponential period
simple period
none period - 1
-
warmup_type: Controls how the algorithm initializes the first
period
values. Supports the following warmup types:- exponential: (Default) Exponential moving average of the first
period
values with scaling alpha (α). When this method is used andhold_period
is unspecified or -1, the algorithm may start emitting points after a much smaller sample size than with simple. - simple: Simple moving average of the first
period
values. - none: The algorithm does not perform any warmup at all.
- exponential: (Default) Exponential moving average of the first
Notable behaviors
Examples
{{< expand-wrapper >}}
{{% expand "Apply CHANDE_MOMENTUM_OSCILLATOR
to a field" %}}
The following example uses the Home sensor sample data.
SELECT
CHANDE_MOMENTUM_OSCILLATOR(temp, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | chande_momentum_oscillator |
---|---|
2022-01-01T11:00:00Z | 53.84615384615377 |
2022-01-01T12:00:00Z | 55.5555555555555 |
2022-01-01T13:00:00Z | -19.999999999999858 |
2022-01-01T14:00:00Z | 14.285714285714432 |
2022-01-01T15:00:00Z | 59.99999999999972 |
2022-01-01T16:00:00Z | -14.285714285714432 |
2022-01-01T17:00:00Z | -14.285714285714432 |
2022-01-01T18:00:00Z | 38.46153846153834 |
2022-01-01T19:00:00Z | 28.57142857142868 |
2022-01-01T20:00:00Z | 20 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply CHANDE_MOMENTUM_OSCILLATOR
to each field" %}}
The following example uses the Home sensor sample data.
SELECT
CHANDE_MOMENTUM_OSCILLATOR(*, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | chande_momentum_oscillator_co | chande_momentum_oscillator_hum | chande_momentum_oscillator_temp |
---|---|---|---|
2022-01-01T11:00:00Z | 0 | 20 | 53.84615384615377 |
2022-01-01T12:00:00Z | 0 | 20 | 55.5555555555555 |
2022-01-01T13:00:00Z | 100 | 42.85714285714228 | -19.999999999999858 |
2022-01-01T14:00:00Z | 100 | 24.999999999999332 | 14.285714285714432 |
2022-01-01T15:00:00Z | 100 | 25.000000000000444 | 59.99999999999972 |
2022-01-01T16:00:00Z | 100 | 0 | -14.285714285714432 |
2022-01-01T17:00:00Z | 100 | -100 | -14.285714285714432 |
2022-01-01T18:00:00Z | 100 | 50.0000000000003 | 38.46153846153834 |
2022-01-01T19:00:00Z | 100 | 28.5714285714285 | 28.57142857142868 |
2022-01-01T20:00:00Z | 100 | 38.461538461538545 | 20 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply CHANDE_MOMENTUM_OSCILLATOR
with a custom hold period" %}}
The following example uses the Home sensor sample data.
SELECT
CHANDE_MOMENTUM_OSCILLATOR(temp, 4, 6)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | chande_momentum_oscillator |
---|---|
2022-01-01T14:00:00Z | 14.285714285714432 |
2022-01-01T15:00:00Z | 59.99999999999972 |
2022-01-01T16:00:00Z | -14.285714285714432 |
2022-01-01T17:00:00Z | -14.285714285714432 |
2022-01-01T18:00:00Z | 38.46153846153834 |
2022-01-01T19:00:00Z | 28.57142857142868 |
2022-01-01T20:00:00Z | 20 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply CHANDE_MOMENTUM_OSCILLATOR
with a default non-default warmup type" %}}
The following example uses the Home sensor sample data.
SELECT
CHANDE_MOMENTUM_OSCILLATOR(temp, 4, -1, 'simple')
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | chande_momentum_oscillator |
---|---|
2022-01-01T12:00:00Z | 94.9367088607595 |
2022-01-01T13:00:00Z | 95.04132231404957 |
2022-01-01T14:00:00Z | 95.04132231404955 |
2022-01-01T15:00:00Z | 92.68218929543389 |
2022-01-01T16:00:00Z | 83.79002019036625 |
2022-01-01T17:00:00Z | 84.72964405398058 |
2022-01-01T18:00:00Z | 86.77405015296912 |
2022-01-01T19:00:00Z | 76.28466518769179 |
2022-01-01T20:00:00Z | 53.322717259176535 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply CHANDE_MOMENTUM_OSCILLATOR
to time windows (grouped by time)" %}}
The following example use the NOAA Bay Area weather sample data.
SELECT
CHANDE_MOMENTUM_OSCILLATOR(MEAN(temp_avg), 4)
FROM weather
WHERE
location = 'San Francisco'
AND time >= '2020-01-01T00:00:00Z'
AND time <= '2022-12-31T23:59:59Z'
GROUP BY time(90d)
{{% influxql/table-meta %}} name: weather {{% /influxql/table-meta %}}
time | chande_momentum_oscillator |
---|---|
2020-07-07T00:00:00Z | 100 |
2020-10-05T00:00:00Z | 21.498959056210964 |
2021-01-03T00:00:00Z | 2.0072053525475924 |
2021-04-03T00:00:00Z | -6.190741773563866 |
2021-07-02T00:00:00Z | -8.924485125858132 |
2021-09-30T00:00:00Z | 1.2078830260648301 |
2021-12-29T00:00:00Z | -5.181655747468743 |
2022-03-29T00:00:00Z | -2.3768115942029 |
2022-06-27T00:00:00Z | 6.511381683430422 |
2022-09-25T00:00:00Z | -7.7487391104997485 |
2022-12-24T00:00:00Z | 2.928763268960232 |
{{% /expand %}} {{< /expand-wrapper >}}
DOUBLE_EXPONENTIAL_MOVING_AVERAGE()
The Double Exponential Moving Average (DEMA) attempts to remove the inherent lag associated with moving averages by placing more weight on recent values. The name suggests this is achieved by applying a double exponential smoothing which is not the case. The value of an EMA is doubled. To keep the value in line with the actual data and to remove the lag, the value "EMA of EMA" is subtracted from the previously doubled EMA. {{% cite %}}Source{{% /cite %}}
DOUBLE_EXPONENTIAL_MOVING_AVERAGE(field_expression, period[, hold_period[, warmup_type]])
Arguments
-
field_expression: Expression to identify one or more fields to operate on. Can be a field key, constant, regular expression, or wildcard (
*
). Supports numeric field types. -
period: Number of values to use as the sample size for the algorithm. Supports integers greater than or equal to 1. This also controls the exponential decay rate (α) used to determine the weight of an historical value. With a period of
3
, the algorithm uses the current value and the previous two values. -
hold_period: Number of values the algorithm needs before emitting results. Default is
-1
, which means thehold_period
is determined by thewarmup_type
andperiod
. Must be an integer greater than or equal to-1
.Warmup type Default hold_period exponential period - 1
simple (period - 1) × 2
-
warmup_type: Controls how the algorithm initializes the first
period
values. Supports the following warmup types:- exponential: (Default) Exponential moving average of the first
period
values with scaling alpha (α). When this method is used andhold_period
is unspecified or -1, the algorithm may start emitting points after a much smaller sample size than with simple. - simple: Simple moving average of the first
period
values.
- exponential: (Default) Exponential moving average of the first
Notable behaviors
Examples
{{< expand-wrapper >}}
{{% expand "Apply DOUBLE_EXPONENTIAL_MOVING_AVERAGE
to a field" %}}
The following example uses the Home sensor sample data.
SELECT
DOUBLE_EXPONENTIAL_MOVING_AVERAGE(temp, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | double_exponential_moving_average |
---|---|
2022-01-01T11:00:00Z | 22.630333333333333 |
2022-01-01T12:00:00Z | 22.5854 |
2022-01-01T13:00:00Z | 22.747560000000004 |
2022-01-01T14:00:00Z | 22.814328 |
2022-01-01T15:00:00Z | 22.772071999999998 |
2022-01-01T16:00:00Z | 22.55332832 |
2022-01-01T17:00:00Z | 22.642048063999997 |
2022-01-01T18:00:00Z | 23.0672594816 |
2022-01-01T19:00:00Z | 23.12957407488 |
2022-01-01T20:00:00Z | 22.89127547648 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply DOUBLE_EXPONENTIAL_MOVING_AVERAGE
to each field" %}}
The following example uses the Home sensor sample data.
SELECT
DOUBLE_EXPONENTIAL_MOVING_AVERAGE(*, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | double_exponential_moving_average_co | double_exponential_moving_average_hum | double_exponential_moving_average_temp |
---|---|---|---|
2022-01-01T11:00:00Z | 0 | 36.056000000000004 | 22.630333333333333 |
2022-01-01T12:00:00Z | 0 | 36.019200000000005 | 22.5854 |
2022-01-01T13:00:00Z | 0.64 | 36.322880000000005 | 22.747560000000004 |
2022-01-01T14:00:00Z | 0.9279999999999999 | 36.332544000000006 | 22.814328 |
2022-01-01T15:00:00Z | 2.3232 | 36.266816000000006 | 22.772071999999998 |
2022-01-01T16:00:00Z | 5.49376 | 36.104463360000004 | 22.55332832 |
2022-01-01T17:00:00Z | 8.15616 | 36.029302272 | 22.642048063999997 |
2022-01-01T18:00:00Z | 15.0096384 | 36.573555916800004 | 23.0672594816 |
2022-01-01T19:00:00Z | 20.51534848 | 36.62971828224 | 23.12957407488 |
2022-01-01T20:00:00Z | 25.294948352 | 36.581181808640004 | 22.89127547648 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply DOUBLE_EXPONENTIAL_MOVING_AVERAGE
with a custom hold period" %}}
The following example uses the Home sensor sample data.
SELECT
DOUBLE_EXPONENTIAL_MOVING_AVERAGE(temp, 4, 6)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | double_exponential_moving_average |
---|---|
2022-01-01T14:00:00Z | 22.814328 |
2022-01-01T15:00:00Z | 22.772071999999998 |
2022-01-01T16:00:00Z | 22.55332832 |
2022-01-01T17:00:00Z | 22.642048063999997 |
2022-01-01T18:00:00Z | 23.0672594816 |
2022-01-01T19:00:00Z | 23.12957407488 |
2022-01-01T20:00:00Z | 22.89127547648 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply DOUBLE_EXPONENTIAL_MOVING_AVERAGE
with a default non-default warmup type" %}}
The following example uses the Home sensor sample data.
SELECT
DOUBLE_EXPONENTIAL_MOVING_AVERAGE(temp, 4, -1, 'simple')
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | double_exponential_moving_average |
---|---|
2022-01-01T14:00:00Z | 22.8312 |
2022-01-01T15:00:00Z | 22.792303999999998 |
2022-01-01T16:00:00Z | 22.5715328 |
2022-01-01T17:00:00Z | 22.65660992 |
2022-01-01T18:00:00Z | 23.078180096 |
2022-01-01T19:00:00Z | 23.137436544 |
2022-01-01T20:00:00Z | 22.89677901824 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply DOUBLE_EXPONENTIAL_MOVING_AVERAGE
to time windows (grouped by time)" %}}
The following example use the NOAA Bay Area weather sample data.
SELECT
DOUBLE_EXPONENTIAL_MOVING_AVERAGE(MEAN(temp_avg), 4)
FROM weather
WHERE
location = 'San Francisco'
AND time >= '2020-01-01T00:00:00Z'
AND time <= '2022-12-31T23:59:59Z'
GROUP BY time(90d)
{{% influxql/table-meta %}} name: weather {{% /influxql/table-meta %}}
time | double_exponential_moving_average |
---|---|
2020-07-07T00:00:00Z | 63.01034259259259 |
2020-10-05T00:00:00Z | 59.68671666666667 |
2021-01-03T00:00:00Z | 56.266558888888895 |
2021-04-03T00:00:00Z | 58.20687488888889 |
2021-07-02T00:00:00Z | 61.229622000000006 |
2021-09-30T00:00:00Z | 58.78596032888889 |
2021-12-29T00:00:00Z | 55.1067106968889 |
2022-03-29T00:00:00Z | 57.311773784533344 |
2022-06-27T00:00:00Z | 61.66637935722668 |
2022-09-25T00:00:00Z | 57.77452777735112 |
2022-12-24T00:00:00Z | 55.044203430886405 |
{{% /expand %}} {{< /expand-wrapper >}}
EXPONENTIAL_MOVING_AVERAGE()
An exponential moving average (EMA) (or exponentially weighted moving average) is a type of moving average similar to a simple moving average, except more weight is given to the latest data.
This type of moving average reacts faster to recent data changes than a simple moving average. {{% cite %}}Source{{% /cite %}}
EXPONENTIAL_MOVING_AVERAGE(field_expression, period[, hold_period[, warmup_type]])
Arguments
-
field_expression: Expression to identify one or more fields to operate on. Can be a field key, constant, regular expression, or wildcard (
*
). Supports numeric field types. -
period: Number of values to use as the sample size for the algorithm. Supports integers greater than or equal to 1. This also controls the exponential decay rate (α) used to determine the weight of an historical value. With a period of
3
, the algorithm uses the current value and the previous two values. -
hold_period: Number of values the algorithm needs before emitting results. Default is
-1
, which means thehold_period
is determined by thewarmup_type
andperiod
. Must be an integer greater than or equal to-1
.Warmup type Default hold_period exponential period - 1
simple period - 1
-
warmup_type: Controls how the algorithm initializes the first
period
values. Supports the following warmup types:- exponential: (Default) Exponential moving average of the first
period
values with scaling alpha (α). When this method is used andhold_period
is unspecified or -1, the algorithm may start emitting points after a much smaller sample size than with simple. - simple: Simple moving average of the first
period
values.
- exponential: (Default) Exponential moving average of the first
Notable behaviors
Examples
{{< expand-wrapper >}}
{{% expand "Apply EXPONENTIAL_MOVING_AVERAGE
to a field" %}}
The following example uses the Home sensor sample data.
SELECT
EXPONENTIAL_MOVING_AVERAGE(temp, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | exponential_moving_average |
---|---|
2022-01-01T11:00:00Z | 22.47 |
2022-01-01T12:00:00Z | 22.482 |
2022-01-01T13:00:00Z | 22.6092 |
2022-01-01T14:00:00Z | 22.68552 |
2022-01-01T15:00:00Z | 22.691312 |
2022-01-01T16:00:00Z | 22.5747872 |
2022-01-01T17:00:00Z | 22.624872319999998 |
2022-01-01T18:00:00Z | 22.894923392 |
2022-01-01T19:00:00Z | 22.9769540352 |
2022-01-01T20:00:00Z | 22.866172421119998 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply EXPONENTIAL_MOVING_AVERAGE
to each field" %}}
The following example uses the Home sensor sample data.
SELECT
EXPONENTIAL_MOVING_AVERAGE(*, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | exponential_moving_average_co | exponential_moving_average_hum | exponential_moving_average_temp |
---|---|---|---|
2022-01-01T11:00:00Z | 0 | 36.06 | 22.47 |
2022-01-01T12:00:00Z | 0 | 36.036 | 22.482 |
2022-01-01T13:00:00Z | 0.4 | 36.2216 | 22.6092 |
2022-01-01T14:00:00Z | 0.64 | 36.25296 | 22.68552 |
2022-01-01T15:00:00Z | 1.584 | 36.231776 | 22.691312 |
2022-01-01T16:00:00Z | 3.7504000000000004 | 36.1390656 | 22.5747872 |
2022-01-01T17:00:00Z | 5.85024 | 36.08343936 | 22.624872319999998 |
2022-01-01T18:00:00Z | 10.710144 | 36.410063616 | 22.894923392 |
2022-01-01T19:00:00Z | 15.2260864 | 36.4860381696 | 22.9769540352 |
2022-01-01T20:00:00Z | 19.53565184 | 36.49162290176 | 22.866172421119998 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply EXPONENTIAL_MOVING_AVERAGE
with a custom hold period" %}}
The following example uses the Home sensor sample data.
SELECT
EXPONENTIAL_MOVING_AVERAGE(temp, 4, 6)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | exponential_moving_average |
---|---|
2022-01-01T14:00:00Z | 22.68552 |
2022-01-01T15:00:00Z | 22.691312 |
2022-01-01T16:00:00Z | 22.5747872 |
2022-01-01T17:00:00Z | 22.624872319999998 |
2022-01-01T18:00:00Z | 22.894923392 |
2022-01-01T19:00:00Z | 22.9769540352 |
2022-01-01T20:00:00Z | 22.866172421119998 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply EXPONENTIAL_MOVING_AVERAGE
with a default non-default warmup type" %}}
The following example uses the Home sensor sample data.
SELECT
EXPONENTIAL_MOVING_AVERAGE(temp, 4, -1, 'simple')
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | exponential_moving_average |
---|---|
2022-01-01T11:00:00Z | 22.275 |
2022-01-01T12:00:00Z | 22.365 |
2022-01-01T13:00:00Z | 22.538999999999998 |
2022-01-01T14:00:00Z | 22.6434 |
2022-01-01T15:00:00Z | 22.66604 |
2022-01-01T16:00:00Z | 22.559624 |
2022-01-01T17:00:00Z | 22.6157744 |
2022-01-01T18:00:00Z | 22.88946464 |
2022-01-01T19:00:00Z | 22.973678784 |
2022-01-01T20:00:00Z | 22.8642072704 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply EXPONENTIAL_MOVING_AVERAGE
to time windows (grouped by time)" %}}
The following example use the NOAA Bay Area weather sample data.
SELECT
EXPONENTIAL_MOVING_AVERAGE(MEAN(temp_avg), 4)
FROM weather
WHERE
location = 'San Francisco'
AND time >= '2020-01-01T00:00:00Z'
AND time <= '2022-12-31T23:59:59Z'
GROUP BY time(90d)
{{% influxql/table-meta %}} name: weather {{% /influxql/table-meta %}}
time | exponential_moving_average |
---|---|
2020-07-07T00:00:00Z | 59.971944444444446 |
2020-10-05T00:00:00Z | 58.65427777777778 |
2021-01-03T00:00:00Z | 56.77478888888889 |
2021-04-03T00:00:00Z | 57.86042888888889 |
2021-07-02T00:00:00Z | 59.836257333333336 |
2021-09-30T00:00:00Z | 58.657309955555554 |
2021-12-29T00:00:00Z | 56.38994152888889 |
2022-03-29T00:00:00Z | 57.44729825066667 |
2022-06-27T00:00:00Z | 60.13504561706667 |
2022-09-25T00:00:00Z | 58.085471814684446 |
2022-12-24T00:00:00Z | 56.30128308881067 |
{{% /expand %}} {{< /expand-wrapper >}}
KAUFMANS_EFFICIENCY_RATIO()
Kaufman's Efficiency Ration, or simply "Efficiency Ratio" (ER), is calculated by dividing the data change over a period by the absolute sum of the data movements that occurred to achieve that change. The resulting ratio ranges between 0 and 1 with higher values representing a more efficient or trending market.
The ER is very similar to the Chande Momentum Oscillator (CMO). The difference is that the CMO takes market direction into account, but if you take the absolute CMO and divide by 100, you you get the Efficiency Ratio. {{% cite %}}Source{{% /cite %}}
KAUFMANS_EFFICIENCY_RATIO(field_expression, period[, hold_period])
Arguments
- field_expression: Expression to identify one or more fields to operate on.
Can be a field key,
constant, regular expression, or wildcard (
*
). Supports numeric field types. - period: Number of values to use as the sample size for the algorithm.
Supports integers greater than or equal to 1.
This also controls the exponential decay rate (α) used to determine the weight
of an historical value.
With a period of
3
, the algorithm uses the current value and the previous two values. - hold_period: Number of values the algorithm needs before emitting results.
Default is the same as
period
. Must be an integer greater than or equal to1
.
Notable behaviors
Examples
{{< expand-wrapper >}}
{{% expand "Apply KAUFMANS_EFFICIENCY_RATIO
to a field" %}}
The following example uses the Home sensor sample data.
SELECT
KAUFMANS_EFFICIENCY_RATIO(temp, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | kaufmans_efficiency_ratio |
---|---|
2022-01-01T12:00:00Z | 0.555555555555555 |
2022-01-01T13:00:00Z | 0.19999999999999857 |
2022-01-01T14:00:00Z | 0.14285714285714432 |
2022-01-01T15:00:00Z | 0.5999999999999972 |
2022-01-01T16:00:00Z | 0.14285714285714432 |
2022-01-01T17:00:00Z | 0.14285714285714432 |
2022-01-01T18:00:00Z | 0.38461538461538336 |
2022-01-01T19:00:00Z | 0.2857142857142868 |
2022-01-01T20:00:00Z | 0.2 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply KAUFMANS_EFFICIENCY_RATIO
to each field" %}}
The following example uses the Home sensor sample data.
SELECT
KAUFMANS_EFFICIENCY_RATIO(*, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | kaufmans_efficiency_ratio_co | kaufmans_efficiency_ratio_hum | kaufmans_efficiency_ratio_temp |
---|---|---|---|
2022-01-01T12:00:00Z | 0 | 0.2 | 0.555555555555555 |
2022-01-01T13:00:00Z | 1 | 0.4285714285714228 | 0.19999999999999857 |
2022-01-01T14:00:00Z | 1 | 0.24999999999999334 | 0.14285714285714432 |
2022-01-01T15:00:00Z | 1 | 0.25000000000000444 | 0.5999999999999972 |
2022-01-01T16:00:00Z | 1 | 0 | 0.14285714285714432 |
2022-01-01T17:00:00Z | 1 | 1 | 0.14285714285714432 |
2022-01-01T18:00:00Z | 1 | 0.500000000000003 | 0.38461538461538336 |
2022-01-01T19:00:00Z | 1 | 0.285714285714285 | 0.2857142857142868 |
2022-01-01T20:00:00Z | 1 | 0.38461538461538547 | 0.2 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply KAUFMANS_EFFICIENCY_RATIO
with a custom hold period" %}}
The following example uses the Home sensor sample data.
SELECT
KAUFMANS_EFFICIENCY_RATIO(temp, 4, 6)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | kaufmans_efficiency_ratio |
---|---|
2022-01-01T14:00:00Z | 0.14285714285714432 |
2022-01-01T15:00:00Z | 0.5999999999999972 |
2022-01-01T16:00:00Z | 0.14285714285714432 |
2022-01-01T17:00:00Z | 0.14285714285714432 |
2022-01-01T18:00:00Z | 0.38461538461538336 |
2022-01-01T19:00:00Z | 0.2857142857142868 |
2022-01-01T20:00:00Z | 0.2 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply KAUFMANS_EFFICIENCY_RATIO
to time windows (grouped by time)" %}}
The following example use the NOAA Bay Area weather sample data.
SELECT
KAUFMANS_EFFICIENCY_RATIO(MEAN(temp_avg), 4)
FROM weather
WHERE
location = 'San Francisco'
AND time >= '2020-01-01T00:00:00Z'
AND time <= '2022-12-31T23:59:59Z'
GROUP BY time(90d)
{{% influxql/table-meta %}} name: weather {{% /influxql/table-meta %}}
time | kaufmans_efficiency_ratio |
---|---|
2020-10-05T00:00:00Z | 0.21498959056210964 |
2021-01-03T00:00:00Z | 0.020072053525475923 |
2021-04-03T00:00:00Z | 0.06190741773563866 |
2021-07-02T00:00:00Z | 0.08924485125858131 |
2021-09-30T00:00:00Z | 0.0120788302606483 |
2021-12-29T00:00:00Z | 0.05181655747468743 |
2022-03-29T00:00:00Z | 0.023768115942028996 |
2022-06-27T00:00:00Z | 0.06511381683430421 |
2022-09-25T00:00:00Z | 0.07748739110499749 |
2022-12-24T00:00:00Z | 0.029287632689602317 |
{{% /expand %}} {{< /expand-wrapper >}}
KAUFMANS_ADAPTIVE_MOVING_AVERAGE()
Kaufman's Adaptive Moving Average (KAMA) is a moving average designed to account for sample noise or volatility. KAMA will closely follow data points when the data swings are relatively small and noise is low. KAMA will adjust when the data swings widen and follow data from a greater distance. This trend-following indicator can be used to identify the overall trend, time turning points and filter data movements. {{% cite %}}Source{{% /cite %}}
KAUFMANS_ADAPTIVE_MOVING_AVERAGE(field_expression, period[, hold_period])
Arguments
- field_expression: Expression to identify one or more fields to operate on.
Can be a field key,
constant, regular expression, or wildcard (
*
). Supports numeric field types. - period: Number of values to use as the sample size for the algorithm.
Supports integers greater than or equal to 1.
This also controls the exponential decay rate (α) used to determine the weight
of an historical value.
With a period of
3
, the algorithm uses the current value and the previous two values. - hold_period: Number of values the algorithm needs before emitting results.
Default is the same as
period
. Must be an integer greater than or equal to1
.
Notable behaviors
Examples
{{< expand-wrapper >}}
{{% expand "Apply KAUFMANS_ADAPTIVE_MOVING_AVERAGE
to a field" %}}
The following example uses the Home sensor sample data.
SELECT
KAUFMANS_ADAPTIVE_MOVING_AVERAGE(temp, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | kaufmans_adaptive_moving_average |
---|---|
2022-01-01T12:00:00Z | 22.415923627793976 |
2022-01-01T13:00:00Z | 22.429061002513993 |
2022-01-01T14:00:00Z | 22.43746706604819 |
2022-01-01T15:00:00Z | 22.48506721007708 |
2022-01-01T16:00:00Z | 22.48313945274385 |
2022-01-01T17:00:00Z | 22.488053855248438 |
2022-01-01T18:00:00Z | 22.559247409584806 |
2022-01-01T19:00:00Z | 22.589508047087516 |
2022-01-01T20:00:00Z | 22.59328743653712 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply KAUFMANS_ADAPTIVE_MOVING_AVERAGE
to each field" %}}
The following example uses the Home sensor sample data.
SELECT
KAUFMANS_ADAPTIVE_MOVING_AVERAGE(*, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | kaufmans_adaptive_moving_average_co | kaufmans_adaptive_moving_average_hum | kaufmans_adaptive_moving_average_temp |
---|---|---|---|
2022-01-01T12:00:00Z | 0 | 36 | 22.415923627793976 |
2022-01-01T13:00:00Z | 0.44444444444444453 | 36.052029136316335 | 22.429061002513993 |
2022-01-01T14:00:00Z | 0.6913580246913581 | 36.063497322866624 | 22.43746706604819 |
2022-01-01T15:00:00Z | 1.7174211248285327 | 36.06981031521873 | 22.48506721007708 |
2022-01-01T16:00:00Z | 4.065233958238074 | 36.069519741586184 | 22.48313945274385 |
2022-01-01T17:00:00Z | 6.258463310132264 | 36.03862207865899 | 22.488053855248438 |
2022-01-01T18:00:00Z | 11.476924061184592 | 36.153751327944484 | 22.559247409584806 |
2022-01-01T19:00:00Z | 16.153846700658107 | 36.17872350475971 | 22.589508047087516 |
2022-01-01T20:00:00Z | 20.52991483369895 | 36.206893865280215 | 22.59328743653712 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply KAUFMANS_ADAPTIVE_MOVING_AVERAGE
with a custom hold period" %}}
The following example uses the Home sensor sample data.
SELECT
KAUFMANS_ADAPTIVE_MOVING_AVERAGE(temp, 4, 6)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | kaufmans_adaptive_moving_average |
---|---|
2022-01-01T14:00:00Z | 22.43746706604819 |
2022-01-01T15:00:00Z | 22.48506721007708 |
2022-01-01T16:00:00Z | 22.48313945274385 |
2022-01-01T17:00:00Z | 22.488053855248438 |
2022-01-01T18:00:00Z | 22.559247409584806 |
2022-01-01T19:00:00Z | 22.589508047087516 |
2022-01-01T20:00:00Z | 22.59328743653712 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply KAUFMANS_ADAPTIVE_MOVING_AVERAGE
to time windows (grouped by time)" %}}
The following example use the NOAA Bay Area weather sample data.
SELECT
KAUFMANS_ADAPTIVE_MOVING_AVERAGE(MEAN(temp_avg), 4)
FROM weather
WHERE
location = 'San Francisco'
AND time >= '2020-01-01T00:00:00Z'
AND time <= '2022-12-31T23:59:59Z'
GROUP BY time(90d)
{{% influxql/table-meta %}} name: weather {{% /influxql/table-meta %}}
time | kaufmans_adaptive_moving_average |
---|---|
2020-10-05T00:00:00Z | 64.23776629054989 |
2021-01-03T00:00:00Z | 64.17743082167587 |
2021-04-03T00:00:00Z | 64.12884833681618 |
2021-07-02T00:00:00Z | 64.11026540732492 |
2021-09-30T00:00:00Z | 64.07304846623671 |
2021-12-29T00:00:00Z | 63.97149717822299 |
2022-03-29T00:00:00Z | 63.94081206327896 |
2022-06-27T00:00:00Z | 63.94324197904272 |
2022-09-25T00:00:00Z | 63.83284150412919 |
2022-12-24T00:00:00Z | 63.76394979616807 |
{{% /expand %}} {{< /expand-wrapper >}}
RELATIVE_STRENGTH_INDEX()
The relative strength index (RSI) is a momentum indicator that compares the magnitude of recent increases and decreases over a specified time period to measure speed and change of data movements. {{% cite %}}Source{{% /cite %}}
RELATIVE_STRENGTH_INDEX(field_expression, period[, hold_period[, warmup_type]])
Arguments
-
field_expression: Expression to identify one or more fields to operate on. Can be a field key, constant, regular expression, or wildcard (
*
). Supports numeric field types. -
period: Number of values to use as the sample size for the algorithm. Supports integers greater than or equal to 1. This also controls the exponential decay rate (α) used to determine the weight of an historical value. With a period of
3
, the algorithm uses the current value and the previous two values. -
hold_period: Number of values the algorithm needs before emitting results. Default is
-1
, which means thehold_period
is the same as theperiod
. Must be an integer greater than or equal to-1
. -
warmup_type: Controls how the algorithm initializes the first
period
values. Supports the following warmup types:- exponential: (Default) Exponential moving average of the first
period
values with scaling alpha (α). When this method is used andhold_period
is unspecified or -1, the algorithm may start emitting points after a much smaller sample size than with simple. - simple: Simple moving average of the first
period
values.
- exponential: (Default) Exponential moving average of the first
Notable behaviors
Examples
{{< expand-wrapper >}}
{{% expand "Apply RELATIVE_STRENGTH_INDEX
to a field" %}}
The following example uses the Home sensor sample data.
SELECT
RELATIVE_STRENGTH_INDEX(temp, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | relative_strength_index |
---|---|
2022-01-01T12:00:00Z | 92.39130434782608 |
2022-01-01T13:00:00Z | 92.78350515463916 |
2022-01-01T14:00:00Z | 92.78350515463916 |
2022-01-01T15:00:00Z | 90.03334568358646 |
2022-01-01T16:00:00Z | 80.49022855250077 |
2022-01-01T17:00:00Z | 82.90606558962943 |
2022-01-01T18:00:00Z | 87.14940243872873 |
2022-01-01T19:00:00Z | 78.48983186121941 |
2022-01-01T20:00:00Z | 62.04865064241268 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply RELATIVE_STRENGTH_INDEX
to each field" %}}
The following example uses the Home sensor sample data.
SELECT
RELATIVE_STRENGTH_INDEX(*, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | relative_strength_index_co | relative_strength_index_hum | relative_strength_index_temp |
---|---|---|---|
2022-01-01T12:00:00Z | 98.11827956989245 | 92.39130434782608 | |
2022-01-01T13:00:00Z | 100 | 98.23677581863977 | 92.78350515463916 |
2022-01-01T14:00:00Z | 100 | 95.04467912266443 | 92.78350515463916 |
2022-01-01T15:00:00Z | 100 | 93.02941956003185 | 90.03334568358646 |
2022-01-01T16:00:00Z | 100 | 88.05084037126848 | 80.49022855250077 |
2022-01-01T17:00:00Z | 100 | 88.05084037126848 | 82.90606558962943 |
2022-01-01T18:00:00Z | 100 | 91.63299959013992 | 87.14940243872873 |
2022-01-01T19:00:00Z | 100 | 80.85951627810859 | 78.48983186121941 |
2022-01-01T20:00:00Z | 100 | 76.8440852816889 | 62.04865064241268 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply RELATIVE_STRENGTH_INDEX
with a custom hold period" %}}
The following example uses the Home sensor sample data.
SELECT
RELATIVE_STRENGTH_INDEX(temp, 4, 6)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | relative_strength_index |
---|---|
2022-01-01T14:00:00Z | 92.78350515463916 |
2022-01-01T15:00:00Z | 90.03334568358646 |
2022-01-01T16:00:00Z | 80.49022855250077 |
2022-01-01T17:00:00Z | 82.90606558962943 |
2022-01-01T18:00:00Z | 87.14940243872873 |
2022-01-01T19:00:00Z | 78.48983186121941 |
2022-01-01T20:00:00Z | 62.04865064241268 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply RELATIVE_STRENGTH_INDEX
with a default non-default warmup type" %}}
The following example uses the Home sensor sample data.
SELECT
RELATIVE_STRENGTH_INDEX(temp, 4, -1, 'simple')
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | relative_strength_index |
---|---|
2022-01-01T12:00:00Z | 97.46835443037975 |
2022-01-01T13:00:00Z | 97.52066115702479 |
2022-01-01T14:00:00Z | 97.52066115702479 |
2022-01-01T15:00:00Z | 96.34109464771694 |
2022-01-01T16:00:00Z | 91.89501009518312 |
2022-01-01T17:00:00Z | 92.36482202699028 |
2022-01-01T18:00:00Z | 93.38702507648456 |
2022-01-01T19:00:00Z | 88.1423325938459 |
2022-01-01T20:00:00Z | 76.66135862958828 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply RELATIVE_STRENGTH_INDEX
to time windows (grouped by time)" %}}
The following example use the NOAA Bay Area weather sample data.
SELECT
RELATIVE_STRENGTH_INDEX(MEAN(temp_avg), 4)
FROM weather
WHERE
location = 'San Francisco'
AND time >= '2020-01-01T00:00:00Z'
AND time <= '2022-12-31T23:59:59Z'
GROUP BY time(90d)
{{% influxql/table-meta %}} name: weather {{% /influxql/table-meta %}}
time | relative_strength_index |
---|---|
2020-10-05T00:00:00Z | 69.9692046299246 |
2021-01-03T00:00:00Z | 63.37405020679043 |
2021-04-03T00:00:00Z | 70.82662989351107 |
2021-07-02T00:00:00Z | 74.90131747577793 |
2021-09-30T00:00:00Z | 56.212729394565066 |
2021-12-29T00:00:00Z | 46.095152535803514 |
2022-03-29T00:00:00Z | 60.709021374375894 |
2022-06-27T00:00:00Z | 69.93773053391476 |
2022-09-25T00:00:00Z | 44.87321655968338 |
2022-12-24T00:00:00Z | 41.845933101386215 |
{{% /expand %}} {{< /expand-wrapper >}}
TRIPLE_EXPONENTIAL_MOVING_AVERAGE()
The triple exponential moving average (TEMA) filters out volatility from conventional moving averages. While the name implies that it's a triple exponential smoothing, it's actually a composite of a single exponential moving average, a double exponential moving average, and a triple exponential moving average. {{% cite %}}Source{{% /cite %}}
TRIPLE_EXPONENTIAL_MOVING_AVERAGE(field_expression, period[, hold_period[, warmup_type]])
Arguments
-
field_expression: Expression to identify one or more fields to operate on. Can be a field key, constant, regular expression, or wildcard (
*
). Supports numeric field types. -
period: Number of values to use as the sample size for the algorithm. Supports integers greater than or equal to 1. This also controls the exponential decay rate (α) used to determine the weight of an historical value. With a period of
3
, the algorithm uses the current value and the previous two values. -
hold_period: Number of values the algorithm needs before emitting results. Default is
-1
, which means thehold_period
is determined by thewarmup_type
andperiod
. Must be an integer greater than or equal to-1
.Warmup type Default hold_period exponential period - 1
simple (period - 1) × 3
-
warmup_type: Controls how the algorithm initializes the first
period
values. Supports the following warmup types:- exponential: (Default) Exponential moving average of the first
period
values with scaling alpha (α). When this method is used andhold_period
is unspecified or -1, the algorithm may start emitting points after a much smaller sample size than with simple. - simple: Simple moving average of the first
period
values.
- exponential: (Default) Exponential moving average of the first
Notable behaviors
Examples
{{< expand-wrapper >}}
{{% expand "Apply TRIPLE_EXPONENTIAL_MOVING_AVERAGE
to a field" %}}
The following example uses the Home sensor sample data.
SELECT
TRIPLE_EXPONENTIAL_MOVING_AVERAGE(temp, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | triple_exponential_moving_average |
---|---|
2022-01-01T11:00:00Z | 22.54347777777777 |
2022-01-01T12:00:00Z | 22.499126666666672 |
2022-01-01T13:00:00Z | 22.716772000000002 |
2022-01-01T14:00:00Z | 22.790124000000006 |
2022-01-01T15:00:00Z | 22.728720799999994 |
2022-01-01T16:00:00Z | 22.465986271999995 |
2022-01-01T17:00:00Z | 22.6128236096 |
2022-01-01T18:00:00Z | 23.142821016320013 |
2022-01-01T19:00:00Z | 23.163081365760007 |
2022-01-01T20:00:00Z | 22.834869660416004 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply TRIPLE_EXPONENTIAL_MOVING_AVERAGE
to each field" %}}
The following example uses the Home sensor sample data.
SELECT
TRIPLE_EXPONENTIAL_MOVING_AVERAGE(*, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | triple_exponential_moving_average_co | triple_exponential_moving_average_hum | triple_exponential_moving_average_temp |
---|---|---|---|
2022-01-01T11:00:00Z | 0 | 36.03026666666666 | 22.54347777777777 |
2022-01-01T12:00:00Z | 0 | 35.99608 | 22.499126666666672 |
2022-01-01T13:00:00Z | 0.7840000000000001 | 36.379856000000004 | 22.716772000000002 |
2022-01-01T14:00:00Z | 1.0432 | 36.353712 | 22.790124000000006 |
2022-01-01T15:00:00Z | 2.663040000000001 | 36.25279040000001 | 22.728720799999994 |
2022-01-01T16:00:00Z | 6.300159999999999 | 36.054262656000006 | 22.465986271999995 |
2022-01-01T17:00:00Z | 8.977536 | 35.98746094080001 | 22.6128236096 |
2022-01-01T18:00:00Z | 16.698608639999996 | 36.67902875136 | 23.142821016320013 |
2022-01-01T19:00:00Z | 22.122591232 | 36.68111467007999 | 23.163081365760007 |
2022-01-01T20:00:00Z | 26.541314662400005 | 36.579546917888 | 22.834869660416004 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply TRIPLE_EXPONENTIAL_MOVING_AVERAGE
with a custom hold period" %}}
The following example uses the Home sensor sample data.
SELECT
TRIPLE_EXPONENTIAL_MOVING_AVERAGE(temp, 4, 6)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | triple_exponential_moving_average |
---|---|
2022-01-01T14:00:00Z | 22.790124000000006 |
2022-01-01T15:00:00Z | 22.728720799999994 |
2022-01-01T16:00:00Z | 22.465986271999995 |
2022-01-01T17:00:00Z | 22.6128236096 |
2022-01-01T18:00:00Z | 23.142821016320013 |
2022-01-01T19:00:00Z | 23.163081365760007 |
2022-01-01T20:00:00Z | 22.834869660416004 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply TRIPLE_EXPONENTIAL_MOVING_AVERAGE
with a default non-default warmup type" %}}
The following example uses the Home sensor sample data.
SELECT
TRIPLE_EXPONENTIAL_MOVING_AVERAGE(temp, 4, -1, 'simple')
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | triple_exponential_moving_average |
---|---|
2022-01-01T17:00:00Z | 22.65201408 |
2022-01-01T18:00:00Z | 23.164150553600003 |
2022-01-01T19:00:00Z | 23.17404420096 |
2022-01-01T20:00:00Z | 22.84003200512 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply TRIPLE_EXPONENTIAL_MOVING_AVERAGE
to time windows (grouped by time)" %}}
The following example use the NOAA Bay Area weather sample data.
SELECT
TRIPLE_EXPONENTIAL_MOVING_AVERAGE(MEAN(temp_avg), 4)
FROM weather
WHERE
location = 'San Francisco'
AND time >= '2020-01-01T00:00:00Z'
AND time <= '2022-12-31T23:59:59Z'
GROUP BY time(90d)
{{% influxql/table-meta %}} name: weather {{% /influxql/table-meta %}}
time | triple_exponential_moving_average |
---|---|
2020-07-07T00:00:00Z | 64.17547253086421 |
2020-10-05T00:00:00Z | 59.182219074074055 |
2021-01-03T00:00:00Z | 55.03945899999998 |
2021-04-03T00:00:00Z | 57.98342055555557 |
2021-07-02T00:00:00Z | 61.72370060000002 |
2021-09-30T00:00:00Z | 58.3235789128889 |
2021-12-29T00:00:00Z | 53.982153124088896 |
2022-03-29T00:00:00Z | 57.325663060373344 |
2022-06-27T00:00:00Z | 62.67482784650667 |
2022-09-25T00:00:00Z | 57.274230204423134 |
2022-12-24T00:00:00Z | 54.17634351477504 |
{{% /expand %}} {{< /expand-wrapper >}}
TRIPLE_EXPONENTIAL_DERIVATIVE()
The triple exponential derivative indicator, commonly referred to as "TRIX," is an oscillator used to identify oversold and overbought markets, and can also be used as a momentum indicator. TRIX calculates a triple exponential moving average of the log of the data input over the period of time. The previous value is subtracted from the previous value. This prevents cycles that are shorter than the defined period from being considered by the indicator.
Like many oscillators, TRIX oscillates around a zero line. When used as an oscillator, a positive value indicates an overbought market while a negative value indicates an oversold market. When used as a momentum indicator, a positive value suggests momentum is increasing while a negative value suggests momentum is decreasing. Many analysts believe that when the TRIX crosses above the zero line it gives a buy signal, and when it closes below the zero line, it gives a sell signal. {{% cite %}}Source{{% /cite %}}
TRIPLE_EXPONENTIAL_DERIVATIVE(field_expression, period[, hold_period[, warmup_type]])
Arguments
-
field_expression: Expression to identify one or more fields to operate on. Can be a field key, constant, regular expression, or wildcard (
*
). Supports numeric field types. -
period: Number of values to use as the sample size for the algorithm. Supports integers greater than or equal to 1. This also controls the exponential decay rate (α) used to determine the weight of an historical value. With a period of
3
, the algorithm uses the current value and the previous two values. -
hold_period: Number of values the algorithm needs before emitting results. Default is
-1
, which means thehold_period
is determined by thewarmup_type
andperiod
. Must be an integer greater than or equal to-1
.Warmup type Default hold_period exponential period
simple (period - 1) × 3 + 1
-
warmup_type: Controls how the algorithm initializes the first
period
values. Supports the following warmup types:- exponential: (Default) Exponential moving average of the first
period
values with scaling alpha (α). When this method is used andhold_period
is unspecified or -1, the algorithm may start emitting points after a much smaller sample size than with simple. - simple: Simple moving average of the first
period
values.
- exponential: (Default) Exponential moving average of the first
Notable behaviors
Examples
{{< expand-wrapper >}}
{{% expand "Apply TRIPLE_EXPONENTIAL_DERIVATIVE
to a field" %}}
The following example uses the Home sensor sample data.
SELECT
TRIPLE_EXPONENTIAL_DERIVATIVE(temp, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | triple_exponential_derivative |
---|---|
2022-01-01T12:00:00Z | 0.5731400170122969 |
2022-01-01T13:00:00Z | 0.5082054442170802 |
2022-01-01T14:00:00Z | 0.45740027258918126 |
2022-01-01T15:00:00Z | 0.36931756808027405 |
2022-01-01T16:00:00Z | 0.1953270968520826 |
2022-01-01T17:00:00Z | 0.13729679242548976 |
2022-01-01T18:00:00Z | 0.28596038472352703 |
2022-01-01T19:00:00Z | 0.3509641845184319 |
2022-01-01T20:00:00Z | 0.23932489811719915 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply TRIPLE_EXPONENTIAL_DERIVATIVE
to each field" %}}
The following example uses the Home sensor sample data.
SELECT
TRIPLE_EXPONENTIAL_DERIVATIVE(*, 4)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | triple_exponential_derivative_co | triple_exponential_derivative_hum | triple_exponential_derivative_temp |
---|---|---|---|
2022-01-01T12:00:00Z | 0.011689978802653656 | 0.5731400170122969 | |
2022-01-01T13:00:00Z | 0.08193865253971477 | 0.5082054442170802 | |
2022-01-01T14:00:00Z | 179.99999999999997 | 0.10794983570248107 | 0.45740027258918126 |
2022-01-01T15:00:00Z | 148.57142857142853 | 0.0905729924662868 | 0.36931756808027405 |
2022-01-01T16:00:00Z | 140.22988505747128 | 0.02876803922613469 | 0.1953270968520826 |
2022-01-01T17:00:00Z | 92.48803827751195 | -0.022670378539191294 | 0.13729679242548976 |
2022-01-01T18:00:00Z | 84.49217002237135 | 0.10699801078373206 | 0.28596038472352703 |
2022-01-01T19:00:00Z | 64.59469801081093 | 0.17000537478475408 | 0.3509641845184319 |
2022-01-01T20:00:00Z | 48.10094220759999 | 0.16771238737589567 | 0.23932489811719915 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply TRIPLE_EXPONENTIAL_DERIVATIVE
with a custom hold period" %}}
The following example uses the Home sensor sample data.
SELECT
TRIPLE_EXPONENTIAL_DERIVATIVE(temp, 4, 6)
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | triple_exponential_derivative |
---|---|
2022-01-01T14:00:00Z | 0.45740027258918126 |
2022-01-01T15:00:00Z | 0.36931756808027405 |
2022-01-01T16:00:00Z | 0.1953270968520826 |
2022-01-01T17:00:00Z | 0.13729679242548976 |
2022-01-01T18:00:00Z | 0.28596038472352703 |
2022-01-01T19:00:00Z | 0.3509641845184319 |
2022-01-01T20:00:00Z | 0.23932489811719915 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply TRIPLE_EXPONENTIAL_DERIVATIVE
with a default non-default warmup type" %}}
The following example uses the Home sensor sample data.
SELECT
TRIPLE_EXPONENTIAL_DERIVATIVE(temp, 4, -1, 'simple')
FROM home
WHERE
room = 'Kitchen'
{{% influxql/table-meta %}} name: home {{% /influxql/table-meta %}}
{{% influxdb/custom-timestamps %}}
time | triple_exponential_derivative |
---|---|
2022-01-01T18:00:00Z | 0.3040309049773704 |
2022-01-01T19:00:00Z | 0.37510717611963784 |
2022-01-01T20:00:00Z | 0.2625157254706467 |
{{% /influxdb/custom-timestamps %}} {{% /expand %}}
{{% expand "Apply TRIPLE_EXPONENTIAL_DERIVATIVE
to time windows (grouped by time)" %}}
The following example use the NOAA Bay Area weather sample data.
SELECT
TRIPLE_EXPONENTIAL_DERIVATIVE(MEAN(temp_avg), 4)
FROM weather
WHERE
location = 'San Francisco'
AND time >= '2020-01-01T00:00:00Z'
AND time <= '2022-12-31T23:59:59Z'
GROUP BY time(90d)
{{% influxql/table-meta %}} name: weather {{% /influxql/table-meta %}}
time | triple_exponential_derivative |
---|---|
2020-10-05T00:00:00Z | 1.8609138140919912 |
2021-01-03T00:00:00Z | 0.8545019640246121 |
2021-04-03T00:00:00Z | 0.6716861515154271 |
2021-07-02T00:00:00Z | 1.0528294030543783 |
2021-09-30T00:00:00Z | 0.6847349621789123 |
2021-12-29T00:00:00Z | -0.18257939931221046 |
2022-03-29T00:00:00Z | -0.1722392917734461 |
2022-06-27T00:00:00Z | 0.6038050639217252 |
2022-09-25T00:00:00Z | 0.21734485841473639 |
2022-12-24T00:00:00Z | -0.44578753427667595 |
{{% /expand %}} {{< /expand-wrapper >}}