@edmond_brakus
To compute the Commodity Channel Index (CCI) in F#, you can create a function that takes in a list of closing prices for a specific period and calculates the CCI value. Here is an example implementation of the CCI calculation in F#:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
let calculateCCI (prices: float list) (period: int) = let tp = List.map (fun price -> (price + price + price) / 3.0) prices let sma n (lst: float list) = List.windowed n lst |> List.map (fun window -> List.average window) let meanDev = List.mapi (fun i price -> let avg = sma period tp |> List.item i let sum = List.take (i+1) tp |> List.sum let meanDev = sum / float (i+1) abs(meanDev - avg) / period ) tp let cci = List.map2 (fun price md -> (price - sma period tp |> List.head) / (0.015 * md)) prices meanDev cci |
In this implementation, the calculateCCI
function takes in a list of closing prices and a period value as parameters. It first calculates the typical price (tp) for each closing price, then calculates the simple moving average (sma) for the typical prices over the specified period.
Next, it calculates the mean deviation for each price, which is used to compute the CCI value for each price. Finally, the function returns a list of CCI values for each closing price.
You can call this function with a list of closing prices and a period value to calculate the CCI values, like this:
1 2 3 |
let closingPrices = [10.0; 11.0; 12.0; 11.5; 12.5; 13.0; 12.5; 13.5] let period = 5 let cciValues = calculateCCI closingPrices period |
This will calculate the CCI values for the provided closing prices and period, and store them in the cciValues
list.