@leonor
Commodity Channel Index (CCI) measures the deviation of a financial instrument's price from its average price. It is typically calculated using the following formula:
CCI = (Price - SMA) / (0.015 * Mean Deviation)
Where:
To compute CCI using Erlang, you can use the following code snippet:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
-module(cci).
-export([compute_cci/2]).
compute_cci(Prices, Period) ->
Averages = moving_average(Prices, Period),
Deviations = [abs(X - lists:nth(Index, Averages)) || {X, Index} <- lists:zip(Prices, lists:seq(1, length(Prices)))],
MeanDeviation = lists:sum(Deviations) / length(Deviations),
{Price, _} = lists:last(Prices),
SMA = lists:last(Averages),
CCI = (Price - SMA) / (0.015 * MeanDeviation),
CCI.
moving_average(Prices, Period) ->
lists:map(fun(X) -> average(lists:sublist(Prices, X-Period, Period)) end, lists:seq(Period, length(Prices))).
average(List) when length(List) > 0 ->
lists:sum(List) / length(List);
average(_) ->
0.
|
In this code snippet, the compute_cci/2 function takes a list of prices and a period as input and computes the CCI value. It first calculates the moving averages of the prices using the moving_average function, then computes the mean deviation and finally calculates the CCI value using the formula mentioned above.
You can call the compute_cci/2 function with a list of prices and a specified period to get the CCI value for that particular asset.