1. 程式人生 > 其它 >量價關係分析

量價關係分析

目錄

1.量價關係概述

“量”有成交量(股數)、成交金額、換手率等多種表現形式,“量”一般指交易市場中某種證券在某一特定時期內的交易數量。成交量體現了市場中多空力量的博弈。

  • 成交的股數一般以“手”為單位,一手為100股。
  • 成交額則直接體現了交易的資金量。
  • 換手率指股票的每日成交量與股票的流通股本比值,主要體現個股的流動性和活躍度。

“價”指證券的交易價格,對股票而言一般指收盤價。
價格的變化與成交量有明顯的相關關係。成交量是市場供求的一種表現

  • 當市場供不應求時,即市場利好於多方力量時,投資者會紛紛進入市場買入股票,成交量會增加。
  • 另一方面,市場處於冷清狀態時,股票買方力量薄弱,購買量較少,成交量可能會減少。

一般來說,低成交量會伴隨價格的降低,高成交量會伴隨價格的上漲。成交量較大且價格上升時,適宜看漲;成交量較小且價格降低時,適宜看跌。

2.量價關係分析

量價關係不僅僅只有量高價漲和量低下跌這兩種簡單的形式。在上漲的行情中價格上漲有可能對應著成交量的下跌;在下跌行情中,價格下跌反而可能對應著成交量的上漲。
與價格一樣,成交量可以有上漲、下跌、持平三種狀態。每一個成交量的狀態都可以與三種價格變化形態相聯絡,進而一共有9種對應關係。下邊是幾中常見的:

2.1 價漲量增

“價漲量增”的指價格與成交量同時增加,或者說價格隨成交量的增加而增加。
價漲量增主要出現在上漲行情中,成交量的增加預示著股票價格上升動能的增強,股票價格會繼續走高。
在中長期價漲量增關係中,市場的中長期都是上漲行情,股票市場短期的降價回撥都是入場的好機會。價漲量增可能在下跌行情底部回升時,出現價漲量增,市場上出現了諸多利好因素,說明股票價格為來處於回升階段,投資者可以從底部入場,等到價格上漲行情湧現時,獲取盈利。

2.2 價漲量平

“價漲量平”表明當價格在持續上漲時,股票的成交量卻不再上漲而是保持持平狀態。即成交量的變化不大,價格上漲的動能可能不會再增加。價漲量平體現出一種背離關係,量價的背離釋放出市場可能反轉的訊號。

上漲行情中價格持續上漲,成交量保持不變可能預示著價格即將到達頂部。如果成交量繼而持平或者減少,價格可能會從頂部反轉為下跌態勢。
此外,價漲量平的量價背離不一定都是反轉情形,也可能是市場處於調整期。市場經過一番洗盤之後。市場經過一番洗盤之後,有可能出現價漲量平情形。還有一種狀態是,價格上漲過猛(比如連續多天漲停),投資者對市場一致看好,買盤很多,但賣盤很少,成交量呈現出比較溫和的狀態,此時成交量失去反映市場動能的意義。價漲量平也體現出市場處於指標修復器。

2.3 價漲量縮

“價漲量縮”也是一種背離關係。市場橫盤調整完可能會出現價漲量縮的情形,經過一番調整,一些投資者被洗盤出局,在洗盤過程中,市場參與者逐漸減少。洗盤結束初期行情看好,價格上漲,但獲利盤賣盤較少,交易量呈現出收縮情形。

2.4 價平量增

價平量增出現在下跌行情的底部可能反轉的情形中。在下跌行情中,價格不再下跌而是持平,但交易量在增大,說明多方力量(莊家)可能進行了低位佈局。市場中出現了一些利好資訊,買方力量在逐漸增強,多方投資者預測到未來可能出現的上漲趨勢,在低位入場推動成交量上漲。此外,在上漲行情中,“價平量增”表明市場出現“高位滯漲”情形,價格處於高位時,價格不再上漲,而成交量卻在增加,一種可能是股票市場在更換“莊家”。一般不能把價平量增的形態理解為市場處於中期洗盤調整期,因為洗盤成交量會收縮而不是增加。

2.5 價平量縮

一般出現在新一輪上漲行情初期,價格保持穩定而成交量在減少。當市場進行調整洗盤時,可能會出現“價平量縮”。

2.6 價跌量增

“價跌量增”指成交量增加的情況下,股票價格反而下跌。
一般出現在高位下跌行情初期。投資者不看好市場,賣方力量較大,投資者大量賣出。
另一種可能是下跌末期的市場,做多力量慢慢增強,成交量會增加,但多方力量與空方力量的較量還不至於會抬高股價,價格依舊下跌。

2.7價跌量平

