iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
0
Microsoft Azure

Python X 金融分析 X Azure系列 第 20

【Day20】技術分析:移動平均線(MA)

有了資料後,開始做技術分析。從每日的數據中,可以做出簡單的技術分析:移動平均線(Moving Average,MA)
,簡稱均線。
可以藉由均線當作參考,簡單的判斷出場點與進場點。

本篇主要會參考這個神作(個人還滿推崇這個網站):利用pandas輕鬆取得歷史股價


為何使用移動平均線

價格,是買賣雙方所同意的金額。因此當價格出來,以買方來說,這就是他的持有股票的成本,當我們把前幾日的價格平均下來,畫成一個線,就可以簡單得到購買的成本。
根據這購買成本,就知道大家的平均成本是多少,我們能用低成本進去,那些高成本的人有機會幫我們拉抬價格,又或者我們接到便宜的價格。

我有時候會看平均線去決定進出場的點。像是120日均線就是近120天的收盤價平均,當價格低於120日均線,表示目前的價格在近120天中是偏低,有可能價值被低估,我們可以進場。同樣的價格往上漲時,如果20日均線價格高於5日均線,表示漲勢有疲態,可能會持續往下跑,這時可以考慮出場。
這就是簡單的均線運用,當然還要搭配其他資料進行判斷。

均線的介紹可以參考:[用技術分析看BTC和ETH走勢] Day5: 移動平均線 Moving Average
而本篇使用的是「簡單移動平均(Simple Moving Average,SMA)」

如何製作均線?

建立jupyter notebook

製作一個.ipynb,然後把我們所需要的套件放入,當然就是有跟Azure SQL server連線的pyodbcpandas,以及繪圖的matplotlib

import pandas
import pyodbc
import matplotlib.pyplot as plt

讀檔案

with pyodbc.connect(
    f"DRIVER={driver};SERVER={server};PORT=1433;DATABASE={database};UID={username};PWD={password}"
) as conn:
    symbol = "2330"
    with conn.cursor() as cursor:
        query = f"SELECT TradeDate, ClosePrice FROM [dbo].[DailyPrice] WHERE Symbol ='{symbol}' ORDER BY TradeDate;"
        df = pandas.read_sql(query, conn)
        print(df.head(10)) #印出來看看

製作圖表

先把我們的圖片印出來看看:

df.plot()

https://ithelp.ithome.com.tw/upload/images/20200929/20103826WtZgHA7j9g.png

我們直接使用rolling(),這個可以是一個「滾動」的值,也就是變動的值,再加上mean(),就可以製作「移動的平均值」。然後我們在rolling()裡面放上要的均值長度,就可以得到X日均線。

# 近20日收盤
c_price_20 = df.rolling(20, min_periods=1).mean()
c_price_20.plot()

就可以看到平滑的線圖:
https://ithelp.ithome.com.tw/upload/images/20200929/20103826G2LwN1G3l4.png


後記

發現線圖一直很奇怪,不是一條圓滑的線,而是如同長條圖那種。
研究很久才發現,原來那是因為我的資料沒有排序,雖然畫出來的她會自動排序,但是使用rolling似乎就直接用資料去做,如果沒有排序就不會有好的圖表!

他會醜成這樣:
https://ithelp.ithome.com.tw/upload/images/20200929/20103826D8DwoshI7f.png


上一篇
【Day19】批次匯入證交所資料
下一篇
【Day21】技術分析#2:均線下單策略
系列文
Python X 金融分析 X Azure31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言