# DBL Fin (06/12) ###### tags: `DBL` --- [TOC] --- <style> .markdown-body { max-width: 960px !important; } </style> :::info - **`w06`**、**`w07`** **K 線型態、KD 指標**:單日、兩日K線型態、成交量、股價高低檔程式判斷、KD 值運算與交叉 - [**`w08`**](https://docs.google.com/presentation/d/1ymDWEvedHu-7L-PyxoRsB6CzpGnU2hAU/edit) **葛蘭碧八大法則_1**:均線趨勢判斷、rule 1 突破 - [**`w09`**](https://docs.google.com/presentation/d/1BzcnpUFnTyQqnDk2jC2kX0HRkTCnaZRE/edit) **葛蘭碧八大法則_2**:葛蘭碧八大法則實作 - [**`w10`**](https://docs.google.com/presentation/d/11Ey9TpFnvbBhohYaOOcHLpBwPOxaGOUb/edit) **葛蘭碧八大法則_驗證**:葛蘭碧八大法則驗證及繪圖 - [**`w11`**](https://docs.google.com/presentation/d/1d88UEJp6HnvbrZz6aDJRSqQQPuKOcA9_/edit) **趨勢判斷**:尋找最大 / 最小值與趨勢判斷 - [**`w12`**](https://docs.google.com/presentation/d/1zQqInKM58YcTbaB1qMzSbHKmwuuPH18w/edit) **切線關係、轉折波**:切線關係比較、了解 W 底 M 頭判讀及應用、畫出轉折波輔助識別 M W - [**`w13`**](https://docs.google.com/presentation/d/19kIR331hr6wg1DYaVMM65nR7zS1EF9jw/edit) **W 底 M 頭、三重底 / 頂**:了解三重頂 / 底之判讀及應用、繪製 W 底 M 頭、三重頂 / 底 ::: ## 飆股九陰真經 ### 成交量、價量關係 - **成交量**(Volume):就是某個時段中買賣雙方成交的數量 - <font color="red">**紅色**</font>代表今日股價比昨日股價**高** <font color="green">**綠色**</font>代表今日股價比昨日股價**低** <font color="orange">**黃色**</font>(<font color="grey">**灰色**</font>)代表價格**持平** - **極大量、大量、小量、極小量** ![](https://hackmd.io/_uploads/ryV1zJzv3.png) > *成交量是股市的**元氣**,股價只不過是**量的表現**而已,股市成交量通常比股市**先行**!* ### 高檔 / 低檔 - **高檔**:股價相對高 **低檔**:股價相對低 - 可以用來判斷例如**高檔爆大量/低檔大量**等情況發生,再去做決策 ### KD 指標 - **KD 指標(隨機指標,Stochastic Oscillator)**:K 值、D 值 - 範圍:**0 ~ 100** - ---> **股價強弱勢**、**股價轉折點** - 使用 **RSV(Raw Stochastic Value;未成熟隨機值)** 來計算: ![](https://hackmd.io/_uploads/SJ9B0xMvn.png =440x)![](https://hackmd.io/_uploads/SyCS0lGw3.png =440x) - 最近 N 天中,股價表現強弱 **(通常 $N = 9$)** ![](https://hackmd.io/_uploads/r1BckbGPh.png) - **K 值(快線)**:今日 RSV 與昨日 K 值的加權平均 ---> 反應較為**靈敏** **D 值(慢線)**:加權平均過的 K 值與昨日 D 值再一次平滑 ---> 反應較**不靈敏** - ![](https://hackmd.io/_uploads/B1Y5g-Mv3.png =300x) **K 值 > D 值**:漲 ---> 偏多操作 **K 值 < D 值**:跌 ---> 偏空操作 **KD 值 > 80**:**高檔超買區** ---> 強 ---> 漲 **KD 值 < 20**:**低檔超賣區** ---> 弱 ---> 跌 ### KD 黃金 / 死亡交叉 - **KD 黃金交叉**:**「低檔超賣區」** & **「K 值往上突破 D 值」** ---> **買進** **KD 死亡交叉**:**「高檔超買區」** & **「K 值往下跌破 D 值」** ---> **賣出** - **KD 指標**: - **黃金交叉 + 成交量加大** ---> 更適合**買入** - **相對高位、相對低位**~~(絕對高位、絕對低位)~~ - 適合**股價震盪**階段,否則會**鈍化**(長時間維持在高檔、低檔) - **背離**:股價趨勢與 KD 指標趨勢不一致 ### 葛蘭碧八大法則 - **葛蘭碧法則(Granville Theopry)**: - 美國知名量價分析專家 **葛蘭碧(Joseph Granville)** 所創 - **價格**、**移動平均線**的關係 ---> **買進 / 賣出訊號** - **均線趨勢判斷**:上升、下降、平緩(盤整) - **?**:回看天數與趨勢閾值天數 - **葛蘭碧八大法則**: ![](https://hackmd.io/_uploads/SygcOcWfwn.png) 1. **(<font color="red">買</font>)突破**:**「MA 下 ---> 平 / 上」+「股價突破 MA」** 2. **(<font color="red">買</font>)假跌破**:**「MA 上」+「股價跌破 MA 再突破 MA」**,**(騙線)** - **?**:幾天內回均線上 3. **(<font color="red">買</font>)支撐**:**「MA 上」+「股價下跌未破 MA 再上漲」** - **?**:回看天數、判斷下跌或上升、靠均線多近、判斷反彈或反壓、後看是否破均線 4. **(<font color="red">買</font>)抄底**:**「MA 下」+「股價負乖離過大」** - **?**:乖離值、正負乖門檻砍是否相同、超過門檻後是否看後面趨勢 5. **(<font color="green">賣</font>)跌破**:**「MA 上 ---> 平 / 下」+「股價跌破 MA」** 6. **(<font color="green">賣</font>)假突破**:**「MA 下」+「股價突破 MA 再跌破 MA」** - **?**:幾天內回均線下 7. **(<font color="green">賣</font>)反壓**:**「MA 下」+「股價上漲未破 MA 再下跌」** - **?**:回看天數、判斷下跌或上升、靠均線多近、判斷反彈或反壓、後看是否破均線 8. **(<font color="green">賣</font>)反轉**:**「MA 上」+「股價正乖離過大」** - **?**:乖離值、正負乖門檻砍是否相同、超過門檻後是否看後面趨勢 ### 均線乖離率(MA Bias) - **股價偏離平均線的百分比** ---> 方便衡量目前**股價與均線的距離** - $$均線乖離率 = \frac{收盤價 - 移動平均價}{移動平均價} \times 100\ \% = (\frac{收盤價}{移動平均價} - 1) * 100\ \%$$ ### 多頭、空頭、盤整 - **多頭(頭頭高、底底高)**: ![](https://hackmd.io/_uploads/HJ8huMzPn.png =400x) - **空頭(頭頭低、底底低)**: ![](https://hackmd.io/_uploads/ryRhOGMDh.png =400x) - **盤整**: ![](https://hackmd.io/_uploads/SkOWtGfD2.png =400x) - **判斷方法**: - 利用 MA5 找出**上漲(高於均線)和下跌(低於均線)區間** ---> 找出區間中的**極大(上漲)極小(下跌)值** ---> 利用極值判斷**多頭、空頭、盤整** ### 切線關係 ![](https://hackmd.io/_uploads/rkAlCfzD2.png) - **支撐線**: - 股價**下跌到某個價位**附近 ---> **買方增加、賣方減少** ---> 股價**停止下跌**,甚至**可能回升** - **壓力線**: - 股價**上漲到某價位**附近時 ---> **買方減少、賣方增加** ---> 股價**停止上漲**,甚至**可能回落** - **切線斜率**: - $收盤價差 - 開市日數$ - **正斜率大** ---> 股價**成長的速度加快** **正斜率小** ---> 股價**走勢將會變化成盤整或是開始下跌** **負斜率大** ---> 股價**走勢將會變化成盤整或是開始上漲** **負斜率小** ---> 股價**下跌的速度加快** - 日期選擇: - 極大值 - 極小值 - 設一個固定的日期間隔 ### ==W 底 M 頭== > ==圖很重要== - **W 底(W 型(W Shape) / 雙重底(Double Bottoms))**: 當股價下跌又反彈至一高點,再度下跌後又反彈,直至突破頸線 ---> **會上漲、做多** ![](https://hackmd.io/_uploads/BkQHP7fD3.png =400x) - **頸線**:**W 中間高點畫水平線** - **M 頭(M 型(M Shape) / 雙重頂(Double Tops))**: 當股價上漲又反彈至一低點,再度上漲後又反彈,直至突破頸線 ---> **會下跌、做空** ![](https://hackmd.io/_uploads/B135P7GD3.png =400x) - **頸線**:**M 中間低點畫水平線** - **識別方法**: - **區域極值** ---> **判斷趨勢** ---> **轉折點** ---> **轉折波** ---> **WM 圖形** - **找出圖形** | 圖形 | 圖示 | 條件 | |:-----:|:---------------------------------------------------:|:-------------------------------------------------------------------- | | **W** | ![](https://hackmd.io/_uploads/By8jTQfD3.png =200x) | 1. $b,d < c$<br>2. $abs(b - d) \le mean(b, d) * k\ \%$<br>3. $a \ge c$ | | **M** | ![](https://hackmd.io/_uploads/Hk9aaXMv3.png =200x) | 1. $b,d > c$<br>2. $abs(b - d) \le mean(b, d) * k\ \%$<br>3. $a \le c$ | ### 三重底 / 三重頂 - **三重底(Triple Bottoms) / 頭肩底(Inverse Head and Shoulders)** 當股價連續下跌又反彈至一高點,直至突破頸線 ---> **會上漲、做多** ![](https://hackmd.io/_uploads/Sko2MNMwh.png =450x) - **頸線**:**中間兩個高點連線 ==(與 W 不同)==** - **三重頂(Triple Tops) / 頭肩頂(Head and Shoulders)** 當股價連續上漲又反彈至一低點,直至跌破頸線 ---> **會下跌、做空** ![](https://hackmd.io/_uploads/rkE6z4zv3.png =450x) - **頸線**:**中間兩個低點連線 ==(與 M 不同)==** - **識別方法**:與 WM 圖形識別方法一樣 - **找出圖形** | 圖形 | 圖示 | 條件 | |:-----:|:---------------------------------------------------:|:-------------------------------------------------------------------- | | **三重底** | ![](https://hackmd.io/_uploads/r1DhXVMw3.png =250x) | 1. $d < b,c,e,f$<br>2. $b < c,\ f < e$<br>3. $abs(c - e) \le mena(c, e) * k\ \%$ | | **三重頂** | ![](https://hackmd.io/_uploads/BJkTQ4fwh.png =250x) | 1. $d > b,c,e,f$<br>2. $b > c,\ f > e$<br>3. $abs(c - e) \le mena(c, e) * k\ \%$ | ## SQL 奇技淫巧 ### `ROW_NUMBER()`:行號 ```sql= SELECT ROW_NUMBER() OVER (ORDER BY a_col DESC) AS ROWID FROM a_table; ``` ### `PARTITION BY`:分組計算 ```sql= SELECT ROW_NUMBER() OVER (PARTITION BY col_a ORDER BY col_b DESC) AS ROWID FROM a_table; ``` ### `CROSS APPLY`:欄位帶入逐一查詢資料列並加入 ```sql= SELECT * FROM a_table AS t1 CROSS APPLY ( -- find the second large a_col SELECT TOP 1 * FROM a_table WHERE a_col <= t1.a_col ORDER BY a_col DESC) AS t2; ``` ### ==W12 - P1 - 斜率關係變化== > ==期末考會考== | 切線斜率 | 股票走勢 | |:------------------:|:------------:| | **正斜率變大** | 價格加速上漲 | | **正斜率變小** | 上漲速度趨緩 | | **負斜率轉正斜率** | 轉為上漲 | | **負斜率變大** | 下跌速度趨緩 | | **負斜率變小** | 價格加速下跌 | | **正斜率轉負斜率** | 轉為下跌 | | **其他** | 狀況不變 | ```sql= SELECT * FROM @date_select AS T1 -- 當前日期 CROSS APPLY ( -- 取得前一個日期 SELECT TOP 1 * FROM @date_select WHERE date < T1.date ORDER BY date DESC ) AS T2; ``` ```sql= CREATE OR ALTER FUNCTION [dbo].[slope_trend] ( @company VARCHAR(10), @interval_size INT, @StatementType NVARCHAR(20) = '' ) RETURNS @Result_Table TABLE ( start_date DATE, start_day_price REAL, end_date DATE, end_day_price REAL, slop REAL, trend NVARCHAR(20) ) AS BEGIN DECLARE @date_select TABLE ( date DATE NOT NULL, close_price REAL NOT NULL ); -- 根據 INPUT,挑選出要比較的日期 IF @StatementType = 'Extremum_MAX' BEGIN INSERT @date_select (date, close_price) SELECT date, close_price FROM dbo.find_max_min(@company) WHERE max_min = 1 ORDER BY date DESC; END ELSE IF @StatementType = 'Extremum_MIN' BEGIN INSERT @date_select (date, close_price) SELECT date, close_price FROM dbo.find_max_min(@company) WHERE max_min = 0 ORDER BY date DESC; END ELSE IF @StatementType = 'Interval' BEGIN -- 先為 stock_price 中的資料依據日期給予編號,再依據 INPUT 決定多久要找一次斜率 INSERT @date_select (date, close_price) SELECT T1.date, T1.c FROM (SELECT ROW_NUMBER() OVER (ORDER BY date DESC) AS ROW, date, c FROM [dbo].[stock_price] WHERE stock_code = @company) AS T1 WHERE (T1.ROW % @interval_size) = 1; END -- 設定斜率的起始日期和結束日期,並計算斜率 INSERT INTO @Result_Table (start_date, start_day_price, end_date, end_day_price) SELECT T2.date, T2.close_price, T1.date, T1.close_price FROM @date_select AS T1 CROSS APPLY ( -- 取得前一個日期 SELECT TOP 1 * FROM @date_select WHERE date < T1.date ORDER BY date DESC ) AS T2; UPDATE @Result_Table SET slop = [dbo].[slope_calculate](@company, start_date, end_date) WHERE 0 = 0; -- 根據不同的情況,判斷股票走勢的變化 UPDATE @Result_Table SET trend = ( CASE WHEN T1.slop > T2.slop AND T1.slop > 0 AND T2.slop > 0 THEN N'價格加速上漲' WHEN T1.slop < T2.slop AND T1.slop > 0 AND T2.slop > 0 THEN N'上漲速度趨緩' WHEN T1.slop > 0 AND T2.slop < 0 THEN N'轉為上漲' WHEN T1.slop > T2.slop AND T1.slop < 0 AND T2.slop < 0 THEN N'下跌速度趨緩' WHEN T1.slop < T2.slop AND T1.slop < 0 AND T2.slop < 0 THEN N'價格加速下跌' WHEN T1.slop < 0 AND T2.slop > 0 THEN N'轉為下跌' ELSE N'狀況不變' END ) FROM @Result_Table AS T1 CROSS APPLY ( -- 取得前一個日期 SELECT TOP 1 * FROM @Result_Table WHERE start_date < T1.start_date ORDER BY start_date DESC ) AS T2; RETURN; END; GO; ``` ## Python 葵花寶典 ### `mplfinance` - `make_addlpot(...)`:加入標記點 ```python= def draw_candlestick(stock_prices=None, buy_or_sells=None): if stock_prices is None or len(stock_prices) == 0 or \ buy_or_sells is None or len(buy_or_sells) == 0: return # Create a new dataframe stock_prices_df = pd.DataFrame([list(e) for e in stock_prices]) # Use the 1st column (datetime) as its index stock_prices_df.index = pd.to_datetime(stock_prices_df[0]) stock_prices_df.index.name = "Date" # Drop the 1st column (datetime) stock_prices_df = stock_prices_df.drop(columns=[0]) # Set columns' names stock_prices_df.columns = ["Open", "High", "Low", "Close", "Volume"] # Set chart styles mc = mpf.make_marketcolors(up="r", down="g", edge="", wick="inherit", volume="inherit") s = mpf.make_mpf_style(base_mpf_style="charles", marketcolors=mc) # Transform signals for each dates # `np.nan` means no signals here bs_dict = dict(buy_or_sells) buy_signals = [p[4] if bs_dict.get(p[0]) == 1 else np.nan for p in stock_prices] sell_signals = [p[4] if bs_dict.get(p[0]) == -1 else np.nan for p in stock_prices] # Combine buying and selling signals # Use `make_addplot(...)` to make plots apds = [ mpf.make_addplot(sell_signals, type='scatter', markersize=200, marker='^', color="g"), mpf.make_addplot(buy_signals, type='scatter', markersize=200, marker='v', color="y") ] # Draw the chart mpf.plot(stock_prices_df, type='candle', style=s, mav=20, addplot=apds) ``` ### `mplfinance` - 轉折波 ==TODO== ### `mplfinance` - 畫出 WM ==TODO== ### `mplfinance` - 畫出三重底 / 頂 ==TODO== ## その他