เทคนิคที่ 022 · PYTHON / JAVASCRIPT

กราฟแท่งเทียนCandlestick Chart

สี่ตัวเลขต่อหนึ่งคาบในสัญลักษณ์เดียว

4
ขั้นสูงควรรู้ก่อน · อ่านกราฟเส้นเป็น และรู้ว่าราคาเปิด ปิด สูงสุด ต่ำสุดคืออะไร
ลองเล่น

01ภาพรวมของกราฟนี้

Candlestick chart อัดข้อมูลสี่ค่าต่อหนึ่งคาบเวลาไว้ในสัญลักษณ์เดียว ตัวเทียนบอกช่วงระหว่างราคาเปิดกับปิด ไส้เทียนบอกช่วงสูงสุดถึงต่ำสุด และสีบอกทิศทาง ทำให้เห็นทั้งความผันผวนภายในคาบและผลลัพธ์ของคาบพร้อมกัน

เปรียบเทียบให้เห็นภาพ

เหมือนสรุปสภาพอากาศของแต่ละวันด้วยสัญลักษณ์เดียวที่บอกทั้งอุณหภูมิเช้า เย็น สูงสุด และต่ำสุด แทนที่จะต้องดูสี่กราฟ

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

สร้างอย่างไร

  1. ขั้นที่ 1เตรียมข้อมูลสี่ค่าต่อคาบ
  2. ขั้นที่ 2วาดไส้เทียนจากต่ำสุดถึงสูงสุด
  3. ขั้นที่ 3วาดตัวเทียนระหว่างเปิดกับปิด
  4. ขั้นที่ 4ระบายสีตามทิศทาง

ตัวอย่างคลาสสิก · แท่งเทียนจากตลาดข้าวญี่ปุ่นในศตวรรษที่ 18

พ่อค้าข้าวชาวญี่ปุ่นชื่อ Munehisa Homma พัฒนาวิธีบันทึกราคาแบบแท่งเทียนขึ้นที่ตลาดโดจิมะ เพื่อจับทั้งช่วงแกว่งและทิศทางของแต่ละวันในสัญลักษณ์เดียว รูปแบบนี้เข้าสู่โลกตะวันตกในทศวรรษ 1990 และกลายเป็นมาตรฐานของกราฟราคาจนถึงวันนี้

Wikipedia · Candlestick chart

02อธิบายภาษาคนเข้าใจง่าย ๆ

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

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

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

สิ่งที่แท่งเทียนบอกได้และกราฟเส้นบอกไม่ได้คือ "ความผันผวนภายในคาบ" ไส้ที่ยาวมากแปลว่าวันนั้นราคาแกว่งแรงแม้จะปิดใกล้เคียงกับที่เปิด ซึ่งเป็นข้อมูลสำคัญเรื่องความเสี่ยง

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

03ข้อมูลที่ต้องใช้

รูปทรงของข้อมูลอนุกรมเวลา
จำนวนมิติที่เข้ารหัสได้5 มิติ
จำนวนแถวที่เหมาะ30–90 คาบขั้นต่ำ 10 แถว
เส้นฐานศูนย์เลือกได้อ่านจากตำแหน่งและช่วง ไม่ใช่ความยาวจากศูนย์ และราคาแทบไม่เคยใกล้ศูนย์

คอลัมน์ที่ต้องเตรียม

คอลัมน์ทำหน้าที่ชนิดเข้ารหัสด้วยจำนวนค่าที่เหมาะหมายเหตุ
dateคาบเวลาเวลาx20–120 คาบหนึ่งแท่งต่อหนึ่งคาบ
openราคาเปิดตัวเลขต่อเนื่องyต่อเนื่องค่าแรกของคาบ
highสูงสุดตัวเลขต่อเนื่องyต่อเนื่องต้อง >= max(open, close)
lowต่ำสุดตัวเลขต่อเนื่องyต่อเนื่องต้อง <= min(open, close)
closeราคาปิดตัวเลขต่อเนื่องyต่อเนื่องค่าสุดท้ายของคาบ

ต้องเตรียมข้อมูลอย่างไรก่อนวาด

  1. ตรวจว่า high >= max(open, close) และ low <= min(open, close) ทุกแถว
  2. เรียงตามเวลา
  3. ตัดสินใจว่าจะแสดงคาบที่ไม่มีการซื้อขายอย่างไร

ค่าที่หายไป — คาบที่ไม่มีการซื้อขายควรเว้นช่องว่างหรือย่อแกนข้ามไป ต้องเลือกอย่างใดอย่างหนึ่งและระบุ

