This is a rules-based ETF rotation system for the Israeli market. It analyzes 500+ Israeli ETFs, 10 flexible mutual funds, and US macro signals to answer one question:
"Which 4-5 instruments should I hold right now, and in what proportions?"
The system outputs:
All values are denominated in ILS (Israeli Shekels). USD-denominated benchmarks like QQQ are converted to ILS using the USD/ILS exchange rate.
| Data | Source | Frequency |
|---|---|---|
| Israeli ETFs (504 instruments) | Twelve Data catalog + Yahoo Finance prices | Daily OHLCV |
| Flexible Funds (10 funds) | TASE Maya API | Daily NAV |
| Israeli Pension Funds (983 funds) | data.gov.il (Government Open Data) | Monthly returns |
| US Macro Signals | Yahoo Finance | Daily close |
| Ticker | What It Is | Why It Matters |
|---|---|---|
| VIX | CBOE Volatility Index (S&P 500 implied vol) | Primary regime indicator — fear gauge |
| SPY | S&P 500 ETF | US equity trend — trend confirmation |
| QQQ | Nasdaq 100 ETF | Tech/growth momentum |
| GLD | Gold ETF | Safe haven / inflation signal |
| BTC | Bitcoin | Risk appetite / speculative sentiment |
| DXY | US Dollar Index | Dollar strength — affects foreign exposure |
| TA-125 | Tel Aviv 125 Index | Israeli market momentum & acceleration |
The model classifies the current market into one of four regimes based on VIX level, VIX trend (vs 20-day SMA), and SPY trend (vs 50-day SMA):
| Regime | VIX Level | Conditions | Action |
|---|---|---|---|
| Risk On | < 16 | VIX low and falling, SPY above SMA | Full equity — ride the momentum |
| Cautious | 16-25 | VIX rising, or SPY below SMA | Reduce equity to 60-80%, add bonds |
| Risk Off | 25-32 | VIX elevated | 30-50% invested, favor bonds & shorts |
| Crisis | > 32 | VIX spiking | 0-30% invested, mostly cash or shorts |
Override rule: If VIX looks calm (Risk On) but SPY is below its 50-day moving average, the regime is downgraded to Cautious. This catches slow-motion sell-offs that VIX hasn't reacted to yet.
The colored bar shows VIX from 10 (green/calm) to 40+ (red/panic). The white marker shows the current VIX level. Below the gauge: the current VIX value, its 20-day moving average, and whether it's rising or falling.
Every eligible instrument is scored on a composite of:
Price momentum at three timeframes, weighted and combined:
Momentum = (current price / price N days ago) - 1. This captures both short-term trend and longer-term strength.
Raw momentum is divided by annualized volatility (21-day rolling). A fund returning 10% with 5% vol scores higher than one returning 10% with 20% vol.
If the price is above its 50-day Simple Moving Average, the instrument gets a +5 point bonus. This rewards instruments in confirmed uptrends.
If recent 21-day average volume is 20%+ higher than the 126-day average, the instrument gets +2 points. Rising volume confirms the move.
Each instrument is auto-classified by name keywords:
| Class | Keywords |
|---|---|
| equity_il | TA-35, TA-125, TA-90, Israel Bank, Technology |
| equity_us | S&P 500, Nasdaq, Russell |
| bond | Bond, Tel Bond, Shekel Bond |
| short | Short |
| leveraged | Leveraged, x2, x3 |
| flexible | Your 10 target mutual funds |
| other | Everything else (renewables, real estate, etc.) |
The risk slider adjusts how sensitive the model is to volatility, and how much it allocates to equities vs bonds:
| Profile | VIX Thresholds | Max Equity | Positions | Bond Preference |
|---|---|---|---|---|
| Conservative | 14 / 20 / 28 | 40% | 4 | Yes — bonds get +20 score bonus |
| Moderate | 16 / 25 / 32 | 70% | 5 | No |
| Aggressive | 20 / 30 / 40 | 100% | 5 | No |
Conservative uses tighter VIX thresholds (gets nervous earlier) and always boosts bond scores. Aggressive has wider thresholds — it takes more pain before going defensive.
The rebalance selector controls how often the portfolio is reviewed and changed:
| Option | Trading Days | Description |
|---|---|---|
| 1W | 5 | Weekly — high activity, catches fast moves |
| 2W | 10 | Bi-weekly |
| 3W | 15 | Three weeks — historically the sweet spot |
| 4W | 21 | Monthly — traditional |
| 6W | 30 | Six weeks — lower activity |
Instead of waiting for a fixed interval, the model triggers a rebalance when it detects significant market events:
| Trigger | Threshold | What It Detects |
|---|---|---|
| VIX Spike | > 4 points in one day | Sudden fear/panic or sudden calm |
| Regime Change | Crosses a boundary | e.g., Risk On → Cautious |
| SPY/QQQ Acceleration | Z-score > 2.0 | Market suddenly speeding up or crashing |
| TA-125 Acceleration | Z-score > 2.0 | Israeli market momentum shift |
| Max Interval | 30 days | Safety net — always rebalance at least monthly |
| Min Interval | 3 days | Won't trigger more often than every 3 days |
Acceleration is measured as the change in 5-day returns vs the prior 5-day returns, normalized by the 20-day return standard deviation. A z-score above 2.0 means the market is accelerating or decelerating much faster than normal.
Once ETFs are scored and the regime is known, the allocation engine builds the portfolio:
| Action | Meaning |
|---|---|
| LONG | All positions are long — expecting prices to rise |
| SHORT | All positions are short/inverse — expecting decline |
| HEDGE (LONG+SHORT) | Mix of long and short positions |
| MOSTLY CASH | 70%+ in cash — waiting for clarity |
| CASH | 100% cash — no instrument scores positive |
The dashboard tracks 10 specific flexible mutual funds (not traded on TASE as ETFs). Daily NAV data comes from the TASE Maya API:
| Fund | Manager | Maya Fund ID |
|---|---|---|
| Sigma Flexible | Sigma | 5125679 |
| More Flexible 4D | More | 5109731 |
| Yelin Lapidot Flexible | Yelin Lapidot | 5114087 |
| Analyst Flexible | Analyst | 5120795 |
| Kesem Active Flexible FLEX | Kesem | 5125380 |
| Meitav Sky 4D Investments | Meitav | 5520044 |
| Porta 4D Investments | Sigma | 5124995 |
| Diamond 4D Flexible | Ayalon | 5123609 |
| Investor 360 Flexible | Ayalon | 5136262 |
| More 4D Investments | More | 5127725 |
These appear in the scoring as FLEX:<fund_id>. They compete alongside ETFs on the same momentum/risk-adjusted basis. Since they have no volume data, they use a dummy volume figure and are classified as "flexible" asset class.
The Universe selector restricts which instruments the model can pick from:
| Universe | Instruments | Use Case |
|---|---|---|
| All | 504 ETFs + 10 flexible funds | Default — picks the best from everything |
| Flexible Funds | 10 target mutual funds only | See how the model rotates between your specific flexible funds |
| Leveraged ETFs | Leveraged & short/inverse ETFs only | Aggressive study — higher risk, higher potential |
Each universe is backtested independently across all risk profiles and rebalance frequencies.
| Stat | Formula |
|---|---|
| Total Return | (Final Value / Initial Value) - 1 |
| Annual Return | Total return annualized: (1 + total)^(1/years) - 1 |
| Max Drawdown | Largest peak-to-trough decline |
| Sharpe Ratio | (Avg daily return / Std daily return) x sqrt(252) |
| Win Rate | # winning rebalance periods / total periods |
Shows your portfolio's cumulative % return compared to three benchmarks:
All lines start at 0% and show cumulative gain/loss from the start of the visible range.
Filter the chart to show only the selected time period. The % returns re-normalize from the start of the visible window.
Click and drag on any chart to zoom into a specific date range. Double-click to reset.
Hover over a line to thicken it and grow its legend label, making it easy to identify which line you're looking at.
Shows the historical % return of each currently recommended ETF, plus the QQQ benchmark (dashed line). Useful for seeing how your current picks have behaved.
Green/red bars show each rebalance period's return. The line shows cumulative return across all decisions.
Every rebalance decision is logged with full detail:
Click any decision card to expand and see per-position detail: entry/exit price, individual return, weight, and direction.
The color on the left border indicates: Win Loss Flat
The dashed line shows a 6-month forward projection based on the recent 3-month trend. The trend is decayed linearly to 50% by the end of the projection — meaning the model assumes the current momentum fades over time rather than continuing forever.
This is a simple extrapolation, not a prediction. It shows "if recent trends continue at a decaying rate, where would the portfolio end up?"
| NAV | Net Asset Value — the price of one unit of a mutual fund |
| OHLCV | Open, High, Low, Close, Volume — daily price bar data |
| SMA | Simple Moving Average — average of the last N closing prices |
| VIX | CBOE Volatility Index — measures expected 30-day volatility of the S&P 500. Often called the "fear gauge" |
| Regime | The model's classification of the current market environment |
| Momentum | Rate of price change over a period — positive = rising, negative = falling |
| Sharpe Ratio | Risk-adjusted return: return per unit of volatility. Above 1.0 is good, above 2.0 is excellent |
| Max Drawdown | Worst peak-to-trough decline — measures the deepest loss you'd have experienced |
| Alpha | Return above what the market benchmark delivered |
| Acceleration | Change in the rate of returns — detects when markets are speeding up or slowing down |
| Z-Score | Number of standard deviations from the mean — a z-score of 2.0 means the value is unusually high |
| ILS | Israeli New Shekel |
| TASE | Tel Aviv Stock Exchange |
| 4D / 4A / 4B | Israeli fund tax classification codes. 4D = unhedged foreign currency, 4A = currency-hedged, 4B = Israeli-focused |
To refresh the dashboard with the latest data, run these scripts in order:
Scripts are incremental — they only fetch data newer than what's already in the database.