สร้างแนวรับแนวต้านวิเคราะห์หุ้นด้วย Python
การทำ Portfolio Optimization ด้วย Python
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
อ่านตอนอื่นๆได้ที่
- การคำนวณผลตอบแทนการลงทุนด้วย Python
- การหาความผันผวนของพอร์ตการลงทุนด้วย Python
- การหา Max Drawdown ด้วย Python
- การวัด การเบี่ยงเบนของผลตอบแทนด้วย Python
- การวัด SemiDeviation ด้วย Python
- การวัด VaR. และ CVaR. ด้วย Python
- รีวิวการใช้ ffn. ใน Python
- การหา Top Drawdown ด้วย Python
- การหาค่า Sharpe ratio ด้วย Python
- การหากลุ่มหลักรัพย์ที่เส้นประสิทธิภาพ Efficient Frontier ด้วย Python
- การหา shape ratio สูงสุดและเส้น CML ด้วย Python
- การสร้างมูลค่าตลาดแบบถ่วงน้ำหนักด้วย PYTHON
- ข้อจำกัดของการกระจายความเสี่ยงและการทำประกันพอร์ตการลงทุน
- การจำลอง ผลตอบแทนด้วย RANDOM WALK Generation และ Montecarlo simulation
- Sharpe Style Analysis
- Factor Investing ด้วย Python
- วิเคราะห์ ประเภทกองทุนรวมด้วย Python
- การทำ Portfolio optimization
- สร้างแนวรับแนวต้านวิเคราะห์หุ้นด้วย Python