@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.