## Calculating The NIFTY Index

In this discussion, We will attempt to calculate the NIFTY Index in program directly from the stock prices. Till date, there has been many attempt to calculate the NIFTY index by various programmers but it all ended in non conclusive discussions because of lack of clarity.

As We are aiming the impossible, Keep an open mind and think this as a constructive discussion rather than some validated assertion.

## Section I

Here is a snapshot of NIFTY as we are discussing. This image will act as a good reference point.

Lets refer to this document – NIFTY 50 Methodology

In this document shared, in the page 11, You can see this formula –

• Free Float Market Capitalization = Shares outstanding * Price * IWF
• Index Value = Current Market Value / Base Market Capital * Base Index Value (1000)

Also, in the Page 6, it is written that the Base capital was 2.06 trillion.

```				```
df["free_float_market_cap"] = df['sharesOutstanding']*df['ltP']*df['investableWeightFactor']
net_free_float_market_cap =df["free_float_market_cap"].sum()
net_free_float_market_cap/2060000000000 * 1000
```
```

Output –

```				```
39177.60991419329

```
```

Well, the value of NIFTY is not nowhere near 39177! What went wrong?

## Section II

In the previous article, while constructing an index fund, We were using the variable `Net_Indexmcap_today` because the marketcap was directly given in the API itself. Why calculate it again? Anyways, Lets compare `Net_Indexmcap_today` and `net_free_float_market_cap` out of curiocity.
```				```
print(net_free_float_market_cap)
print(Net_Indexmcap_today)
```
```

Output –

```				```
80705876423238.16
80684368062351
```
```
The difference is not that much at all! It looks like snapshot at different time.
• As `net_free_float_market_cap` is constructed out of LTP directly. It entails the immediate and realtime value.
• `Net_Indexmcap_today` is made out of `Indexmcap_today` which is updated at the beginning of the day only.
Anyways, Let’s move forward with `Net_Indexmcap_today`.

## Section III

Now, the only thing that can be changed here is the assumption i.e. value of base market capital using back calculation.

```				```
Net_Indexmcap_today/18244.2 * 1000
```
```

Output –

```				```
4422466759975.828

```
```
Now, Let’s test this hypothesis on the column `"Indexmcap_yst"` and if it comes all correct then it is more than enough for moment being!
```				```
today_nifty = Net_Indexmcap_today/4422466759975.828 * 1000
yst_nifty = df["Indexmcap_yst"].sum()/4422466759975.828 * 1000
print(today_nifty)
print(round(yst_nifty,2))
```
```

Output –

```				```
18244.2
18159.95
```
```

Our hypothesized value of base capital gives the proper output of NIFTY50’s yesterday’s price!

## That's all.

This is a part of the live discussion that happened on Unofficed Discussion Forum. Feel free to participate and engage in future discussions. Here are some agenda to be discussed later –

• Will there be an arbitrage opportunity if there is a difference in the value?

Let’s discuss this further in the next part of this discussion. Don’t shy away to share your code snippets or variations in the forum if You trying something