לחץ להעלאה או גרור קובץ .py לכאן קובץ Python עם מחלקה שמכילה on_bar(self, bar)
הגדרות הריצה
הגדר פרמטרים לבדיקה האחורית
📅 טווח תאריכים
💰 עמלות וסליפג'
5.0 = עמלה סטנדרטית ל-MNQ
🛡️ ניהול סיכונים
ה-backtest יפסיק אם ההפסד היומי יחצה סכום זה
🎯 אסטרטגיה שנבחרה
טרם נבחרה
סקירה לפני ריצה
בדוק את כל ההגדרות לפני הרצת הבדיקה האחורית
📋 פרטי הריצה
⚠️ הערות
• הבדיקה האחורית תורץ בתהליך נפרד (subprocess)
• הנתונים נטענים מה-CSV ב-RAM — ~3.1M bars
• ממוצע זמן: 2–5 דקות לשנה אחת של דקות
• תוצאות נשמרות ב-DB לצמיתות
• ניתן לבדוק את ההיסטוריה בכל עת
מריץ בדיקה אחורית…
הבדיקה האחורית נמצאת בתהליך
⚙️
RUNNING
טוען נתונים...
ניתן לעזוב את הדף — הריצה תמשיך ברקע ותישמר ב-History
היסטוריית ריצות
כל הבדיקות האחוריות שבוצעו
Loading...
Run Details
יומי — התראות לפי יום מסחר
כל ההתראות והפעילות לפי יום • לחץ על יום לפרטים
ימי מסחר
טוען...
📅
בחר יום מסחר מהרשימה משמאל
קבצי Audit להורדה
טוען...
איך לכתוב אסטרטגיה
שפת Python — ממשק פשוט ומהיר
✓ המותר (No Look-Ahead)
bar.close, bar.open, bar.high, bar.low
ממוצעים ממחירים קודמים
self.position, self.equity
פרמטרים מה-config
✗ האסור (Look-Ahead)
גישה ל-bar הבא
מחירי עתיד
שימוש בתאריך הסיום
כל מקור חיצוני עתידי
NQ Morning Gap Fill — אסטרטגיה בייצור
# imre/strategies/nq_morning_gap_fill_v1/strategy.pyfrom typing import Optional
from runner.types import Bar, Signal, Trade, Direction
classNQ_Morning_Gap_Fill:
"""Production strategy (5m NQ, RTH). Captures 9:30 open, enters 10:00–11:30 on gap-fill reversal."""
PARAM_GRID = {
"distance_threshold": [40, 80],
"entry_window_end": [1030, 1130],
}
def__init__(self, **config):
self.name = "NQ_Morning_Gap_Fill"
self.config_dict = {
"distance_threshold": 60,
"entry_window_start": 1000,
"entry_window_end": 1100,
"stop_points": 40,
}
self.config_dict.update(config)
self.reset()
defreset(self):
self.open_price: Optional[float] = None
self.traded_today: bool = False
self.prev_bar: Optional[Bar] = Nonedefon_bar(self, bar: Bar, idx: int) -> Optional[Signal]:
# קפוץ 9:30 — פתח של תחילת יוםif bar.hhmm == 930and self.open_price isNone:
self.open_price = bar.open
# ולא בשעות סגירהif bar.hhmm < 945or bar.hhmm > 1530:
returnNone# סחרנו כבר היוםif self.traded_today:
returnNone
distance_from_open = bar.close - self.open_price
if abs(distance_from_open) < self.config_dict["distance_threshold"]:
returnNone# התחובר סיגנל אם המחיר עלה + בר קודם יורדif distance_from_open > 0:
if self.prev_bar.close < self.prev_bar.open:
signal = Signal(
direction=Direction.SHORT,
entry_price=bar.close,
stop_price=bar.close + self.config_dict["stop_points"],
target_price=self.open_price,
bar_index=idx,
bar_dt=bar.dt,
)
self.traded_today = Truereturn signal
self.prev_bar = bar
returnNonedefon_trade_closed(self, trade: Trade):
pass
Strategy = NQ_Morning_Gap_Fill
📁 מיקום הקובץ
שמור את הקובץ ב:
imre/strategies/שם_האסטרטגיה/strategy.py
או העלה ישירות דרך ה-UI (שלב 2 — "העלה אסטרטגיה חדשה")
code_module:
imre.strategies.שם_האסטרטגיה.strategy.ClassName
👁 Shadow Mode
הפעל אסטרטגיה במצב צפייה בלבד — אפס קשר עם הברוקר עד שה-Triple Lock עובר
שלבי הפעלה
1
🔌 Bridge
לא מחובר
›
2
📋 אסטרטגיה
לא נבחרה
›
3
👁 Shadow Runner
עצור
אסטרטגיה:
👁 SHADOW LIVE — running on real NinjaTrader data
--
סיגנלים היום
--
ימי shadow
--
Triple Lock
--
סטטוס Shadow
בחר אסטרטגיה
Triple Lock
בחר אסטרטגיה
Instrument:
Bars לטעינה:
כשתפעיל Shadow — NT יטען את הכמות הזו של נרות היסטוריים
Comparison Report — Shadow vs Backtest
מ-תאריך
עד-תאריך
Tolerance (שניות)
Daily Shadow Summary
חלון:
בחר אסטרטגיה
Recent SHADOW Signals
— מה הרצה שולחת כרגע (לא נשלח לברוקר)
--
בחר אסטרטגיה
📊 Report AnalyzerFeature 7 — Backtest Analytics
Run ID
📋 Summary
📈 Equity Curve
📉 Drawdown
🎲 Monte Carlo (1,000 simulations)
Final Equity p5
--
Median
--
p95
--
Max DD p5
--
Max DD Median
--
Max DD p95
--
Final equity distribution (bootstrap)
🔀 In-Sample / Out-of-Sample (70/30)
Metric
In-Sample (70%)
Out-of-Sample (30%)
Split: earliest 70% trades = IS · latest 30% = OOS · by trade count, not calendar (V1)
🕐 Session Breakdown
RTH vs ETH
By Weekday
By Hour (UTC)
📅 Calendar Heatmap
📋 Trades
#
Entry
Exit
Side
Entry $
Exit $
PnL
⚠ Warnings
🔴 Live ReportAnalytics on closed live positions
▶ ריצה (Run)
Strategy ID
Account ID
Account Type
From UTC
To UTC
📋 Summary
📈 Equity Curve
📉 Drawdown
🎲 Monte Carlo (1,000 simulations)
Final Equity p5
--
Median
--
p95
--
Max DD p5
--
Max DD Median
--
Max DD p95
--
Final equity distribution (bootstrap)
🔀 In-Sample / Out-of-Sample (70/30)
Metric
In-Sample (70%)
Out-of-Sample (30%)
Split: earliest 70% trades = IS · latest 30% = OOS · by trade count, not calendar (V1)
🕐 Session Breakdown
RTH vs ETH
By Weekday
By Hour (UTC)
📅 Calendar Heatmap
📋 Trades
#
Entry
Exit
Side
Instrument
Entry $
Exit $
PnL
Duration
⚠ Warnings
Audit Log
כל אירוע מוקלט — JSONL + SQLite · בלתי ניתן לשינוי
Event Coverage Map
— כל האירועים המוגדרים ומצבם
מחווט — נכתב בפועל חלקי — עובר דרך callback, לא ישירות ל-AuditWriter לא מחווט — מוגדר ב-enum, אין קורא עדיין חוסם — JSONL failure → פעולה מבוטלת (RULE 2)
סיגנל / ריסק
signal_generated
signal_executor.py · כל סיגנל
risk_passed
signal_executor.py · 9 gates עברו
risk_rejected
signal_executor.py · gate נכשל / bridge נכשל
regime_mismatch
gate_evaluator.py · gate 9
shadow_would_send
signal_router.py → get_audit_writer() ✓ תוקן
פקודות / ביצועים
order_sent 🔒
signal_executor.py · write_blocking — חוסם
order_ack
signal_executor.py · on_order_ack
order_rejected
on_order_rejected() · NT state=Rejected/Cancelled ✓ תוקן
fill
signal_executor.py · on_fill
position_update
signal_executor.py · after open/close
Flatten / Kill Switch
flatten_initiated 🔒
flatten_manager.py · write_blocking ✓ תוקן
flatten_confirmed
flatten_manager.py · after NT ack
kill_switch_activated 🔒
auto_flatten.py · חוסם
Bridge
bridge_connected
app.py listener על BridgeStateManager ✓ תוקן
bridge_disconnected
auto_flatten.py · on disconnect
bridge_degraded
app.py listener על BridgeStateManager ✓ תוקן
Reconciliation
reconcile_start
position_tracker.reconcile() · לפני כל diff ✓ תוקן
reconcile_diff
position_tracker.py · כשיש פער מ-NT
Regime (Feature 5)
regime_changed
app.py on_audit_event → get_audit_writer() ✓ תוקן
Control / Lifecycle
strategy_enabled
מוגדר — Feature 9
strategy_disabled
מוגדר — Feature 9
daily_loss_locked
מוגדר — אין קורא
Backtest (Feature 1)
backtest_started
מוגדר — runner.py לא מחווט
backtest_completed
מוגדר — runner.py לא מחווט
backtest_failed
מוגדר — runner.py לא מחווט
✅ 21 אירועים מחווטים🔴 7 מוגדרים — טרם מחווטים (backtest, strategy lifecycle, daily_loss)🔒 3 חוסמים (RULE 2) — write_blocking ✓
From (UTC)
To (UTC)
Event type
Signal ID
Strategy
Dates available: טוען...
Results
Time (UTC)
Event
Signal ID
Strategy
Instrument
Payload
לחץ Search לטעינה
Signal Timeline
הזן signal_id ולחץ Load
📡 Market Regime Filter
Feature 5 — אסטרטגיות יורצו רק כשמצב השוק תואם ל-edge שלהן (Trending / Choppy / High-Vol).
Override ידני מנצח את האוטו-דטקטור. Gate 9 ב-Live חוסם סיגנלים שלא מתאימים ל-regime.
ℹ
איך הדטקטור קובע את סוג השוק?
לחץ להרחבה
🟢 Trending Up
ADX ≥ 25 + slope עולה + R² ≥ 0.55 על 30 ברים.
מגמה עולה ברורה — מתאים לאסטרטגיות breakout-long ו-trend-following.
🔴 Trending Down
ADX ≥ 25 + slope יורד + R² ≥ 0.55 על 30 ברים.
מגמה יורדת ברורה — מתאים לאסטרטגיות breakout-short.
⚪ Choppy
ברירת מחדל — ADX נמוך, אין כיוון ברור.
מתאים ל-mean-reversion, scalping, או פשוט — אל תיכנס.
גם מצב fail-closed כשאין מספיק דאטה.
🟡 High Volatile
ATR-Z ≥ 2σ מעל הממוצע (100 ברים) או ATR% ≥ 0.15%.
גם: 5 דקות אחרי פתיחת RTH, ימי FOMC (2h לפני ההכרזה).
רוב האסטרטגיות צריכות להיחסם פה.
סדר עדיפויות
High Volatile — גובר על הכל (ATR-Z / session)
Trending Up / Down — ADX + slope + R²
Choppy — ברירת מחדל
Hysteresis & Confidence
הדטקטור דורש 3 ברים רצופים לפני שמחליף regime (מונע flicker).
Confidence עולה בהדרגה: 33% → 67% → 100%.
Session rules (RTH open, FOMC) מיידיים — ללא המתנה.
מודול: imre.detectors.standard_ohlcv
· נרות מ-NinjaTrader (לא TradingView — אין API בפרויקט).
כפתור 📥 טען נרות מושך עד 200 נרות @ 1m מ-NinjaTrader; כל בר חדש מעדכן את ה-buffer (תמיד עד 200 אחרונות).