羊群指标应用

Photo by Stephen Dawson on Unsplash

 

本文重点概要

文章难度:★★☆☆☆

利用融资融券买卖张数以及成交量和当冲量建构羊群指标
阅读建议:本文会运用到一些进阶的资料视觉化应用以及统计回归模型,需要对资料视觉化和回归模型有一定的认识。

前言

行为财务学的出现挑战了传统投资学认为人在做投资决策是理性的,而羊群效应则是代表了,投资人在市场中存在的从众行为,散户会看到大家往那边去,就盲目的跟从,且一般认为散户在市场中是赔钱的那群人,而如何定义市场中的散户,通常会使用融资融券和当冲量来表示,因为法人较少使用杠杆的方式和当冲来做交易,而本文使用了这几个数字组成的新指标来代表散户的从众行为,并用简单的回归模型,来确认散户是否真的是所谓的”反指标”。

编辑环境及模组需求

本文使用Mac OS 并以jupyter作为编辑器

import pandas as pd
import numpy as np
import tejapi
import statsmodels.api as sm
import matplotlib.pyplot as plt
import matplotlib.transforms as transforms
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] # 解决MAC电脑 plot中文问题
plt.rcParams['axes.unicode_minus'] = False
tejapi.ApiConfig.api_key ="Your Key"
tejapi.ApiConfig.ignoretz = True
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots

资料库使用

调整股价(日)-除权息调整(TWN/APRCD1)
融资融券(TWN/AGIN)
上市(柜)当日冲销交易统计资讯(TWN/ADT)

资料导入

资料期间取2015/01/01到2022/10/13,分别取得了成交量、当冲量、融资买进、融资卖出、融券卖出、融券回补还有大盘指数的资料。

df = tejapi.get('TWN/ADT',  #从TEJ api捞取所需要的资料
                  chinese_column_name = True,
                  paginate = True,
                  mdate = {'gt':'2015-01-01'},
                  coid='Y9999',
                  opts={'columns':['coid','mdate','volume', "vol_dt"]})
df1 = tejapi.get('TWN/AGIN',  #从TEJ api捞取所需要的资料
                  chinese_column_name = True,
                  paginate = True,
                  mdate = {'gt':'2015-01-01'},
                  coid='Y9999',
                  opts={'columns':['coid','mdate','buy_l', "sell_l", "buy_s", "sell_s"]})
df2 = tejapi.get('TWN/APRCD1',  #从TEJ api捞取所需要的资料
                  chinese_column_name = True,
                  paginate = True,
                  mdate = {'gt':'2015-01-01'},
                  coid='Y9999',
                  opts={'columns':['coid','mdate','close_adj']})

将资料设定好index,以利于后续做合并表格的工作,最后表格呈现方式如下图。

df1.rename(columns={'年月日':'日期'}, inplace=True)
df1.set_index(df1['日期'],inplace=True)
df1.drop(columns={'日期'},inplace=True)
df.set_index(df['日期'],inplace=True)
df.drop(columns={'日期'},inplace=True)
herding = pd.merge(df1, df.iloc[:,1:], left_index=True, right_index=True)
herding

接著利用散户买进公式:(融资买进+融券回补)/(成交量-当冲量)、散户卖出公式:(融资卖出+融券卖出)/(成交量-当冲量),将两个指标计算出来。

herding['buy'] = ((herding['融资买进(张)']+herding['融券买进(张)'])/(herding['成交量(千股)']-herding['现股当冲量(千股)']))*100
herding['sell'] = ((herding['融资卖出(张)']+herding['融券卖出(张)'])/(herding['成交量(千股)']-herding['现股当冲量(千股)']))*100

将大盘收盘价资料重新设定index并跟上面处理好的指标资料表做合并。

df2.rename(columns={'证券代码':'公司代码'},inplace=True)
df2.rename(columns={'年月日':'日期'},inplace=True)
df2.set_index(df2['日期'],inplace=True)
df2.drop(columns={'日期'},inplace=True)
result = pd.merge(herding,df2.iloc[:,1:], left_index=True, right_index=True)
result

将指标跟大盘指数绘制在同一张图上,可以发现由于是日资料的关系,在图上太密集无法看出趋势,因此我们改用另一种互动式绘图方式。

fig, ax1= plt.subplots(figsize =(20,16))
plt.plot(result.index , result['buy'],lw=1.5, label = '散户买进指标')       
plt.plot(result.index , result['sell'],lw=1.5, label = '散户卖出指标')  
plt.xlabel('日期',fontsize=15)
plt.ylabel('点数', fontsize=15)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.title('散户买卖与大盘指数',  fontsize=20)
plt.legend(loc=1, fontsize=15)
ax2 = ax1.twinx() #跟第一张ax1的x轴一样
plt.plot(result.index, result['收盘价(元)'] , lw=1.5, color='r', label='大盘')
plt.ylabel('指标', fontsize=15)
plt.yticks(fontsize=15)
plt.legend(loc=2, fontsize=15)
plt.gcf().autofmt_xdate() #让x轴的时间轴比较宽松、漂亮
plt.show()

透过plotly套件所做的互动式图表,可以让你针对你想观察的部分做放大,让我们可以更清楚的看到一段时间的趋势。

我们放大到疫情最恐慌的时候观察,在3/19台股创下了近几年的新低,收盘收在8681点,而散户卖出指标也创下波段的新高,之后股市开始回稳,并一路向上攀升。

将大盘指数计算成报酬率,并将散户买进指标跟卖出指标往后移一期,以利于后续运用回归模型使用。

result[['报酬率']] = (result[['收盘价(元)']].pct_change(1))*100
result[['buy', 'sell']] = result[['buy', 'sell']].shift(1)

简单看一下相关系数发现,散户买进指标跟卖出指标都跟大盘报酬率是正相关,跟原先预期的有点落差,而卖出指标的相关性大了一些。

result[['buy', 'sell', '报酬率']].corr()

接著做个单回归来观察买进指标跟大盘报酬率,从结果可以看到,买进指标的系数为正且显著的,可见买进指标是可以预测大盘报酬率。

X = sm.add_constant(result['buy'])
b = sm.OLS(result['报酬率'], X).fit()
b.summary()

再来看到卖出指标,也跟买进指标一样,系数为正且显著的,代表卖出指标同样具有预测大盘报酬率的能力。

X = sm.add_constant(result['sell'])
b = sm.OLS(result['报酬率'], X).fit()
b.summary()

结论

我们能从结果看到,我们原先预期散户是’反指标’,当散户买进指标上升时,隔天的大盘报酬率会减少,当散户卖出指标上升时,隔天会增加,但实证结果发现,无论是买进指标或卖出指标,对于大盘报酬率的预测皆是正相关,需要注意的是本文在实证方面使用的是单回归的方式,读者如果想做更深入的探讨,可以多增加控制变数,采用多元回归的方式来研究,结果会更加准确。

之后也会介绍使用TEJ资料库来建构各式指标,并回测指标绩效,所以欢迎对各种交易回测有兴趣的读者,选购TEJ E-Shop的相关方案,用高品质的资料库,建构出适合自己的交易策略。

完整程式码

延伸阅读

相关连结

返回总览页