ð¬ãèªè ã®éãææãATRãã£ã«ã¿ãŒã®ã·ããåé¡ãåŸ¹åºæ€èšŒïŒéæã§çéã®çµæã«
ð± èªè ããçæšã®äžæãé£ãã§ãã
å æ¥ã®ãã¬ã€ã¯ã¢ãŠãèšäºã§ãé«ãã©æãã¬ã€ã¯ã§åç66%ïŒãã£ãŠãã€ã£ãŠãã...
èªè ããéãããã³ããã ð¥
ããã¬ã€ã¯ããçŽè¿ã®5åè¶³ã¯ATRèšç®ããé€å€ããã»ããã仮説æ€èšŒãšããŠã¯ããèªç¶ãããããªãããã¬ã€ã¯ããè¶³ãå«ãŸãããšãã®è¶³ã§ATRãäžãããŸãããããã
ã»ã»ã»ç¢ºãã«ïŒïŒ ð°
ãªã«ããå®å šã«ç²ç¹ã ã£ãïŒïŒ
ð€ èªè ã®ææãå³è§£ããŠã¿ã
ã·ãã0ïŒå ã®æ¹æ³ïŒã®åé¡
æå» 00:00 00:05 00:10 00:15 â ãã¬ã€ã¯çºçïŒATR 0.05 0.05 0.05 0.15 â ATRæ¥äžæïŒ
ããã¬ã€ã¯è¶³ïŒ00:15ïŒã®ATRã0.15ã ããé«ãã©ïŒãâãããåœããåãããïŒð€ãã¬ã€ã¯ãããè¶³ã倧ãããªã â ATRãäžãã â ãé«ãã©ãå€å®
å æé¢ä¿ãé転ããŠãå¯èœæ§ïŒïŒ ð±
ã·ãã1ïŒä¿®æ£çïŒ
æå» 00:00 00:05 00:10 00:15 â ãã¬ã€ã¯çºçïŒATR 0.05 0.05 0.05 0.15 â ãã®è¶³ã®ATRã§å€å®ïŒ0.05ïŒ
ããã¬ã€ã¯åã®ATRã§å€æãããããã£ã¡ã®æ¹ããå ã ãã©ãé«ãã£ãïŒããæ£ããæž¬ãã...ã¯ãïŒ
ð¬ æ€èšŒæ¡ä»¶
å ±éèšå®
æéè¶³: 5åè¶³ããŒã¿æ°: å10,000æ¬ãã¬ã€ã¯å€å®: çŽè¿20æ¬ã®é«å€/å®å€ãçªç Žæ±ºæž: 120ååŸïŒæé決æžïŒATRãã£ã«ã¿ãŒã®å®çŸ©
ãããä»åã®èïŒ
| ãã£ã«ã¿ãŒ | æ¡ä»¶ | æå³ |
|---|---|---|
| é«ãã© | ATR > äžå€®å€ | çžå ŽãåããŠãæ |
| äœãã© | ATR †äžå€®å€ | çžå Žãéããªæ |
ãããŠATRã®ã·ããïŒ
| ã·ãã | åç §ããATR | æå³ |
|---|---|---|
| Shift=0 | ãã¬ã€ã¯è¶³ã®ATR | å ã®æ¹æ³ |
| Shift=1 | 1æ¬åã®ATR | ä¿®æ£ç |
ð æ€èšŒ1: USDJPYïŒçŽ50æ¥åïŒ
æé: 2025-10-27 ã 2025-12-15
ãŸããã¬ã€ã¯ã¢ãŠãåäœ
| æ¹å | åç | å¹³åãªã¿ãŒã³ | ãµã³ãã« | å€å® |
|---|---|---|---|---|
| è²·ã | 50.8% | -0.50 pips | 417 | â ãŽã |
| 売ã | 46.8% | -1.34 pips | 340 | â ãŽã |
ãã£ã«ã¿ãŒãªãã®ãã¬ã€ã¯ã¢ãŠãã¯äœ¿ãç©ã«ãªããªãã
ããã¯å èšäºãšåãçµè«ã
ATRãã£ã«ã¿ãŒïŒShift=0 vs Shift=1ïŒ
è²·ããã¬ã€ã¯ïŒ120ååŸïŒ:
| æ¡ä»¶ | Shift=0 | Shift=1 | å·® |
|---|---|---|---|
| ãã£ã«ã¿ãŒãªã | 50.8% | 50.8% | - |
| é«ãã© | 49.6% | 48.4% | -1.2pt |
| äœãã© | 52.5% | 52.8% | +0.3pt |
売ããã¬ã€ã¯ïŒ120ååŸïŒ:
| æ¡ä»¶ | Shift=0 | Shift=1 | å·® |
|---|---|---|---|
| ãã£ã«ã¿ãŒãªã | 46.8% | 46.8% | - |
| é«ãã© | 43.8% | 45.0% | +1.2pt |
| äœãã© | 53.3% | 52.0% | -1.3pt |
USDJPYã®è¡æã®çºèŠ ð€¯
ã·ããã®åœ±é¿ã¯èª€å·®ã¬ãã«ïŒ1ã2ptïŒã
ã§ãããããè¡æãªã®ã¯...
é«ãã©ãã£ã«ã¿ãŒãé广ïŒïŒïŒ
- è²·ã: é«ãã©49.6% < äœãã©52.5%ïŒäœãã©ã®æ¹ããã·ïŒïŒ
- 売ã: é«ãã©43.8% < äœãã©53.3%ïŒäœãã©å§åïŒïŒ
å èšäºã®ãé«ãã©ã§åç66%ãã¯äžäœäœã ã£ãã®ïŒïŒïŒ ð±
ð æ€èšŒ2: BTCUSDïŒçŽ35æ¥åïŒ
æé: 2025-11-10 ã 2025-12-15
å®ã¯ä¿ºãBTCUSDã§æ€èšŒããŠããã§ããã
ãã¬ã€ã¯ã¢ãŠãåäœ
| æ¹å | åç | å¹³åãªã¿ãŒã³ | ãµã³ãã« | å€å® |
|---|---|---|---|---|
| è²·ã | 47.1% | -2.89$ | 342 | â ãŽã |
| 売ã | 50.3% | +103.06$ | 366 | â³ ãŸããŸã |
ATR(3)ãã£ã«ã¿ãŒã®å¹æ
俺ã®å®éã®èšå®: ATRæé3ãåç2.7
| æ¡ä»¶ | è²·ãåç | è²·ããªã¿ãŒã³ | ãµã³ãã« |
|---|---|---|---|
| ãã£ã«ã¿ãŒãªã | 47.1% | -2.89$ | 342 |
| é«ãã©ïŒ>äžå€®å€Ã1.0ïŒ | 50.2% | +42.77$ | 205 |
| é«ãã©ïŒ>äžå€®å€Ã1.5ïŒ | 56.8% | +114.91$ | 81 |
| é«ãã©ïŒ>äžå€®å€Ã2.0ïŒ | 57.1% | +144.76$ | 70 |
| é«ãã©ïŒ>äžå€®å€Ã2.7ïŒ | 59.3% | +218.32$ | 54 |
åçäžããã»ã©åçäžããïŒïŒ ð¥ð¥ð¥
BTCUSDã®çµè«
| é«ãã©ïŒÃ2.7ïŒ | äœãã© | å·® |
|---|---|---|
| 59.3% | 41.7% | +17.6pt |
| +218$ | -80$ | çŽ300$å·® |
é«ãã©ãã£ã«ã¿ãŒãã¬ãã§å¹ããŠãïŒïŒ
ð€¯ è¡æã®äºå®ïŒéæã§çéã®çµæ
| éæ | é«ãã©æ | äœãã©æ | åè |
|---|---|---|---|
| USDJPY | 49.6%ïŒ-1.85pipsïŒ | 52.5%ïŒ+1.26pipsïŒ | ð¥ äœãã© |
| BTCUSD | 59.3%ïŒ+218$ïŒ | 41.7%ïŒ-80$ïŒ | ð¥ é«ãã© |
åãATRãã£ã«ã¿ãŒãªã®ã«ã广ãçéïŒïŒïŒ
ð§ ãªãéæã§éãã®ãïŒ
仮説1: åžå Žåå è ã®éã
USDJPYïŒçºæ¿ïŒ:
- æ©é¢æè³å®¶ããããžãã¡ã³ãã䞻圹
- é«ãã©æ â ãè¡ãéãããšå€æ â é匵ã
- 倧å£ã®å©ç¢ºæ³šæãããå ¥ã
- çµæ: é«ãã©ãã¬ã€ã¯ã¯ç¶ããªã â
BTCUSDïŒæå·è³ç£ïŒ:
- å人æè³å®¶ãå€ã
- é«ãã©æ â FOMOçºå â 远éè²·ãæ®ºå°
- ãäžãã£ãŠãïŒä¹ãé ãããªïŒãã®é£é
- çµæ: é«ãã©ãã¬ã€ã¯ãç¶ã â
仮説2: åžå Žã®æç床
USDJPY:
- 100幎以äžã®æŽå²ãããæçåžå Ž
- ã驿£æ°Žæºãã«ã€ããŠããã®åæããã
- 極端ãªåãã¯ããä¿®æ£ããã
BTCUSD:
- ãŸã 15幎çšåºŠã®æ°èåžå Ž
- ã驿£äŸ¡æ Œãã誰ã«ãããããªã
- ãã¬ã³ããæ¥µç«¯ã«ç¶ãããã
仮説3: æµåæ§ã®éã
USDJPY:
- äžçæå€§çŽã®æµåæ§
- ã©ããªå€§å£æ³šæãåžåããã
- äŸ¡æ Œã®ãªãŒããŒã·ã¥ãŒããå°ãªã
BTCUSD:
- æµåæ§ãçžå¯Ÿçã«äœã
- 倧ããªæ³šæã§äŸ¡æ Œã倧ããåã
- ãã¬ã€ã¯åŸã®å€åããæ¥µç«¯ã«ãªãããã
ð ã§ãã·ããã®åœ±é¿ã¯ïŒ
èªè ã®ææããã¬ã€ã¯è¶³ã®ATRãé€å€ãã¹ããã«ã€ããŠã
Shift=0 vs Shift=1 ã®æ¯èŒ
| éæ | æ¡ä»¶ | Shift=0 | Shift=1 | å·® |
|---|---|---|---|---|
| USDJPY | é«ãã©è²·ã | 49.6% | 48.4% | -1.2pt |
| USDJPY | äœãã©è²·ã | 52.5% | 52.8% | +0.3pt |
| BTCUSD | é«ãã©è²·ã | 50.2% | 52.7% | +2.5pt |
| BTCUSD | äœãã©è²·ã | 41.7% | 41.8% | +0.1pt |
çµè«: ã·ããã®åœ±é¿ã¯å°ãã
- èªè ã®ææã¯çè«çã«ã¯100%æ£ãã
- ã§ãå®è·µçã«ã¯1ã2%ã®å·®
- éæéžæã®æ¹ãã¯ããã«éèŠïŒïŒ
ð¡ å®è·µãžã®ç€ºå
USDJPYã§ãã¬ã€ã¯ã¢ãŠããããªã
â é«ãã©æã«ãšã³ããªãŒ â é广ïŒâ
äœãã©æã«ãšã³ããªãŒ â ãŸã ãã·ïŒ52-53%ïŒâ
ãããããã¬ã€ã¯ã¢ãŠãããä»ã®ææ³ãæ€èšBTCUSDã§ãã¬ã€ã¯ã¢ãŠããããªã
â
é«ãã©æã«è²·ããšã³ããªãŒ â åç59%ã+218$â äœãã©æã«è²·ããšã³ããªãŒ â è² ããïŒ-80$ïŒâ
ATR(3) à 2.7以äžã§çµããšæåŒ·ð¯ æçµçµè«
1. ãã¬ã€ã¯ã¢ãŠãåäœã¯åãŠãªã
ã©ã£ã¡ã®éæã§ãããã£ã«ã¿ãŒãªãã¯åç50%ååŸã§ãªã¿ãŒã³ã¯ãã€ãã¹ã
2. ATRãã£ã«ã¿ãŒã¯éæäŸå
| éæ | é«ãã©ãã£ã«ã¿ãŒ | æšå¥š |
|---|---|---|
| USDJPY | â é广 | äœãã©æããŸãã¯å¥ææ³ |
| BTCUSD | â æå¹ | é«ãã©æã«è²·ã |
3. ãäžèœãã£ã«ã¿ãŒãã¯ååšããªã
å èšäºã®ãé«ãã©åç66%ãã¯BTCUSDã§ã®çµæã
USDJPYã§ã¯é广ã ã£ãã
éæããšã«æ€èšŒãå¿ èŠïŒ
4. ã·ãã0 vs 1ã¯å€§å·®ãªã
èªè ã®ææã¯çè«çã«æ£ãããã©ãå®è·µã§ã¯éæéžæã®æ¹ã100åéèŠã
ð èªè ã®çãããž
ä»åã®æ€èšŒã§ãéæã«ãã£ãŠATRãã£ã«ã¿ãŒã®å¹æãçéã§ããããšã倿ããŸããã
å èšäºã§ãäžèœãã£ã«ã¿ãŒãã®ããã«æžããŠããŸã£ãããšããè©«ã³ããŸãã
æ€èšŒã¯ç¶ç¶çã«è¡ããæ°ããçºèŠãããã°æ£çŽã«å ±åããŸãã
ããã³ãããããèªè ã®æ¹ãæ¬åœã«ããããšãïŒ
ãããã§ããæ·±ãæŽå¯ãåŸãããšãã§ããŸããã ð
ð æ€èšŒã³ãŒãå šæ
"""ATRãã£ã«ã¿ãŒæ€èšŒ - ã·ãã0 vs ã·ãã1éæ: USDJPYm, BTCUSDm"""
import MetaTrader5 as mt5import pandas as pdimport numpy as npfrom scipy import statsimport warningswarnings.filterwarnings('ignore')
# ===== èšå® =====SYMBOL = "BTCUSDm" # ãŸã㯠"USDJPYm"TIMEFRAME = mt5.TIMEFRAME_M5NUM_BARS = 10000BREAKOUT_PERIOD = 20ATR_PERIOD = 3 # BTCã¯3ãUSDJPYã¯14ATR_MULTIPLIER = 2.7 # ãã£ã«ã¿ãŒåç
TIME_HORIZONS = [5, 15, 30, 60, 120]
def initialize_mt5(): if not mt5.initialize(): return False print(f"MT5 version: {mt5.version()}") return True
def get_ohlc_data(symbol, timeframe, num_bars): symbol_info = mt5.symbol_info(symbol) if symbol_info is None: # ã·ã³ãã«åã®ããªãšãŒã·ã§ã³ã詊ã for suffix in ['', 'm', '.i', '-m', '_SB']: test_symbol = symbol.replace('m', '') + suffix symbol_info = mt5.symbol_info(test_symbol) if symbol_info is not None: symbol = test_symbol break if symbol_info is None: return None if not symbol_info.visible: mt5.symbol_select(symbol, True) rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, num_bars) if rates is None: return None df = pd.DataFrame(rates) df['time'] = pd.to_datetime(df['time'], unit='s') df.set_index('time', inplace=True) print(f"Data: {len(df)} bars ({df.index[0]} to {df.index[-1]})") return df
def calculate_atr(df, period): """ATR (Average True Range) ãèšç®""" high = df['high'] low = df['low'] close = df['close'].shift(1) tr1 = high - low tr2 = abs(high - close) tr3 = abs(low - close) tr = pd.concat([tr1, tr2, tr3], axis=1).max(axis=1) return tr.rolling(window=period).mean()
def detect_breakouts(df, period): """ãã¬ã€ã¯ã¢ãŠããæ€åº""" # çŽè¿Næ¬ã®é«å€ã»å®å€ïŒ1æ¬åãŸã§ã§èšç®ïŒ df['highest'] = df['high'].rolling(window=period).max().shift(1) df['lowest'] = df['low'].rolling(window=period).min().shift(1)
# ãã¬ã€ã¯å€å® df['breakout_up'] = df['close'] > df['highest'] df['breakout_down'] = df['close'] < df['lowest']
# é£ç¶ãã¬ã€ã¯ãé€å€ïŒæåã®1æ¬ã ãïŒ df['breakout_up_signal'] = df['breakout_up'] & ~df['breakout_up'].shift(1).fillna(False) df['breakout_down_signal'] = df['breakout_down'] & ~df['breakout_down'].shift(1).fillna(False)
print(f"Breakout UP: {df['breakout_up_signal'].sum()}") print(f"Breakout DOWN: {df['breakout_down_signal'].sum()}") return df
def calculate_future_returns(df, horizons_minutes, timeframe_minutes=5): """å°æ¥ãªã¿ãŒã³ãèšç®""" for minutes in horizons_minutes: bars_ahead = minutes // timeframe_minutes future_close = df['close'].shift(-bars_ahead) df[f'return_{minutes}m'] = (future_close - df['close']) * 100 return df
def analyze_with_filter(df, signal_col, horizons, atr_filter, atr_shift, multiplier=1.0): """ ATRãã£ã«ã¿ãŒä»ãã§ãã¬ã€ã¯ã¢ãŠããåæ
atr_filter: 'high', 'low', None atr_shift: 0ïŒåœè©²è¶³ïŒor 1ïŒ1æ¬åã®è¶³ïŒ multiplier: éŸå€ã®åçïŒäŸ: 2.7ïŒ """ signal_df = df[df[signal_col] == True].copy()
if len(signal_df) == 0: return None
if atr_filter is not None: atr_median = df['atr'].median() threshold = atr_median * multiplier
if atr_shift == 0: atr_values = signal_df['atr'] else: atr_values = df['atr'].shift(atr_shift).loc[signal_df.index]
if atr_filter == 'high': signal_df = signal_df[atr_values > threshold] else: signal_df = signal_df[atr_values <= threshold]
if len(signal_df) < 10: return None
results = {} for minutes in horizons: returns = signal_df[f'return_{minutes}m'].dropna() if len(returns) >= 10: results[minutes] = { 'count': len(returns), 'mean': returns.mean(), 'win_rate': (returns > 0).mean() * 100, } return results
def main(): if not initialize_mt5(): return
try: df = get_ohlc_data(SYMBOL, TIMEFRAME, NUM_BARS) if df is None: return
df['atr'] = calculate_atr(df, ATR_PERIOD) df = detect_breakouts(df, BREAKOUT_PERIOD) df = calculate_future_returns(df, TIME_HORIZONS)
atr_median = df['atr'].median() print(f"\nATR({ATR_PERIOD}) median: {atr_median:.5f}") print(f"High vol threshold (x{ATR_MULTIPLIER}): {atr_median * ATR_MULTIPLIER:.5f}")
# åæ¡ä»¶ã§æ€èšŒ multipliers = [1.0, 1.5, 2.0, 2.7]
for shift in [0, 1]: print(f"\n{'='*60}") print(f"ATR SHIFT = {shift}") print(f"{'='*60}")
# äžæ¹ãã¬ã€ã¯ïŒè²·ãïŒ print("\n[UP (Buy)]") for mult in multipliers: result = analyze_with_filter( df, 'breakout_up_signal', TIME_HORIZONS, 'high', shift, mult ) if result and 120 in result: print(f" High Vol (x{mult}): {result[120]['win_rate']:.1f}%, " f"Mean={result[120]['mean']:+.2f}, N={result[120]['count']}")
result_low = analyze_with_filter( df, 'breakout_up_signal', TIME_HORIZONS, 'low', shift, 1.0 ) if result_low and 120 in result_low: print(f" Low Vol: {result_low[120]['win_rate']:.1f}%, " f"Mean={result_low[120]['mean']:+.2f}, N={result_low[120]['count']}")
finally: mt5.shutdown()
if __name__ == "__main__": main()ð é¢é£èšäº: ãã¬ã€ã¯ã¢ãŠãåæã¡ã€ã³èšäº - å ã®æ€èšŒèšäº
ð¬ 質åã»ããã³ãã¯XãžïŒ
ããåã®ããééã£ãŠãïŒãâãã倧æè¿ïŒïŒ ð¥
ðããããããŒã«ã»ãµãŒãã¹
ãã£ã³ããŒã³ã§æ1,790åããMT4/MT5ããªã€ã³ã¹ããŒã«æžã¿ãèªååŸ©æ§æ©èœä»ãã14æ¥éç¡æã詊ãã
ã·ã³ã¯ã©ãŠããã¹ã¯ããã for FX4幎ã§è³é4.7åã®ããã¯ãã¹ãå®çžŸããœãŒã¹ã³ãŒãä»ãã§èªç±ã«ã«ã¹ã¿ãã€ãºå¯èœã
ãŽããŒæ¥EA UltimateçïŒ3,980åïŒâ»äžèšãªã³ã¯ã«ã¯ããã¢ãŒã·ã§ã³ïŒåºåïŒãå«ãŸããŠããŸã
éåçžå Žè¬ç¥ïœããœãP
ããã°ã§ã¯æžããªãæ¬é³ã®ãã¬ãŒãæŠç¥ãšEAéçºã®è£åŽãå ¬éã ããŒã¿ã«åºã¥ããæ€èšŒã§ãåçŸæ§ã®ããææ³ã ãããå±ãããŸãã