สเกลของแกน — linear สำหรับช่วงสั้น และ log สำหรับช่วงยาวที่ราคาเปลี่ยนหลายเท่า เพราะ log ทำให้เปอร์เซ็นต์การเปลี่ยนแปลงที่เท่ากันดูเท่ากัน

กราฟจะเริ่มพังเมื่อไร

เกิน 150 แท่ง แท่งจะบางจนไส้และตัวเทียนแยกไม่ออก — ลดช่วงเวลาหรือเปลี่ยนเป็น line-chart

หน้าตาไฟล์ที่ต้องเตรียม

date,open,high,low,close

04อ่านแล้วเห็นอะไร

สิ่งที่เห็นได้จากภาพ

  • ทิศทางของแต่ละคาบจากสี
  • ความผันผวนภายในคาบจากความยาวของไส้
  • ช่วงที่มีคาบบวกหรือลบติดต่อกัน
  • คาบที่แกว่งแรงผิดปกติ

สิ่งที่กราฟนี้ตอบไม่ได้

  • ไม่บอกลำดับของการเคลื่อนไหวภายในคาบ — ไม่รู้ว่าแตะสูงสุดก่อนหรือต่ำสุดก่อน
  • ไม่บอกปริมาณการซื้อขาย ซึ่งต้องมีกราฟแยก

อ่านตามลำดับนี้

  1. ดูสีเพื่อรู้ทิศทางของคาบ
  2. ดูความยาวของไส้เพื่อประเมินความผันผวน
  3. ดูความหนาของตัวเทียนเพื่อรู้ขนาดของการเปลี่ยนแปลงสุทธิ

คำถามที่ตอบได้

  • วันนี้ราคาขึ้นหรือลง
  • วันไหนที่แกว่งแรงที่สุด
  • มีช่วงที่ขึ้นติดต่อกันกี่วัน

สัญญาณว่ามีอะไรผิด

  • high ต่ำกว่า open หรือ close ซึ่งแปลว่าข้อมูลผิด
  • แท่งเยอะจนไส้กับตัวเทียนแยกไม่ออก

05เหมาะกับการนำเสนอแบบไหน

ผู้ชมที่เหมาะผู้ที่คุ้นกับข้อมูลราคาและรู้ความหมายของไส้เทียน
เวลาที่ผู้ชมต้องใช้ต้องเรียนรู้ก่อน
ขนาดเล็กสุดที่ยังอ่านได้480×280 px
รายงานเชิงวิเคราะห์
dashboard ที่อัปเดตตลอด
สำรวจข้อมูลด้วยตัวเอง
สื่อสารกับคนทั่วไปต้องเรียนรู้วิธีอ่านก่อน ผู้อ่านทั่วไปไม่เข้าใจไส้เทียน
มือถือแท่งบางเกินกว่าจะเห็นรายละเอียดบนจอเล็ก

ทำอย่างไรให้คนอ่านได้ข้อสรุปโดยไม่ต้องบรรยาย

  1. ทำเครื่องหมายคาบที่มีเหตุการณ์สำคัญ
  2. วางกราฟปริมาณการซื้อขายไว้ใต้กราฟราคาด้วยแกนเวลาเดียวกัน
  3. เขียนช่วงเวลาที่แสดงให้ชัด

รูปแบบชื่อกราฟที่ควรใช้

ราคาปิดที่ <ค่า> โดยมีคาบบวก <จำนวน> จาก <ทั้งหมด> คาบ

06เอาไปใช้ต่อ

โค้ดทุกชิ้นอ่านไฟล์ candlestick-chart-sample.csv ชุดเดียวกับที่ Playground ใช้ และตัวเลขในโค้ดเปลี่ยนตามค่าที่คุณปรับด้านล่าง

# ติดตั้ง: pip install "matplotlib==3.10.*" "pandas==2.*"
# ดาวน์โหลด candlestick-chart-sample.csv จากหน้านี้ แล้ววางไว้ข้างสคริปต์
import matplotlib
matplotlib.use("Agg")   # รันแบบไม่มีหน้าจอ ถ้ารันในเครื่องตัวเองลบบรรทัดนี้ได้
import matplotlib.pyplot as plt
import pandas as pd

C1, C2, C3 = "#2a78d6", "#eb6834", "#1baf7a"   # palette ของคลัง เปลี่ยนเป็นสีองค์กรได้
INK, SURFACE = "#0b0b0b", "#fcfcfb"