“價跌量平”表示當價格下跌時,成家立保持平穩。價跌量平釋放出趨勢回穩訊號,但還是沒辦法預測後市介個走勢。如果“價跌量平”跟隨在“價平量平”後面,則表明已經開始出現下跌行情,成交量不變,股價大幅下滑,投資者要可能要考慮及時出逃。

2.8 價跌量縮

股價下跌的同時成交量也在收縮。
當市場出於盤整期,市場價格下跌,一部分投資者逃離市場,可能會出現該情形。
在單邊下跌行情階段,“價跌量跌”形態體現出市場即將出現止跌的情形,空方力量逐漸耗盡,賣出力量較小,成交量也在減小。
此外,在單邊下跌行情中,市場行情不好,買方力量很弱,接盤力量較小,也會出現“價跌量縮”的情形。

3. 成交量與均線思想結合制定交易策略

步驟概述如下:

  1. 獲取成交量資料volume,計算成交量的5日簡單移動平均數VolSMA5和10日簡單移動平均數VolSMA10,並制定成交量均值VolSMA,
    V o l S M A = V o l S M A 5 + V o l S M A 10 2 \displaystyle VolSMA=\frac{VolSMA5+VolSMA10}{2} VolSMA=2VolSMA5+VolSMA10
  2. 獲取價格資料,獲取5日移動平均和20日簡單移動平均數
  3. 制定交易訊號:成交量volume大於成交量均值VolSMA時,釋放出買入訊號;成交量volume小於等於成交量均值VolSMA時,釋放出賣出訊號。
  4. 價格5日均線向上突破20日均線時,釋放買入訊號;反之,賣出釋放訊號。
  5. 合併交易訊號。成交量與均線均釋放買入時才買入,均釋放賣出時執行賣出。
  6. 交易策略評價。
# 獲取資料
import tushare as ts
import pandas as pd
import numpy as np
token = 'Your token'   # 輸入你的介面密匙,獲取方式及相關許可權見Tushare官網。這句話不能照抄!
pro = ts.pro_api(token)
def get_data(tscode):
	df = pro.daily(ts_code=tscode)
	df = df.loc[:, ['trade_date', 'open', 'high', 'low', 'close', 'vol']]
	df.rename(
	    columns={
	        'trade_date': 'Date', 'open': 'Open',
	        'high': 'High', 'low': 'Low',
	        'close': 'Close', 'vol': 'Volume'},
	    inplace=True)       # 重定義列名,方便統一規範操作。
	df['Date'] = pd.to_datetime(df['Date'])  # 轉換日期列的格式,便於作圖
	df.set_index(['Date'], inplace=True)  # 將日期列作為行索引
	df = df.sort_index() # 倒序以便作圖
	return df

df = get_data('002271.SZ')   # 東方雨虹為例
# 定義簡單移動平均函式
def smaCal(tsPrice, k):
	import pandas as pd
	Sma = pd.Series(0.0, index=tsPrice.index)
	for i in range(k-1, len(tsPrice)):
		Sma[i] = sum(tsPrice[(i-k+1):(i+1)])/k
	return(Sma)
# 求成交量均值VolSMA
VolSMA5 = smaCal(df.Volume, 5)[9:]
VolSMA10 = smaCal(df.Volume, 10)[9:]
VolSMA = ((VolSMA5+VolSMA10)/2)

# 制定交易訊號
VolSignal=(df.Volume[9:] > VolSMA) *1

sma5=smaCal(df.Close,5)[19:]
sma20=smaCal(df.Close,20)[19:]

# 定義向上突破函式
def upbreak(Line,RefLine):
	signal = np.all([Line > RefLine,Line.shift(1) < RefLine.shift(1)],axis=0)
	return pd.Series(signal[1:],index=Line.index[1:])*1	

# 定義向下突破函式
def downbreak(Line,RefLine):
	signal = np.all([Line < RefLine,Line.shift(1) > RefLine.shift(1)],axis=0)
	return pd.Series(signal[1:],index=Line.index[1:])*1

# 捕捉5日均線向上突破20日均線的日期
UpSMA = upbreak(sma5,sma20)
# 捕捉5日均線向下突破20日均線的日期
DownSMA = downbreak(sma5,sma20)

# 指定均線交叉的買賣訊號,併合並買賣訊號
SMAsignal = UpSMA - DownSMA

# 對成交量訊號與價格均線訊號進行加總
signal = VolSignal + SMAsignal
signal = signal.dropna()
trade = signal.replace([2,-2,1,-1,0],[1,-1,0,0,0])
trade = trade.shift(1)[1:]

# 求該策略勝率
ret = ((df.Close-df.Close.shift(1)) / df.Close.shift(1))['2020']
ret.name = 'stockRet'
tradeRet = (trade * ret)['2020']
tradeRet.name = 'tradeRet'
winRate = len(tradeRet[tradeRet>0]) / len(tradeRet[tradeRet != 0])

在這裡插入圖片描述