# Python - Moving Average(MA)
## Drawing Moving Average from Scratch
* import packages
```python
import pandas as pd
import matplotlib.pyplot as plt
from statistics import mean
```
* Read in data(Take Taiwan Index Futures(TXF) for example)
```python
txf_30 = pd.read_csv("TXF_30.csv")
txf_30.head()
```

### Method 1: define average function
```python
def my_average(data):
return sum(data) / len(data)
```
### Method 2: use mean method from statistics library
Code
```python
# n represents n days in a interval
n = 30
# create a temp list to calculate average
prices = []
# initialize two new columns in TXF_30.csv
txf_30["MA_avg"] = -1
txf_30["MA_mean"] = -1
for index, close in enumerate(txf_30["close"]):
# if elements in temp_num is less then n-days interval, then add elements
if len(prices) < n:
prices.append(close)
else:
prices.append(close)
if len(prices) == n:
continue
# when the len is larger than n, pop the first one
prices.pop(0)
avg = my_average(prices)
ma = mean(prices)
# update back to csv file
txf_30.loc[index, "MA_avg"] = avg
txf_30.loc[index, "MA_mean"] = ma
```
### Method 3: use rolling() from pandas
```python
txf_30["MA"] = txf_30["close"].rolling(n).mean()
```

### Plot
```python
fig, ax = plt.subplots(1, 1, figsize=(20, 10))
plt.title("TXF_30_Close and " + f"{n}" + "MA")
plt.plot(txf_30["close"].astype(float), color="c", label="close")
plt.plot(txf_30["MA"].astype(float), color="r", label=f"{n}MA")
plt.show()
```