df = pd.read_csv("candlestick-chart-sample.csv")
df["open"] = pd.to_numeric(df["open"], errors="coerce")
df["high"] = pd.to_numeric(df["high"], errors="coerce")
df["low"] = pd.to_numeric(df["low"], errors="coerce")
df["close"] = pd.to_numeric(df["close"], errors="coerce")
NOTE = "wick"   # ← ค่าจาก Playground

fig, ax = plt.subplots(figsize=(7.6, 4.2), facecolor=SURFACE)
ax.set_facecolor(SURFACE)

df["date"] = pd.to_datetime(df["date"])
d = df.sort_values("date")
for _, r in d.iterrows():
    up = r["close"] >= r["open"]
    color = "#008300" if up else "#e34948"
    ax.plot([r["date"], r["date"]], [r["low"], r["high"]], color=color, linewidth=1.2)  # ไส้เทียน
    ax.plot([r["date"], r["date"]], [r["open"], r["close"]], color=color, linewidth=5)  # ตัวเทียน
ax.set_ylabel("ราคา"); ax.grid(axis="y", alpha=0.25); ax.set_axisbelow(True)
fig.autofmt_xdate()

ax.spines[["top", "right"]].set_visible(False)   # ลดเส้นที่ไม่ได้ให้ข้อมูล
fig.tight_layout()
fig.savefig("candlestick-chart.png", dpi=160)
print("เขียน candlestick-chart.png แล้ว ·", len(df), "แถว")

ติดตั้ง: pip install "matplotlib==3.10.*" "pandas==2.*" · ทดสอบกับเวอร์ชัน 3.10

07ลองเล่นเพื่อเข้าใจ

