有了資料後,開始做技術分析。從每日的數據中,可以做出簡單的技術分析:移動平均線(Moving Average,MA)
,簡稱均線。
可以藉由均線當作參考,簡單的判斷出場點與進場點。
本篇主要會參考這個神作(個人還滿推崇這個網站):利用pandas輕鬆取得歷史股價
價格,是買賣雙方所同意的金額。因此當價格出來,以買方來說,這就是他的持有股票的成本,當我們把前幾日的價格平均下來,畫成一個線,就可以簡單得到購買的成本。
根據這購買成本,就知道大家的平均成本是多少,我們能用低成本進去,那些高成本的人有機會幫我們拉抬價格,又或者我們接到便宜的價格。
我有時候會看平均線去決定進出場的點。像是120日均線
就是近120天的收盤價平均,當價格低於120日均線,表示目前的價格在近120天中是偏低,有可能價值被低估,我們可以進場。同樣的價格往上漲時,如果20日均線
價格高於5日均線
,表示漲勢有疲態,可能會持續往下跑,這時可以考慮出場。
這就是簡單的均線運用,當然還要搭配其他資料進行判斷。
均線的介紹可以參考:[用技術分析看BTC和ETH走勢] Day5: 移動平均線 Moving Average
而本篇使用的是「簡單移動平均(Simple Moving Average,SMA)」
製作一個.ipynb,然後把我們所需要的套件放入,當然就是有跟Azure SQL server連線的pyodbc
和pandas
,以及繪圖的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()
我們直接使用rolling()
,這個可以是一個「滾動」的值,也就是變動的值,再加上mean()
,就可以製作「移動的平均值」。然後我們在rolling()
裡面放上要的均值長度,就可以得到X日均線。
# 近20日收盤
c_price_20 = df.rolling(20, min_periods=1).mean()
c_price_20.plot()
就可以看到平滑的線圖:
發現線圖一直很奇怪,不是一條圓滑的線,而是如同長條圖那種。
研究很久才發現,原來那是因為我的資料沒有排序,雖然畫出來的她會自動排序,但是使用rolling
似乎就直接用資料去做,如果沒有排序就不會有好的圖表!
他會醜成這樣: