Table of Contents
什麼是處置股?處置股指的是買賣狀況異常的股票。何謂買賣狀況異常?證交所有一套分類機制,在股票列入「處置股票」名單前,會先列入「注意股票」一段時間,「注意股票」的挑選標準,其實就是買賣狀況異常的前兆。「注意股票」定義是股票 6 日累積漲跌幅超過 25% 即可能列為注意股票。這種異常的交易情形通常是因為漲跌幅度、周轉率、成交量是否報大量等幾個條件作為依據,而主管機關為了降低投資人風險,避免過熱的情形,制定這套警示處置的降溫機制。
而最近知名的 00940 也一度被主管機關注意,雖未掛牌上市,但募集資金已超過 1700 億元。若成功上市,依照目前的熱度,可能會被主管機關列為注意股甚至是處置股。然而,處置股真的是不好的投資標的嗎?因此本文打算做一個簡易的買進持有,回測處置股的表現。
我們將在 2020/01/01 至 2023/12/31 內找尋所有被金管會列為處置股的股票作為投資標的。
本文使用 Windows 作業系統以及 Jupyter Notebook 作為編輯器。
import os
import pandas as pd
import TejToolAPI
from zipline.data import bundles
from logbook import Logger, StderrHandler, ERROR
from zipline.sources.TEJ_Api_Data import get_universe
os.environ['TEJAPI_KEY'] = "your key"
os.environ['TEJAPI_BASE'] = "https://api.tej.com.tw"
log_handler = StderrHandler(format_string='[{record.time:%Y-%m-%d %H:%M:%S.%f}]: ' +
'{record.level_name}: {record.func_name}: {record.message}',
level=ERROR)
log_handler.push_application()
log = Logger('Algorithm')
start = '2020-01-01'
end = '2023-12-31'
pool = get_universe(start, end, mkt = ['TWSE', 'OTC'], stktp_c = '普通股')
os.environ['mdate'] = start + ' ' + end
os.environ['ticker'] = ' '.join(pool) + ' ' + 'IR0001'
!zipline ingest -b tquant
資料期間從 2020-01-01 至 2023–12–31,加入加權報酬指數 IR0001,作為大盤比較。
initialize()
函式用於定義交易開始前的每日交易環境,與此例中我們設置:
from zipline.api import *
from zipline.finance import commission, slippage
bundle_data = bundles.load('tquant')
universe = bundle_data.asset_finder.retrieve_all(bundle_data.asset_finder.equities_sids)
tickers = [col.symbol for col in universe]
def initialize(context):
set_slippage(slippage.VolumeShareSlippage(volume_limit = 0.025, price_impact = 0.1))
set_commission(commission.Custom_TW_Commission(min_trade_cost = 20, discount = 1.0, tax = 0.003))
set_benchmark(symbol('IR0001'))
context.asset = [symbol(i) for i in tickers]
context.rules = ['處置股票(Disposition Securities)'] #找尋為處置股票的標的
context.has_ordered = []
before_trading_start()
類似 handle_data()
,為構建買賣處置股的重要函式,會在回測開始後每天被呼叫,主要任務為設定交易策略、下單與紀錄交易資訊。
def before_trading_start(context, data):
for ticker in context.asset:
annotation = data.current(ticker, 'annotation')
#非處置股則不下單,且清空帳上股票
if isinstance(annotation, str) and any(s in annotation for s in context.rules) and not ticker in context.has_ordered:
order(ticker, 1000)
context.has_ordered.append(ticker)
#若已經在帳戶內,則不下單
elif ticker in context.has_ordered:
order(ticker, 0)
#已經離開處置股,則清空帳戶
else:
if ticker in set(context.portfolio.positions.keys()): # 當日前持有部位的股票標的
order_target(ticker, 0)
context.has_ordered.remove(ticker)
使用 run_algorithm()
執行上述設定的買賣處置股,設置交易期間為 start_dt
(2020-01-01) 到 end_dt
(2023-12-31),使用資料集 tquant,初始資金為一千萬元。其中輸出的 results
就是每日績效與交易的明細表。
from zipline import run_algorithm
from zipline.utils.calendar_utils import get_calendar
start_date = pd.Timestamp(start, tz = 'utc')
end_date = pd.Timestamp(end, tz = 'utc')
capital_base = 1e7
calendar_name = 'TEJ'
results = run_algorithm(
start = start_date,
end = end_date,
initialize=initialize,
bundle='tquant',
capital_base=capital_base,
data_frequency='daily',
before_trading_start = before_trading_start,
trading_calendar=get_calendar(calendar_name)
)
results
import pyfolio as pf
from pyfolio.utils import extract_rets_pos_txn_from_zipline
returns, positions, transactions = pf.utils.extract_rets_pos_txn_from_zipline(results)
benchmark_rets = results.benchmark_return
# Creating a Full Tear Sheet
pf.create_full_tear_sheet(returns, positions = positions, transactions = transactions,
benchmark_rets = benchmark_rets,
round_trips=False)
透過上圖可以看到買賣處置股策略在這 46 個月中我們獲得了約 19.71% 的年化報酬,累積報酬約 100%,表現勉強與大盤持平。然而買賣處置股相較大盤卻是一個風險更高的投資策略,由於處置股特性是搓合時間變長,讓投資者無法及時進行交易,導致持有意願變低。因此當股票落在跌幅期間時,下降幅度會明顯於大盤,讓策略績效表現低迷。主管機關會因為一檔股票的周轉率、漲幅與過去表現相比太過不正常,讓該股票列為處置股。因此在買進過熱股票前,要先預期該股票是否會被主管機關列為注意股或是處置股,避免導致承受相較其他股票更大的風險。
藉由上圖可以看到,買賣處置股的投資策略月報酬不僅報酬率不佳,且負報酬的比率相當高,當投資人採用該投資策略時將會承受相當承重的壓力。
本次實作我們選擇處置股當作投資標的,利用 TQuant Lab 進行買進賣出持有標的的回測績效分析。從分析結果看來,處置股的年報酬率與累計報酬率勉強與大盤持平,但投資人承受的風險相當高。當兩組投資策略獲利相同時,投資人應選擇風險較低的投資標的作為投資目標,以避免風險與收益不匹配的問題。
筆者認為盲目跟從買入過熱的股票會有極高的風險,巴菲特曾經說過:「別人恐懼我貪婪」,意思是當別人一頭熱進場時,你跟著進場;別人看衰時,你也跟著停損,但真正的贏家不是查看當下情況,而是在遠方仔細觀察。因此,投資者應該以長期的視角來思考,避免盲目跟隨市場波動。重要的是要在購買股票時應該從多個角度進行評估和考慮,以確保做出明智的投資決策。
之後也會持續介紹使用 TEJ 資料庫來建構各式指標,並回測指標績效,所以歡迎對各種交易回測有興趣的讀者,選購 TQuant Lab 的相關方案,用高品質的資料庫,建構出適合自己的交易策略。
溫馨提醒,本次策略僅供參考,不代表任何商品或投資上的建議。
電子報訂閱