各位好,我是小卓,一位熱衷於金融科技的創業者。今天,我們將一同探索技術分析的奧秘,特別是客觀和主觀方法的比較。無論你是金融新手還是想提升技能的專業人士,這本指南都將為你揭開技術分析的神秘面紗。準備好了嗎?讓我們開始這段精彩的學習之旅吧!
想像你是一位偵探,而金融市場就是你的案發現場。技術分析就像是你的放大鏡和指紋粉,幫助你在看似雜亂的市場數據中發現重要線索。
技術分析的定義:
技術分析的發展就像是從占卜到科學的進化過程。讓我們來看看這個有趣的時間線:
Q1: 技術分析的主要目的是什麼? A1: 技術分析的主要目的是通過研究歷史價格和交易量等市場資料,預測未來的價格走勢。
Q2: 技術分析和基本面分析有什麼區別? A2: 技術分析主要關注價格走勢和交易量等市場資料,而基本面分析則關注公司財務狀況、經濟環境等因素。
想像你是一位科學家,正在進行一項嚴謹的實驗。客觀技術分析就像是你的實驗方法和數據分析工具。
特點:
優點:
缺點:
現在,想像你是一位藝術家,正在解讀一幅抽象畫。主觀技術分析就像是你的直覺和經驗,幫助你理解市場的"畫作"。
特點:
優點:
缺點:
讓我們通過一個簡單的移動平均線交叉策略來比較客觀和主觀技術分析:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override()
# 下載台積電股票資料
stock_data = pdr.get_data_yahoo("2330.TW", start="2020-01-01", end="2023-12-31")
# 計算5日和20日移動平均線
stock_data['MA5'] = stock_data['Close'].rolling(window=5).mean()
stock_data['MA20'] = stock_data['Close'].rolling(window=20).mean()
# 生成交易訊號
stock_data['Signal'] = np.where(stock_data['MA5'] > stock_data['MA20'], 1, 0)
stock_data['Position'] = stock_data['Signal'].diff()
# 計算收益
stock_data['Returns'] = np.log(stock_data['Close'] / stock_data['Close'].shift(1))
stock_data['Strategy'] = stock_data['Position'].shift(1) * stock_data['Returns']
# 繪製圖表
plt.figure(figsize=(12,6))
plt.plot(stock_data.index, stock_data['Close'], label='收盤價')
plt.plot(stock_data.index, stock_data['MA5'], label='5日MA')
plt.plot(stock_data.index, stock_data['MA20'], label='20日MA')
plt.scatter(stock_data[stock_data['Position'] == 1].index,
stock_data[stock_data['Position'] == 1]['Close'],
label='買入訊號', marker='^', color='g')
plt.scatter(stock_data[stock_data['Position'] == -1].index,
stock_data[stock_data['Position'] == -1]['Close'],
label='賣出訊號', marker='v', color='r')
plt.title('台積電股票 - 移動平均線交叉策略')
plt.xlabel('日期')
plt.ylabel('價格')
plt.legend()
plt.show()
# 計算策略績效
cumulative_returns = stock_data['Strategy'].cumsum()
print(f"策略累積收益: {cumulative_returns.iloc[-1]:.2%}")
這個例子展示了客觀技術分析的特點:
相比之下,主觀技術分析可能會考慮:
嘗試修改上述程式碼,使用不同的移動平均線週期(例如10日和50日),觀察策略績效的變化。思考:為什麼會有這樣的變化?這是否說明了客觀技術分析的局限性?
實證技術分析(EBTA)就像是技術分析界的哥白尼革命,它試圖將這個領域從主觀猜測轉變為客觀科學。
定義:
特點:
3.2 EBTA的應用示例
讓我們用一個簡單的例子來說明EBTA的應用:
import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override()
# 下載台積電股票資料
stock_data = pdr.get_data_yahoo("2330.TW", start="2020-01-01", end="2023-12-31")
# 計算日收益率
stock_data['Returns'] = stock_data['Close'].pct_change()
# 計算20日動量
stock_data['Momentum'] = stock_data['Close'] / stock_data['Close'].shift(20) - 1
# 將動量分為高、中、低三組
stock_data['Momentum_Rank'] = pd.qcut(stock_data['Momentum'], q=3, labels=['Low', 'Medium', 'High'])
# 計算每組的平均未來收益率
future_returns = stock_data.groupby('Momentum_Rank')['Returns'].shift(-1).mean()
# 進行統計檢驗
f_statistic, p_value = stats.f_oneway(
stock_data[stock_data['Momentum_Rank'] == 'Low']['Returns'].shift(-1).dropna(),
stock_data[stock_data['Momentum_Rank'] == 'Medium']['Returns'].shift(-1).dropna(),
stock_data[stock_data['Momentum_Rank'] == 'High']['Returns'].shift(-1).dropna()
)
# 繪製結果
plt.figure(figsize=(10,6))
future_returns.plot(kind='bar')
plt.title('動量效應分析')
plt.xlabel('動量排名')
plt.ylabel('平均未來收益率')
plt.show()
print(f"F統計量: {f_statistic:.4f}")
print(f"P值: {p_value:.4f}")
這個例子展示了EBTA的幾個關鍵特點:
想像你正在挑選一輛新車。你不會只看外表,對吧?你會關心它的性能、油耗、安全性等。同樣的,在技術分析中,我們需要全面評估一個交易系統的表現。
系統評估的重要性:
消除趨勢就像是在天平上找到平衡點。我們通過調整歷史資料,使市場的平均每日價格變化為0,這樣就可以排除市場大趨勢對系統績效的影響。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override()
# 下載台積電股票資料
stock_data = pdr.get_data_yahoo("2330.TW", start="2020-01-01", end="