เคยได้ยินไหม .. ใช้ ATR ในการหาจุดเข้าซื้อ

Investic
investic
Published in
3 min readApr 4, 2022

ATR หรือ Average True Range เป็น Technical Indicator ที่ใช้ดูความผันผวนของสินทรัพย์ ได้ดีกว่าค่า Volatility หรือความผันผวนของสินทรัพย์นั้นๆเสียอีก เราจะใช้มันในลักษณะดูว่าความกลัว สูงสุดหรือยัง

การคำนวณ ATR
ATR เกิดจากการคำนวณ TR แบ่งออกเป็นสามตัว
TR1 = ราคาสูงสุดของวันนี้ -ราคาปิดของวันก่อนหน้า
TR2 = ราคาปิดของวันก่อนหน้า -ราคาต่ำสุดของวันนี้
TR3 = ราคาสูงสุดของวันนี้ -ราคาต่ำสุดของวันนี้
(อย่าลืมใส่ abs ให้กับทุกค่าเพราะ TR เราจะดูแค่ระยะห่างจึงไม่ต้องใช้ว่าเป็นบวกหรือลบ) หลังจากนั้นเราก็เลือกค่า TR มาหาตัวที่สูงที่สุด เพื่อไปคำนวณ ATR ต่อ

ว่าง่ายๆเราเอา จากจุดสูงสุดไปต่ำสุด หรือต่ำสุดไปสูงสุด ของแต่ละเทียน ไม่เหมือน volatility ที่ใช้ราคาปิดของเทียนในการคิด

นึกภาพ กราฟ โดจิ ต่อเนื่อง 2 วัน
Day 1 : Open 10 , high 12, low 8, close 10
Day 2 : Open 9.5, high 12, low 8, close 10

Volatility คิดจากราคาปิด 10 มา 10 .. อ้าวเท่าเดิม ไม่ผันผวนนะ แต่ ATR คิดจาก ส่วนต่างของ 8,12 คือ 4 แน่ะ จะเห็นว่าอยู่ที่เดิม แต่มันแกว่งนะ

สูตรคำนวณ ATR ตัว A มาจาก average
Current ATR = ((Prior ATR x 13) + Current TR)/14

ต่อมาเราก็เอาของแต่ละวันมาหาค่าเฉลี่ย โดยปกติก็จะตั้ง Defualt ไว้ที่ 14 วัน ในส่วนการคำนวณด้วย Python

แต่แบบนั้นน่ะ ไม่ดีหรอก ช้าไป ควรเป็น exponential weighted average แต่เรามาดูตัวอย่างแบบ simple average กันก่อน

บรรยายกันมาเยอะแล้วเรามาใช้ Python กันดีกว่า ก่อนอื่น install lib ที่สำคัญๆด้วย

!pip install yfinance

import lib ที่ต้องใช้กันคือ pandas, yfinance และ matplotlib

import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt

ดึงข้อมูลหุ้นหรือเหรียญที่เราต้องการเพื่อใช้สร้าง ATR

