สร้างแนวรับแนวต้านวิเคราะห์หุ้นด้วย Python

การทำ Portfolio Optimization ด้วย Python

NUTHDANAI WANGPRATHAM
2 min readFeb 27, 2021

Trend line เป็นเครื่องมือที่สำคัญอย่างหนึ่งสำหรับนักลงทุนทางเทคนิค การสร้าง Trend line ช่วยให้นักลงทุนทราบถึงทิศทางของแนวโน้มและรูปแบบของการเปลี่ยนแปลงของราคา

โดยปกตินักวิเคราะห์จะสร้างเส้นสองเส้นคือแนวต้านที่กรอบด้านบนของราคาและแนวรับที่กรอบด้านล่างของกราฟ เราสามารถใช้ 2 จุดนี้ในกราฟ เพื่อหาจุดกลับตัวของราคา หรือการเปลี่ยนแปลงเเนวโน้ม

สมมติว่าเรามีจุดราคาที่ต่ำกว่า 2 จุดในแผนภูมิและลากเส้นแนวโน้ม เมื่อราคาปัจจุบันถึงเส้นแนวโน้มขาขึ้นเส้นโค้งราคาอาจมีการตีกลับภายในแนวโน้ม หรือหากราคาทะลุใต้เส้นแนวโน้มขาขึ้นที่ลากด้วยจุดต่ำกว่าก็สามารถคิดได้ว่าราคาน่าตจะลดลงอย่างรวดเร็ว

เรามาเริ่มกันเลย

Import_libery

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport pandas_datareader as webimport datetimefrom scipy.stats import linregressfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LinearRegressionfrom sklearn.preprocessing import LabelEncoderfrom sklearn.metrics import mean_squared_error

ดึงข้อมูล

เราจะดึงข้อมูลจาก yahoo_finance เหมือนทุกที

from pandas_datareader import data as pdrimport fix_yahoo_finance as yfyf.pdr_override() # <== that's all it takes :-)

ใช้ DJI นะครับ

# ===========today = "2020-03-01"  # to make static this script.tckr = '^DJI'# download datadata = pdr.get_data_yahoo(tckr, "2005-01-01", today)# add frequency needed for some pandas functionalities releated with offsetsdata = data.asfreq('B')data.columns = data.columns.map(lambda col: col.lower())

จัดการค่า Na ซะ

data = data.dropna()

สร้างเส้น Trend line dummy

x = np.array([2, 7])y = np.array([5, 15])slope, intercept, r_value, p_value, std_err = linregress(x, y)print("slope: %f, intercept: %f" % (slope, intercept))print("R-squared: %f" % r_value**2)

ลองสร้างกราฟดู

plt.figure(figsize=(15, 5))plt.plot(x, y, 'o', label='original data')plt.plot(x, intercept + slope*x, 'r', label='fitted line')plt.legend()plt.grid()plt.show()

สร้างเส้นแนวรับและแนวต้าน

เพิ่มคอลัมน์ “number” และให้ค่าตัวเลขจาก 1 ดังต่อไปนี้

data_len = len(data)data['number'] = np.arange(data_len)+1data_high = data.copy()data_low = data.copy()data.tail()

สร้างแนวต้าน

while len(data_high)>2:slope, intercept, r_value, p_value, std_err = linregress(x=data_high['number'], y=data_high['high'])data_high = data_high.loc[data_high['high'] > slope * data_high['number'] + intercept]data_high.tail()

สร้างแนวรับ

while len(data_low)>2:slope, intercept, r_value, p_value, std_err = linregress(x=data_low['number'], y=data_low['low'])data_low = data_low.loc[data_low['low'] < slope * data_low['number'] + intercept]data_low.tail()

เอาแนวต้านและแนวรับมารวมกัน

slope, intercept, r_value, p_value, std_err = linregress(x=data_high['number'], y=data_high['close'])data['uptrend'] = slope * data['number'] + interceptdata.tail()

ลองสร้างกราฟเลย

fig, ax1 = plt.subplots(figsize=(15,10))color = 'tab:green'xdate = [x.date() for x in data.index]ax1.set_xlabel('Date', color=color)ax1.plot(xdate, data.close, label="close", color=color)ax1.tick_params(axis='x', labelcolor=color)ax1.legend()ax2 = ax1.twiny() # ax2 and ax1 will have common y axis and different x axis, twinyax2.plot(data.number, data.uptrend, label="Uptrend")ax2.plot(data.number, data.downtrend, label="Downtrend")plt.legend()plt.grid()

เรียบร้อย

สามารถ ดู Note book ได้ที่ https://colab.research.google.com/drive/1-JxbhSPm-izguCx1t6vSEGyLEcuYYTOz?usp=sharing

อ่านตอนอื่นๆได้ที่

  1. การคำนวณผลตอบแทนการลงทุนด้วย Python
  2. การหาความผันผวนของพอร์ตการลงทุนด้วย Python
  3. การหา Max Drawdown ด้วย Python
  4. การวัด การเบี่ยงเบนของผลตอบแทนด้วย Python
  5. การวัด SemiDeviation ด้วย Python
  6. การวัด VaR. และ CVaR. ด้วย Python
  7. รีวิวการใช้ ffn. ใน Python
  8. การหา Top Drawdown ด้วย Python
  9. การหาค่า Sharpe ratio ด้วย Python
  10. การหากลุ่มหลักรัพย์ที่เส้นประสิทธิภาพ Efficient Frontier ด้วย Python
  11. การหา shape ratio สูงสุดและเส้น CML ด้วย Python
  12. การสร้างมูลค่าตลาดแบบถ่วงน้ำหนักด้วย PYTHON
  13. ข้อจำกัดของการกระจายความเสี่ยงและการทำประกันพอร์ตการลงทุน
  14. การจำลอง ผลตอบแทนด้วย RANDOM WALK Generation และ Montecarlo simulation
  15. Sharpe Style Analysis
  16. Factor Investing ด้วย Python
  17. วิเคราะห์ ประเภทกองทุนรวมด้วย Python
  18. การทำ Portfolio optimization
  19. สร้างแนวรับแนวต้านวิเคราะห์หุ้นด้วย Python

--

--

NUTHDANAI WANGPRATHAM
NUTHDANAI WANGPRATHAM

Written by NUTHDANAI WANGPRATHAM

I am a learner and have a multipotential life. You can contact me at nutdnuy@gmail.com

No responses yet