ผมเขียน Pine Script สำหรับ TradingView เพื่อใช้สำหรับหาจุดที่เป็นสัญญาณซื้อและขายได้สะดวกขึ้น
Pine Script
//@version=6
indicator(title="MERV Stack (Refined)", shorttitle="MERV Stack+", overlay=false)
// =====================
// Inputs
// =====================
src = input.source(close, title="Source")
use_macd_colors = input.bool(false, title="Use MACD Colors (Green/Red MACD Histogram)")
confirm_on_close = input.bool(true, title="Confirm Signals on Bar Close (reduces intra-bar repaint)")
allow_reentry_exit = input.bool(true, title="Allow Re-entry During Exit Window")
// RSI
rsi_len = input.int(14, minval=5, title="RSI Length")
rsi_pos = input.int(55, minval=50, title="RSI Positive (mild bullish)")
rsi_strong = input.int(65, minval=51, title="RSI Strong (strong bullish)")
rsi_ob = input.int(70, minval=51, title="RSI OverBought (unused visual)")
rsi_os = input.int(30, minval=1, title="RSI OverSold (unused visual)")
rsi = ta.rsi(src, rsi_len)
// MACD (standard: EMA signal)
macd_fast_len = input.int(12, minval=1, title="MACD FastLength")
macd_slow_len = input.int(26, minval=1, title="MACD SlowLength")
macd_sig_len = input.int(9, minval=1, title="Signal Length")
ma_fast = ta.ema(src, macd_fast_len)
ma_slow = ta.ema(src, macd_slow_len)
macd = ma_fast - ma_slow
signal = ta.ema(macd, macd_sig_len)
hist = macd - signal
// SMA-EMA
sma_fast_len = input.int(5, minval=1, title="SMA FastLength")
sma_slow_len = input.int(20, minval=1, title="SMA SlowLength")
ema_fast_len = input.int(5, minval=1, title="EMA FastLength")
ema_slow_len = input.int(20, minval=1, title="EMA SlowLength")
sma_fast = ta.sma(src, sma_fast_len)
sma_slow = ta.sma(src, sma_slow_len)
ema_fast = ta.ema(src, ema_fast_len)
ema_slow = ta.ema(src, ema_slow_len)
// VWAP (use close vs vwap for comparison consistency)
vwap = ta.vwap(hlc3)
// =====================
// Derived Signals
// =====================
rsi_up = rsi >= rsi_pos
rsi_strong_up = rsi >= rsi_strong
macd_up = hist > 0
macd_rising = hist > hist[1]
ema_up = ema_fast > ema_slow
price_above_vw = close > vwap
signal_count = (rsi_up ? 1 : 0) + (macd_up ? 1 : 0) + (ema_up ? 1 : 0)
// Entry (strong confluence)
strong_long = price_above_vw and rsi_strong_up and ema_up and macd_up and macd_rising
// Exit: MACD crossing down (MACD <= Signal with a bearish cross)
macd_cross_down = ta.crossover(signal, macd)
// =====================
// State: Entry/Exit window
// =====================
var bool in_position = false
var int exit_bar_count = 0
exit_bar_duration = input.int(3, minval=1, title="Exit Highlight Bars")
// Gate signals at bar close if requested
can_fire = confirm_on_close ? barstate.isconfirmed : true
// Entry/Exit state transitions
if can_fire
// Exit condition
if in_position and macd_cross_down
exit_bar_count := exit_bar_duration
in_position := false
// Allow re-entry during exit window if toggle enabled
if strong_long and (allow_reentry_exit or exit_bar_count == 0)
in_position := true
// Exit bar countdown
if exit_bar_count > 0 and can_fire
exit_bar_count -= 1
// =====================
// Coloring Logic
// =====================
var color SIGNAL_LINE_COLOR = color.purple
// MACD histogram color logic (standard)
color macd_hist_color = color.gray
if hist >= 0
macd_hist_color := hist > hist[1] ? color.green : color.new(color.green, 60)
else
macd_hist_color := hist < hist[1] ? color.red : color.new(color.red, 60)
// Custom Plot Color logic
color plot_color = color.gray
if exit_bar_count > 0
plot_color := color.blue
else
if price_above_vw
if rsi_strong_up and ema_up and macd_up and macd_rising
plot_color := color.lime
else if rsi_up and ema_up and macd_up
plot_color := color.green
else if (signal_count == 2) or (macd_up and not macd_rising)
plot_color := color.orange
else if signal_count == 1
plot_color := color.red
else
plot_color := color.gray
else
// More conservative when below VWAP
if rsi_strong_up and ema_up and macd_up and macd_rising
plot_color := color.orange
else if signal_count >= 2
plot_color := color.red
else
plot_color := color.red
// MACD line color logic
color macd_line_color = use_macd_colors ? color.blue : (price_above_vw ? color.green : color.white)
// =====================
// Plots
// =====================
plot(hist,
title="Histogram",
color=use_macd_colors ? macd_hist_color : plot_color,
style=plot.style_histogram,
linewidth=4)
hline(0, '0 Line', linestyle=hline.style_solid, linewidth=1, color=color.silver)
plot(macd,
title="MACD",
color=macd_line_color,
style=plot.style_line,
linewidth=2)
plot(signal,
title="Signal",
color=SIGNAL_LINE_COLOR,
style=plot.style_line,
linewidth=1)
// =====================
// Alerts (optional)
// =====================
alertcondition(strong_long and (allow_reentry_exit or exit_bar_count == 0),
title="Strong Long Setup",
message="MERV Stack+: Strong long setup detected")
alertcondition(macd_cross_down,
title="MACD Bearish Cross (Exit)",
message="MERV Stack+: MACD crossed down (consider exit)")
คู่มือการใช้งาน MERV Stack สำหรับ TradingView
ภาพรวม
MERV Stack เป็นอินดิเคเตอร์ที่ผสานสัญญาณจาก MACD, RSI, EMA และ VWAP เพื่อประเมิน “แรงหนุนฝั่งซื้อ” ด้วยสีของ MACD Histogram และเส้น MACD/Signal โดยออกแบบให้เน้นจังหวะที่มีความสอดคล้องของเทรนด์ระยะสั้น-กลาง และกรองสัญญาณด้วยตำแหน่งราคาเทียบ VWAP
องค์ประกอบหลัก
1) MACD (มาตรฐาน)
- MACD = EMA(src, fast) − EMA(src, slow)
- Signal = EMA(MACD, signalLength)
- Histogram = MACD − Signal
- ใช้สีมาตรฐานเมื่อเปิดโหมด “Use MACD Colors”:
- เขียวเข้ม: Histogram บวกและเพิ่มขึ้น
- เขียวอ่อน: Histogram บวกแต่ลดลง
- แดงเข้ม: Histogram ลบและลดลงต่อ
- แดงอ่อน: Histogram ลบแต่เริ่มเพิ่มขึ้น
- เมื่อปิดโหมด “Use MACD Colors” จะใช้สีตามตรรกะรวม (ดูหัวข้อ “ตรรกะสี Histogram”)
2) RSI
- rsi_len ค่าเริ่มต้น 14
- เกณฑ์หลัก:
- RSI_Positive (เชิงบวกเบา) = 55
- RSI_Strong (เชิงบวกมาก) = 65
- ในตรรกะจะใช้ rsi ≥ 55 เพื่อเพิ่มคะแนน และ rsi ≥ 65 เพื่อยกระดับสัญญาณเป็น “เข้มแข็ง”
3) EMA Trend
- EMA_Fast vs EMA_Slow (ค่าเริ่มต้น 5/20)
- EMA_Up = EMA_Fast > EMA_Slow เพื่อบ่งชี้แนวโน้มขาขึ้นระยะสั้น
4) VWAP
- เปรียบเทียบ close กับ vwap เพื่อดูว่าราคาอยู่เหนือหรือใต้ค่าเฉลี่ยแบบมีน้ำหนักตามปริมาณ (price_above_vw = close > vwap)
- ใช้เป็นตัวกรองเทรนด์: เหนือ VWAP = เน้นฝั่งซื้อ ใต้ VWAP = ระวัง/อนุรักษนิยม
5) สถานะและหน้าต่าง Exit
- มีตัวแปร in_position และ exit_bar_count เพื่อไฮไลต์ช่วง “หลังพบสัญญาณออก” ด้วยสีฟ้า (blue) จำนวน N แท่ง (ค่าเริ่มต้น 3) เพื่อเตือนว่าฝั่งซื้ออ่อนแรงชั่วคราว
- สามารถตั้งค่า allow_reentry_exit เพื่ออนุญาตให้กลับเข้าสญญาณแรงซื้ออีกครั้งระหว่างช่วงสีฟา หากเงื่อนไขแข็งแรงกลับมา
6) ยืนยันสญญาณเมื่อแท่งปิด (bar close)
- confirm_on_close = true จะลดสญญาณหลอกที่เกิดระหว่างแท่งกำลังวิ่ง (intra-bar) โดยตัดสินใจเมื่อแทงปิดเท่านั้น
ตรรกะสี Histogram (เมื่อปิด Use MACD Colors)
- สีฟ้า (blue): ช่วง Exit highlight (MACD มีการครอสลงก่อนหน้า) ใช้เตือนว่าควรระวังฝั่งซื้อ
- เหนือ VWAP:
- เขียวมะนาว (lime): เงื่อนไขแรงซื้อครบถ้วน (RSI_StrongUp + EMA_Up + MACD_Up + MACD_Rising)
- เขียว (green): เงื่อนไขซื้อเชิงบวก (RSI_Up + EMA_Up + MACD_Up)
- ส้ม (orange): มี 2 ใน 3 สัญญาณ หรือ MACD บวกแต่ไม่เพิ่มขึ้น
- แดง (red): มี 1 ใน 3 สัญญาณ
- เทา (gray): ไม่มีสัญญาณบวก
- ใต้ VWAP:
- ส้ม (orange): แรงมากแต่ยังอยู่ใต้ VWAP (ลดความมั่นใจ)
- แดง (red): 2 สัญญาณขึ้นไปแต่ยังใต้ VWAP หรือสัญญาณอ่อนแอ รวมถึงกรณอื่น ๆ
สรุปการใช้งานแบบเร็ว
- เปิดบนกราฟที่ใช้: เลือก src เป็น close (ค่าเริ่มต้น) และปรับ RSI/EMA/MACD ตามสินทรพย์และไทม์เฟรม
- โหมดสี:
- ถ้าตองการอ่านพฤติกรรม MACD แบบมาตรฐาน: เปิด “Use MACD Colors”
- ถ้าต้องการอ่านแรงหนุนจากทั้ง MACD+RSI+EMA+VWAP: ปิด “Use MACD Colors” แล้วดูสีตามตรรกะรวม
- การอ่านสัญญาณ:
- เหนือ VWAP + lime/green: ฝั่งซื้อได้เปรียบ (lime เขมแข็งกว่า green)
- เหนือ VWAP + orange: เริ่มมีแรง แต่ยังไม่ครบองค์ประกอบ หรือโมเมนตม MACD เริ่มชะลอ
- ใต้ VWAP + orange/red: ระวังเป็นพิเศษ เป็นสัญญาณตานเทรนด์หลัก
- blue: เพิ่งมีสัญญาณออกจากฝั่งซื้อ (MACD ครอสลง) ให้ลดความเสี่ยง/รอคดกรองรอบใหม่
- คำแนะนำด้านไทมเฟรม (สำหรับ day trading 30m > 15m > 5m):
- ใช้ 30m เป็นเทรนด์หลักและตำแหน่งเหนือ/ใต้ VWAP
- หาเซ็ตอัพบน 15m ให้สอดคลองกับ 30m
- จังหวะเข้า-ออกละเอียดบน 5m โดยอ้างอิงสี lime/green เมื่อเหนือ VWAP
- ปรับลดสัญญาณหลอก:
- เปิด confirm_on_close = true เพื่อตัดสินใจเฉพาะเมื่อแท่งปิด
- พิจารณาลด RSI_Strong เป็น ~60–62 หากเทรดครปโตช่วงสั้นให้ได้จังหวะมากขึ้น
- การแจ้งเตือน:
- มี alertcondition สำหรับ “Strong Long Setup” และ “MACD Bearish Cross (Exit)” (แม้จะไม่ได้แสดงรูปรางบนกราฟ) ตั้งค่า Alerts ใน TradingView ตามต้องการ
การตั้งค่าแนะนำเบื้องต้น
- MACD: 12/26/9 (มาตรฐาน)
- EMA Fast/Slow: 5/20 สำหรับตลาดคริปโตระยะสั้น
- RSI: 14; RSI_Positive = 55, RSI_Strong = 65 (ลองปรบ 60–62 สำหรับ 5–15m)
- Exit Highlight Bars: 3 (ปรับตามความเร็วของสินทรัพย์)
- confirm_on_close: เปิด
- allow_reentry_exit: เปิด สำหรับตลาดที่ผันผวน
แนวทางตีความสัญญาณเชิงกลยุทธ์
- เขาซื้อแบบอนุรักษ์: รอ lime เหนอ VWAP + MACD_Rising แล้วใช้ green/lime ต่อเนื่องยืนยัน
- เข้าซื้อแบบเชิงรุก: เหนือ VWAP + green พร้อมดู orange เป็นสัญญาณเตรียมการ (แต่รอยืนยันด้วย lime หรือคอนเฟิร์มแทงปด)
- ลด/ออก: เมื่อเห็น blue และ MACD ครอสลง ให้ลดขนาดสถานะหรือรอจดตั้งต้นใหม่
- หลีกเลยงสวนเทรนด์: สีส้ม/แดงใตวีแวป ให้ใช้เป็นช่วงเฝ้าระวง ไม่แนะนำเทรดสวน
ข้อควรทราบ
- อินดิเคเตอร์นี้เป็นตัวช่วยการตดสินใจ ไม่ใช่สัญญาณซื้อขายอัตโนมัติ
- ไม่มีการเรียกดูไทมเฟรมสูงกว่า (security) จึงลดความเสี่ยงการ repaint แต่สัญญาณ intra-bar ยังแกว่งได้ หากปิดแทงแล้วค่อยยืนยันจะนิ่งกว่า
- แนะนำให้ทดสอบย้อนหลัง (backtest แบบ manual) กับสินทรัพย์/ไทม์เฟรมที่ใชงานจริงเพื่อปรับพารามิเตอร์ให้เหมาะสม
TL;DR
สรุปสั้นสำหรับผู้ใช้ใหม่
- ดูสี Histogram เป็นหลัก:
- lime/green เหนือ VWAP = ซื้อได้เปรียบ
- orange = เริ่มมีแรงแต่ยังไม่ครบ หรือโมเมนตัมชะลอ
- red/gray = ยังไม่พร้อม
- blue = เพิ่งมีสัญญาณออก (ระวัง/พัก)
- เปิด confirm_on_close เพื่อลดสญญาณหลอก และปรับ RSI_Strong ให้เหมาะกับความเร็วของตลาดที่คุณเทรด