ข้อมูลตัวอย่าง · 30 แถว · seed 47● คำนวณใหม่ในเบราว์เซอร์ทันทีที่ปรับค่า
ไส้ยาวแปลว่าแกว่งแรงระหว่างคาบ
ปิดสูงกว่าเปิดปิดต่ำกว่าเปิด
44.046.048.050.052.054.02025-06-022025-06-032025-06-042025-06-052025-06-062025-06-072025-06-082025-06-092025-06-102025-06-112025-06-122025-06-132025-06-142025-06-152025-06-162025-06-172025-06-182025-06-192025-06-202025-06-212025-06-222025-06-232025-06-242025-06-252025-06-262025-06-272025-06-282025-06-292025-06-302025-07-012025-06-02 · เปิด 48.00 สูง 48.49 ต่ำ 45.81 ปิด 46.662025-06-03 · เปิด 46.66 สูง 48.24 ต่ำ 46.33 ปิด 47.742025-06-04 · เปิด 47.74 สูง 48.62 ต่ำ 46.85 ปิด 47.882025-06-05 · เปิด 47.88 สูง 48.38 ต่ำ 47.21 ปิด 47.602025-06-06 · เปิด 47.60 สูง 49.10 ต่ำ 46.96 ปิด 48.362025-06-07 · เปิด 48.36 สูง 48.98 ต่ำ 46.94 ปิด 47.122025-06-08 · เปิด 47.12 สูง 48.97 ต่ำ 46.32 ปิด 47.922025-06-09 · เปิด 47.92 สูง 50.38 ต่ำ 47.38 ปิด 50.142025-06-10 · เปิด 50.14 สูง 53.11 ต่ำ 49.58 ปิด 51.942025-06-11 · เปิด 51.94 สูง 52.29 ต่ำ 51.14 ปิด 51.332025-06-12 · เปิด 51.33 สูง 51.55 ต่ำ 50.06 ปิด 50.422025-06-13 · เปิด 50.42 สูง 51.34 ต่ำ 49.45 ปิด 50.872025-06-14 · เปิด 50.87 สูง 51.77 ต่ำ 48.68 ปิด 49.552025-06-15 · เปิด 49.55 สูง 50.24 ต่ำ 48.25 ปิด 49.042025-06-16 · เปิด 49.04 สูง 49.72 ต่ำ 47.84 ปิด 48.952025-06-17 · เปิด 48.95 สูง 49.90 ต่ำ 47.95 ปิด 49.582025-06-18 · เปิด 49.58 สูง 50.76 ต่ำ 48.65 ปิด 49.072025-06-19 · เปิด 49.07 สูง 50.86 ต่ำ 48.63 ปิด 50.042025-06-20 · เปิด 50.04 สูง 51.13 ต่ำ 49.02 ปิด 51.102025-06-21 · เปิด 51.10 สูง 52.38 ต่ำ 50.80 ปิด 51.892025-06-22 · เปิด 51.89 สูง 51.99 ต่ำ 50.57 ปิด 51.202025-06-23 · เปิด 51.20 สูง 51.83 ต่ำ 49.79 ปิด 50.312025-06-24 · เปิด 50.31 สูง 51.03 ต่ำ 50.02 ปิด 50.652025-06-25 · เปิด 50.65 สูง 51.14 ต่ำ 49.65 ปิด 50.972025-06-26 · เปิด 50.97 สูง 51.04 ต่ำ 49.41 ปิด 49.692025-06-27 · เปิด 49.69 สูง 51.17 ต่ำ 49.68 ปิด 50.652025-06-28 · เปิด 50.65 สูง 51.18 ต่ำ 49.52 ปิด 49.722025-06-29 · เปิด 49.72 สูง 49.76 ต่ำ 48.50 ปิด 48.832025-06-30 · เปิด 48.83 สูง 49.74 ต่ำ 47.73 ปิด 49.682025-07-01 · เปิด 49.68 สูง 51.82 ต่ำ 49.00 ปิด 50.76
วันที่ปิดบวก16 จาก 30
ช่วงแกว่งกว้างสุด3.53
ปิดล่าสุด50.76
ดูข้อมูลเป็นตาราง (30 แถว)
candlestick 30 คาบ ปิดบวก 16 คาบ
วันที่เปิดสูงต่ำปิด
2025-06-0248.0048.4945.8146.66
2025-06-0346.6648.2446.3347.74
2025-06-0447.7448.6246.8547.88
2025-06-0547.8848.3847.2147.60
2025-06-0647.6049.1046.9648.36
2025-06-0748.3648.9846.9447.12
2025-06-0847.1248.9746.3247.92
2025-06-0947.9250.3847.3850.14
2025-06-1050.1453.1149.5851.94
2025-06-1151.9452.2951.1451.33
2025-06-1251.3351.5550.0650.42
2025-06-1350.4251.3449.4550.87
2025-06-1450.8751.7748.6849.55
2025-06-1549.5550.2448.2549.04
2025-06-1649.0449.7247.8448.95
2025-06-1748.9549.9047.9549.58
2025-06-1849.5850.7648.6549.07
2025-06-1949.0750.8648.6350.04
2025-06-2050.0451.1349.0251.10
2025-06-2151.1052.3850.8051.89
2025-06-2251.8951.9950.5751.20
2025-06-2351.2051.8349.7950.31
2025-06-2450.3151.0350.0250.65
2025-06-2550.6551.1449.6550.97
2025-06-2650.9751.0449.4149.69
2025-06-2749.6951.1749.6850.65
2025-06-2850.6551.1849.5249.72
2025-06-2949.7249.7648.5048.83
2025-06-3048.8349.7447.7349.68
2025-07-0149.6851.8249.0050.76

ลองแล้วจะเห็นอะไร

  • สังเกตอะไร: หาคาบที่ตัวเทียนสั้นแต่ไส้ยาวมาก นั่นคือวันที่ราคาแกว่งแรงแต่จบใกล้เดิม ซึ่งกราฟเส้นที่ใช้ราคาปิดอย่างเดียวมองไม่เห็นเลย

ข้อควรระวัง

  1. ใช้กราฟนี้ทั้งที่มีแค่ราคาปิด ซึ่งไม่ได้อะไรเพิ่มจากกราฟเส้น
  2. ไม่ตรวจว่า high และ low สอดคล้องกับ open และ close ทำให้วาดข้อมูลที่ผิดออกมา
  3. ใส่แท่งมากเกินไปจนไส้กับตัวเทียนแยกไม่ออก
  4. ใช้สีแดงเขียวโดยไม่มีสัญลักษณ์อื่นช่วย ทำให้คนตาบอดสีอ่านทิศทางไม่ได้

เมื่อไหร่ไม่ควรใช้กราฟนี้

  • มีเฉพาะราคาปิดใช้แทน: line-chart
  • ผู้อ่านไม่คุ้นกับข้อมูลราคาใช้แทน: line-chart พร้อมแถบแสดงช่วง
  • สนใจแค่ความผันผวนใช้แทน: confidence-band หรือ box-plot รายคาบ

กราฟที่เกี่ยวข้อง

เทคนิคถัดไป · กราฟความชัน