data = yf.download(stocks, start=’2021–01–01')

ก่อนที่สร้าง ATR เราต้องคำนวณ TR แต่ละตัวก่อน

df['TR1'] = abs(df.High — df.Low)
df['TR2'] = abs(df.High — df.Close.shift())
df['TR3'] = abs(df.Low — df.Close.shift())

แล้วหลังจากนั้นเราก็คำนวณหา TR ที่มากที่สุดมา

tr = df[['TR1','TR2','TR3']].max(axis=1)

เราก็ใช้ประโยชน์จาก rolling และหาค่า Mean เพื่อใช้ในการคำนวณ โดยปกติตัว ATR จะมี Default เป็นเลข 14

df['ATR'] = tr.rolling(14).mean()

เท่านี้เราก็จะได้ ATR มาใช้งานแล้วดังรูป

แต่!!! จะเห็นหากเราต้องการสร้าง ATR ของหุ้นตัวนึงก็ต้องทำซ้ำๆหลายรอบ ดังนั้นเราจะมาเขียนเป็นฟังก์ชันเพื่อให้สะดวกต้องการสร้าง ATR ของหุ้นตัวอื่นๆ

ดึงข้อมูลเราก็ยัดเข้าไปในฟังก์ชันที่ชื่อ get_stock แล้วเรื่องตัวแปรที่อยากให้ฟังก์ชันนี้ดึง ซึ่งเราอยากให้ดึงหุ้นแต่ละตัวเราก็ใส่ตัวแปร stocks เข้าไป หากต้องการตัวให้ก็พิมพ์ชื่อหุ้นใส่ลงไปแทนคำว่า stocks ก็จะได้ข้อมูลหุ้นตัวนั้นๆมา

def get_stock(stocks):   data = yf.download(stocks, start=’2021–01–01')   return data

ต่อมาคือการเขียนฟังก์ชันเพื่อสร้าง ATR ก่อนอื่นคือเราใช้ฟังก์ชันที่เราสร้างมาก่อนหน้านี้คือการดึงข้อมูลเข้ามาใช้ร่วมด้วยนั่นคือ get_stock() เพื่อดึงข้อมูลหุ้นหรือสินทรัพย์ที่ต้องการ ส่วนสำคัญต่อมาคือต้องสร้าง TR ทั้งสามแล้วหาค่าที่มากที่สุด แล้วค่อยนำมา Rolling อีกที เราก็จะสามารถยัดทั้งหมดเข้าไปในฟังก์ชันตามที่เขียนไว้ด้านล่างที่ชื่อ get_atr() ได้ แล้วก็ให้ return ค่า dataframe ออกมา โดยเวลาเราเรียกใช้ก็จะมีตัวแปรที่ต้องใส่สองอย่างคือ Ticker ของ Asset และจำนวนวันที่ต้องการ Rolling

def get_atr(stocks, n):    df = get_stock(stocks)    df[‘TR1’] = abs(df.High — df.Low)    df[‘TR2’] = abs(df.High — df.Close.shift())     df[‘TR3’] = abs(df.Low — df.Close.shift())    tr = df[[‘TR1’,’TR2',’TR3']].max(axis=1)    atr = tr.rolling(n).mean()    df[‘ATR’] = atr
return df

จะเห็นได้ว่าเราเพียงแต่เลือก ticker ของหุ้นหรือสินทรัพย์ที่ต้องการสร้าง atr เท่านี้เราก็จะได้ข้อมูล ATR มาแล้ว

btc = get_atr(‘BTC-USD’, 14)gold = get_atr(‘GC=F’, 14)oil = get_atr(‘CL=F’, 14)aapl = get_atr(‘AAPL’, 14)

ทีนี้เราก็สามารถเอาข้อมูลไปทำอะไรก็ได้จะมา Plot เปรียบเทียบ ATR ของแต่ละ Asset ตามด้านล่างนี้ก็ได้

วิธีการ Plot เราก็ใช้ subplot และวาง layout ในการ plot ต่างๆได้เลย

fig, axs = plt.subplots(2, 2, figsize=(12,7))axs[0, 0].plot(btc.ATR, color=’orange’)axs[0, 0].set_title(“Bitcoin”)axs[1, 0].plot(gold.ATR, color=’red’)axs[1, 0].set_title(“Gold”)axs[0, 1].plot(oil.ATR)axs[0, 1].set_title(“Brent Oil”)axs[1, 1].plot(aapl.ATR, color=’green’)axs[1, 1].set_title(“Apple Stock”)fig.suptitle(‘ATR Asset’)fig.tight_layout()
ATR BTC vs Oil vs Gold vs Apple Stock

จากรูปใน 1 ปีที่ผ่านมาดูที่สเกลจะเห็นว่า Bitcoin ผันผวนสูงกว่าหุ้นและสินทรัพย์อื่นๆเยอะมาก ไม่ผิดคาดเท่าไหร่ ซึ่งตัวเลข atr ไม่ได้มีเกณฑ์ที่บอกว่าอันไหนที่ Volatility สูงเกินหรือต่ำเกิน เพราะในแต่ละสินทรัพย์มันก็จะแตกต่างกันไปตามในรูป

หากเราเป็นนักลงทุนที่ Play Safe ขนาดของการลงทุนกับความผันผวนก็จะตรงกันข้าม พูดให้ฟังง่ายๆก็คือช่วงผันผวนเราจะไม่ลงทุนหรือลงทุนน้อย ดังนั้นขนาดของการลงทุนหรือจำนวนการเปิดสัญญาจึงปรับไปตามความผันผวน

จุดสังเกตของ ATR ในช่วงที่ตลาดเป็นในช่วงตลาดขาขึ้น จะให้ความผันผวนน้อยกว่าในช่วงตลาดขาลง และอารมณ์กลัวมีความรุนแรงกว่า จึงทำให้ขาลงมีความผันผวนกว่า

ตัว ATR เป็นพื้นฐานในการเอาไปคำนวณตัว Technical Indicator อีกตัวนั่นคือ ADX ไว้เราจะมาสอนเขียนกันนะ

ลองไปเขียนโค๊ดดูว่าเป็นจริงในทฤษฎีนี้ไหม ใครลองเขียนแล้วเอามาโชว์กันได้นะ

Investic

--

--