USD JPY วิเคราะห์ — คู่เงินดอลลาร์สหรัฐ/เยนญี่ปุ่น
USD/JPY เป็นคู่เงินที่มีสภาพคล่องสูงเป็นอันดับสองของโลก รองจาก EUR/USD เรียกว่า "Gopher" ในวงการ forex การวิเคราะห์ USD/JPY ต้องเข้าใจนโยบายการเงินของ Fed (สหรัฐฯ) และ BOJ (ญี่ปุ่น) ส่วนต่างอัตราดอกเบี้ย (interest rate differential) ค่าเงินเยนมักเป็น safe haven ในช่วงตลาดผันผวน บทความนี้อธิบายปัจจัยที่ส่งผลต่อ USD/JPY เทคนิคการวิเคราะห์ทั้ง Fundamental และ Technical พร้อม Python tools สำหรับวิเคราะห์อัตโนมัติ
ปัจจัย Fundamental ที่ส่งผลต่อ USD/JPY
# fundamental.py — USD/JPY fundamental factors
import json
class USDJPYFundamentals:
FACTORS = {
"interest_rate_diff": {
"name": "ส่วนต่างอัตราดอกเบี้ย (Interest Rate Differential)",
"description": "ปัจจัยสำคัญที่สุด — Fed rate สูงกว่า BOJ rate → USD แข็ง → USD/JPY ขึ้น",
"current": "Fed: 5.25-5.50% vs BOJ: 0.0-0.10% → spread ~5.25%",
"impact": "Spread กว้าง → carry trade เข้า USD → USD/JPY bullish",
},
"boj_policy": {
"name": "นโยบาย BOJ (Bank of Japan)",
"description": "BOJ เป็น dovish ที่สุดในโลก — YCC (Yield Curve Control), QQE",
"key_events": "BOJ meeting, Governor speeches, YCC adjustments",
"impact": "BOJ hawkish → JPY แข็ง → USD/JPY ลง (rare but powerful)",
},
"fed_policy": {
"name": "นโยบาย Fed (Federal Reserve)",
"description": "Fed rate hike → USD แข็ง → USD/JPY ขึ้น, Fed cut → USD/JPY ลง",
"key_events": "FOMC meeting, dot plot, Powell speeches, CPI/NFP data",
},
"safe_haven": {
"name": "Safe Haven Flow",
"description": "เยนเป็น safe haven — crisis → ทุนไหลเข้า JPY → USD/JPY ลง",
"triggers": "Geopolitical risk, stock market crash, financial crisis",
},
"trade_balance": {
"name": "ดุลการค้าญี่ปุ่น",
"description": "ญี่ปุ่นขาดดุลการค้า → ต้องซื้อ USD → USD/JPY ขึ้น",
"note": "น้ำมันแพง → ญี่ปุ่น import มากขึ้น → JPY อ่อน",
},
"intervention": {
"name": "BOJ/MOF Intervention",
"description": "กระทรวงการคลังญี่ปุ่นเข้าแทรกแซงเมื่อเยนอ่อนเร็วเกินไป",
"level": "USD/JPY > 150-160 → เสี่ยง intervention → JPY แข็งกลับเร็ว",
},
}
def show_factors(self):
print("=== Fundamental Factors ===\n")
for key, factor in self.FACTORS.items():
print(f"[{factor['name']}]")
print(f" {factor['description']}")
if 'impact' in factor:
print(f" Impact: {factor['impact']}")
print()
fund = USDJPYFundamentals()
fund.show_factors()
Technical Analysis
# technical.py — USD/JPY technical analysis tools
import json
import random
class TechnicalAnalysis:
INDICATORS = {
"moving_averages": {
"name": "Moving Averages (MA)",
"setup": "EMA 20, 50, 200 บน Daily chart",
"signal": "Price > EMA200 = uptrend, Golden Cross (EMA50 > EMA200) = bullish",
"usdjpy_note": "USD/JPY มักเคารพ EMA200 บน Daily เป็นอย่างดี",
},
"rsi": {
"name": "RSI (Relative Strength Index)",
"setup": "RSI 14 periods",
"signal": "> 70 = overbought, < 30 = oversold, divergence = reversal signal",
"usdjpy_note": "USD/JPY ใน strong trend อาจอยู่ overbought นานมาก — ระวัง",
},
"ichimoku": {
"name": "Ichimoku Cloud",
"setup": "Settings 9-26-52 (default) บน Daily/Weekly",
"signal": "Price above cloud = bullish, Tenkan > Kijun = buy signal",
"usdjpy_note": "Ichimoku ถูกพัฒนาสำหรับ JPY pairs — ทำงานดีมากกับ USD/JPY",
},
"fibonacci": {
"name": "Fibonacci Retracement",
"setup": "วาดจาก major swing low ถึง swing high",
"signal": "38.2%, 50%, 61.8% เป็น support levels สำคัญ",
},
"pivot_points": {
"name": "Pivot Points",
"setup": "Daily/Weekly pivot points",
"signal": "S1, S2, R1, R2 เป็นแนวรับ-ต้านสำคัญ",
},
}
def show_indicators(self):
print("=== Technical Indicators ===\n")
for key, ind in self.INDICATORS.items():
print(f"[{ind['name']}]")
print(f" Setup: {ind['setup']}")
print(f" Signal: {ind['signal']}")
if 'usdjpy_note' in ind:
print(f" USD/JPY: {ind['usdjpy_note']}")
print()
def current_levels(self):
price = random.uniform(148, 158)
print(f"=== USD/JPY Current Analysis ===")
print(f" Price: {price:.2f}")
print(f" EMA20: {price - random.uniform(0.5, 2):.2f}")
print(f" EMA50: {price - random.uniform(1, 4):.2f}")
print(f" EMA200: {price - random.uniform(3, 10):.2f}")
print(f" RSI(14): {random.uniform(40, 75):.1f}")
print(f" Trend: {'Bullish' if random.random() > 0.4 else 'Bearish'}")
print(f" Support: {price - random.uniform(1, 3):.2f}, {price - random.uniform(3, 6):.2f}")
print(f" Resistance: {price + random.uniform(1, 3):.2f}, {price + random.uniform(3, 6):.2f}")
ta = TechnicalAnalysis()
ta.show_indicators()
ta.current_levels()
Python Analysis Tool
# analyzer.py — Python USD/JPY analyzer
import json
class USDJPYAnalyzer:
CODE = """
# usdjpy_analyzer.py — Automated USD/JPY analysis
import yfinance as yf
import pandas as pd
import numpy as np
class USDJPYAnalyzer:
def __init__(self, period='1y'):
self.pair = 'USDJPY=X'
self.data = yf.download(self.pair, period=period)
def add_indicators(self):
df = self.data.copy()
# Moving Averages
df['EMA20'] = df['Close'].ewm(span=20).mean()
df['EMA50'] = df['Close'].ewm(span=50).mean()
df['EMA200'] = df['Close'].ewm(span=200).mean()
# RSI
delta = df['Close'].diff()
gain = delta.where(delta > 0, 0).rolling(14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(14).mean()
rs = gain / loss
df['RSI'] = 100 - (100 / (1 + rs))
# MACD
ema12 = df['Close'].ewm(span=12).mean()
ema26 = df['Close'].ewm(span=26).mean()
df['MACD'] = ema12 - ema26
df['Signal'] = df['MACD'].ewm(span=9).mean()
df['Histogram'] = df['MACD'] - df['Signal']
# Bollinger Bands
df['BB_Mid'] = df['Close'].rolling(20).mean()
df['BB_Std'] = df['Close'].rolling(20).std()
df['BB_Upper'] = df['BB_Mid'] + 2 * df['BB_Std']
df['BB_Lower'] = df['BB_Mid'] - 2 * df['BB_Std']
# ATR (Average True Range)
high_low = df['High'] - df['Low']
high_close = abs(df['High'] - df['Close'].shift())
low_close = abs(df['Low'] - df['Close'].shift())
tr = pd.concat([high_low, high_close, low_close], axis=1).max(axis=1)
df['ATR'] = tr.rolling(14).mean()
self.data = df
return df
def generate_signal(self):
df = self.data
latest = df.iloc[-1]
signals = []
# Trend
if latest['Close'] > latest['EMA200']:
signals.append(('Trend', 'Bullish', 'Price above EMA200'))
else:
signals.append(('Trend', 'Bearish', 'Price below EMA200'))
# RSI
if latest['RSI'] > 70:
signals.append(('RSI', 'Overbought', f"RSI = {latest['RSI']:.1f}"))
elif latest['RSI'] < 30:
signals.append(('RSI', 'Oversold', f"RSI = {latest['RSI']:.1f}"))
# MACD
if latest['MACD'] > latest['Signal']:
signals.append(('MACD', 'Bullish', 'MACD above Signal'))
else:
signals.append(('MACD', 'Bearish', 'MACD below Signal'))
return signals
analyzer = USDJPYAnalyzer(period='1y')
analyzer.add_indicators()
signals = analyzer.generate_signal()
for name, signal, reason in signals:
print(f" [{name}] {signal} — {reason}")
"""
def show_code(self):
print("=== USD/JPY Analyzer ===")
print(self.CODE[:600])
analyzer = USDJPYAnalyzer()
analyzer.show_code()
Trading Strategies
# strategies.py — USD/JPY trading strategies
import json
class TradingStrategies:
STRATEGIES = {
"carry_trade": {
"name": "Carry Trade Strategy",
"description": "Buy USD/JPY เพื่อรับส่วนต่างดอกเบี้ย (swap positive)",
"setup": "Long USD/JPY เมื่อ Fed rate > BOJ rate significantly",
"risk": "BOJ surprise hike, risk-off events → JPY surge",
"timeframe": "Medium-Long term (weeks-months)",
},
"boj_event": {
"name": "BOJ Event Trading",
"description": "Trade ตาม BOJ meeting outcomes — high volatility",
"setup": "Wait for BOJ decision → trade breakout direction",
"risk": "Whipsaw, spread widening, slippage",
"timeframe": "Short term (hours-days)",
},
"trend_following": {
"name": "Trend Following (EMA Cross)",
"description": "Follow trend ด้วย EMA crossover",
"setup": "Buy: EMA20 > EMA50 + Price > EMA200, Sell: opposite",
"risk": "Choppy markets = false signals",
"timeframe": "Medium term (days-weeks)",
},
"range_trading": {
"name": "Range Trading (Tokyo Session)",
"description": "Trade range ในช่วง Tokyo session — USD/JPY มี range ชัดเจน",
"setup": "Buy at support, sell at resistance ของ range",
"risk": "Breakout → stop loss hit",
"timeframe": "Intraday",
},
"intervention_play": {
"name": "Intervention Play",
"description": "Short USD/JPY เมื่อราคาสูงมาก + มีสัญญาณ intervention",
"setup": "USD/JPY > 155-160 + MOF verbal warnings → prepare short",
"risk": "Timing ยาก — intervention อาจไม่เกิด",
"timeframe": "Short-Medium term",
},
}
def show_strategies(self):
print("=== Trading Strategies ===\n")
for key, strat in self.STRATEGIES.items():
print(f"[{strat['name']}] ({strat['timeframe']})")
print(f" {strat['description']}")
print(f" Setup: {strat['setup']}")
print(f" Risk: {strat['risk']}")
print()
def risk_management(self):
print("=== Risk Management ===")
rules = [
"Position size: ไม่เกิน 2% ของ account ต่อ trade",
"Stop loss: ต้องตั้งทุกครั้ง — ATR × 1.5-2 สำหรับ USD/JPY",
"Risk:Reward: อย่างน้อย 1:2",
"ระวัง intervention zone: USD/JPY > 155 ขึ้นไป",
"ลดขนาดก่อน BOJ/FOMC meeting — volatility สูง",
"อย่า hold overnight ถ้า carry cost ไม่คุ้ม",
]
for rule in rules:
print(f" • {rule}")
strat = TradingStrategies()
strat.show_strategies()
strat.risk_management()
Economic Calendar
# calendar.py — Key events for USD/JPY
import json
class EconomicCalendar:
US_EVENTS = {
"nfp": {"name": "Non-Farm Payrolls (NFP)", "frequency": "Monthly (1st Friday)", "impact": "สูงมาก"},
"cpi": {"name": "CPI (Consumer Price Index)", "frequency": "Monthly", "impact": "สูงมาก"},
"fomc": {"name": "FOMC Meeting", "frequency": "8 ครั้ง/ปี", "impact": "สูงมาก"},
"gdp": {"name": "GDP", "frequency": "Quarterly", "impact": "สูง"},
"retail_sales": {"name": "Retail Sales", "frequency": "Monthly", "impact": "สูง"},
}
JP_EVENTS = {
"boj_meeting": {"name": "BOJ Meeting", "frequency": "8 ครั้ง/ปี", "impact": "สูงมาก"},
"tankan": {"name": "Tankan Survey", "frequency": "Quarterly", "impact": "สูง"},
"tokyo_cpi": {"name": "Tokyo CPI", "frequency": "Monthly", "impact": "สูง (leading indicator)"},
"trade_balance": {"name": "Trade Balance", "frequency": "Monthly", "impact": "ปานกลาง"},
"gdp_jp": {"name": "GDP Japan", "frequency": "Quarterly", "impact": "ปานกลาง"},
}
def show_calendar(self):
print("=== US Events ===")
for key, evt in self.US_EVENTS.items():
print(f" [{evt['impact']:>8}] {evt['name']:<30} ({evt['frequency']})")
print(f"\n=== Japan Events ===")
for key, evt in self.JP_EVENTS.items():
print(f" [{evt['impact']:>8}] {evt['name']:<30} ({evt['frequency']})")
def session_guide(self):
print(f"\n=== Trading Sessions (เวลาไทย) ===")
sessions = [
{"session": "Tokyo", "time": "07:00-16:00", "volatility": "ปานกลาง", "note": "USD/JPY active ที่สุด"},
{"session": "London", "time": "14:00-23:00", "volatility": "สูง", "note": "Overlap กับ Tokyo = volume สูง"},
{"session": "New York", "time": "19:00-04:00", "volatility": "สูงมาก", "note": "US data releases"},
]
for s in sessions:
print(f" [{s['session']:<8}] {s['time']} — {s['volatility']} ({s['note']})")
cal = EconomicCalendar()
cal.show_calendar()
cal.session_guide()
FAQ - คำถามที่พบบ่อย
Q: USD/JPY เหมาะกับมือใหม่ไหม?
A: เหมาะปานกลาง — สภาพคล่องสูง, spread ต่ำ (0.5-1.5 pips) แต่ volatility สูงกว่า EUR/USD โดยเฉพาะช่วง BOJ meeting ข้อดี: trend ชัดเจน, Ichimoku ทำงานดี, carry trade ให้ swap positive ข้อเสีย: intervention risk, BOJ surprise, ช่วง Asian session เงียบ มือใหม่: เริ่มจาก demo → เข้าใจ BOJ policy ก่อน → trade ด้วย position size เล็ก
Q: ทำไมเยนอ่อนมากช่วงนี้?
A: สาเหตุหลัก: ส่วนต่างดอกเบี้ย Fed 5.25% vs BOJ 0.10% = spread สูงมาก → carry trade เข้า USD Yield differential ทำให้ทุนไหลออกจากญี่ปุ่น BOJ ยังคง dovish — ไม่ขึ้นดอกเบี้ยอย่างมีนัยสำคัญ JPY จะแข็งเมื่อ: Fed ลดดอกเบี้ย, BOJ ขึ้นดอกเบี้ย, risk-off event, MOF intervention
Q: Intervention zone อยู่ตรงไหน?
A: ตามประวัติ: USD/JPY > 150-155: MOF เริ่ม verbal warning ("เราจะดำเนินการอย่างเหมาะสม") USD/JPY > 155-160: เสี่ยง actual intervention สูง 2022: intervention ที่ 145-152, 2024: intervention ที่ 155-160 สังเกต: ถ้า MOF + BOJ ออกมาพูดพร้อมกัน = probability intervention สูง
Q: Carry trade คืออะไร ทำไมสำคัญกับ USD/JPY?
A: Carry trade = ยืมสกุลเงินดอกเบี้ยต่ำ (JPY 0.1%) → ลงทุนในสกุลดอกเบี้ยสูง (USD 5.25%) → รับส่วนต่าง ~5%/ปี USD/JPY เป็นคู่ carry trade ยอดนิยมที่สุด ความเสี่ยง: ถ้า JPY แข็งเร็ว → carry trade unwind → USD/JPY ลงแรงมาก (crash risk) เหตุการณ์ unwind: BOJ hike, global crisis, risk-off → JPY flash crash
