NAMIE (NIJA Adaptive Market Intelligence Engine) is the highest ROI upgrade to NIJA’s trading system. It multiplies the effectiveness of all existing strategies by:
NAMIE consists of four core components that work together:
namie_core.py)The brain of the system that performs comprehensive market analysis:
namie_strategy_switcher.py)Intelligent strategy selection and performance tracking:
namie_integration.py)Easy-to-use API for existing strategies:
NAMIE unifies and enhances:
market_regime_detector.py - Deterministic regime detectionbayesian_regime_detector.py - Probabilistic regime classificationregime_strategy_selector.py - Strategy selection logicvolatility_adaptive_sizer.py - Volatility-based position sizingfrom bot.namie_integration import NAMIEIntegration
# Initialize NAMIE
namie = NAMIEIntegration()
# In your trading loop
for symbol in trading_pairs:
df = get_price_data(symbol)
indicators = calculate_indicators(df)
# Get NAMIE intelligence
signal = namie.analyze(df, indicators, symbol)
# Check if should trade
if signal.should_trade:
print(f"✅ Trade {symbol}")
print(f" Regime: {signal.regime.value}")
print(f" Strategy: {signal.optimal_strategy.value}")
print(f" Trend Strength: {signal.trend_strength}/100")
print(f" Chop Score: {signal.chop_score:.0f}/100")
# Adjust position size based on NAMIE
base_size = calculate_position_size(account_balance)
adjusted_size = namie.adjust_position_size(signal, base_size)
# Get adaptive RSI ranges
rsi_ranges = namie.get_adaptive_rsi_ranges(signal)
# Execute trade with NAMIE intelligence
execute_trade(symbol, adjusted_size, rsi_ranges)
from bot.namie_integration import quick_namie_check
# Single function for quick integration
should_trade, reason, signal = quick_namie_check(df, indicators, "BTC-USD")
if should_trade:
# Trade approved by NAMIE
size = base_size * signal.position_size_multiplier
execute_trade(size)
else:
print(f"❌ NAMIE blocked: {reason}")
from bot.nija_apex_strategy_v71 import NIJAApexStrategyV71
from bot.namie_integration import NAMIEIntegration
class ApexWithNAMIE(NIJAApexStrategyV71):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.namie = NAMIEIntegration()
def analyze_market(self, df, symbol, account_balance):
# Get base APEX analysis
analysis = super().analyze_market(df, symbol, account_balance)
# Get NAMIE intelligence
indicators = self._calculate_indicators(df)
signal = self.namie.analyze(df, indicators, symbol)
# Enhance with NAMIE
if analysis['action'] != 'hold':
# Check NAMIE approval
should_trade, reason = self.namie.should_enter_trade(
signal,
base_entry_score=analysis.get('entry_score', 3),
base_should_enter=True
)
if not should_trade:
analysis['action'] = 'hold'
analysis['reason'] = reason
else:
# Adjust position size
analysis['position_size'] = self.namie.adjust_position_size(
signal,
analysis['position_size']
)
return analysis
from bot.trading_strategy import TradingStrategy # Your existing strategy
from bot.namie_integration import NAMIEIntegration
# In your trading strategy class
class YourStrategy(TradingStrategy):
def __init__(self):
super().__init__()
self.namie = NAMIEIntegration()
def check_entry_signal(self, symbol, df):
# Your existing entry logic
base_signal = super().check_entry_signal(symbol, df)
# Add NAMIE intelligence
indicators = self.calculate_indicators(df)
namie_signal = self.namie.analyze(df, indicators, symbol)
# Combine signals
if base_signal and namie_signal.should_trade:
return True, namie_signal
else:
return False, None
Add to your .env file:
# NAMIE Configuration
NAMIE_ENABLED=true
NAMIE_RESPECT_DECISIONS=true
NAMIE_MIN_REGIME_CONFIDENCE=0.6
NAMIE_MIN_TREND_STRENGTH=40
NAMIE_MAX_CHOP_SCORE=60
# Strategy Switching
NAMIE_ENABLE_SWITCHER=true
NAMIE_MIN_TRADES_FOR_SWITCH=10
NAMIE_SWITCH_THRESHOLD_WIN_RATE=0.45
NAMIE_MAX_STRATEGY_DRAWDOWN=0.15
config = {
# Core NAMIE settings
'min_regime_confidence': 0.6, # Minimum confidence to trade (0-1)
'min_trend_strength': 40, # Minimum trend score to trade (0-100)
'max_chop_score': 60, # Maximum chop before blocking (0-100)
# Strategy switching
'min_trades_for_switch': 10, # Min trades before switching
'switch_threshold_win_rate': 0.45, # Switch if WR below this
'switch_threshold_profit_factor': 0.8, # Switch if PF below this
'max_strategy_drawdown': 0.15, # 15% max strategy DD
'min_switch_interval_hours': 4, # Min hours between switches
# Integration settings
'respect_namie_decisions': True, # Let NAMIE block trades
'override_position_sizing': True, # Let NAMIE adjust sizes
'override_entry_thresholds': True, # Let NAMIE set min entry score
}
namie = NAMIEIntegration(config=config)
NAMIE classifies markets into three regimes:
NAMIE calculates a comprehensive 0-100 trend strength score:
NAMIE detects choppy/sideways markets to prevent losses:
NAMIE automatically switches strategies based on performance:
NAMIE tracks per strategy-regime combination:
Strategies are scored 0-100 based on:
Complete signal returned by NAMIE analysis:
@dataclass
class NAMIESignal:
timestamp: datetime
# Regime
regime: MarketRegime # TRENDING/RANGING/VOLATILE
regime_confidence: float # 0-1
regime_probabilities: RegimeProbabilities # Bayesian distribution
# Volatility
volatility_regime: VolatilityRegime
volatility_cluster: str # expanding/contracting/stable
atr_pct: float
# Trend
trend_strength: int # 0-100
trend_strength_category: TrendStrength
trend_direction: str # up/down/neutral
# Chop
chop_condition: ChopCondition
chop_score: float # 0-100
# Strategy
optimal_strategy: TradingStrategy
strategy_confidence: float # 0-1
alternative_strategies: List[Tuple[Strategy, float]]
# Trading Decision
should_trade: bool
trade_reason: str
position_size_multiplier: float
min_entry_score_required: int
# Metrics
metrics: Dict
summary = namie.get_performance_summary()
# Summary structure:
{
'namie_core': {
'trending': {
'trades': 45,
'wins': 28,
'losses': 17,
'win_rate': 0.622,
'total_pnl': 1250.50,
'avg_pnl_per_trade': 27.79
},
'ranging': {...},
'volatile': {...}
},
'strategy_switcher': {
'by_strategy_regime': {
'trend_trending': {
'total_trades': 30,
'win_rate': 0.667,
'profit_factor': 2.15,
'sharpe_estimate': 1.8
},
...
},
'current_allocations': {
'trending': 'trend',
'ranging': 'mean_reversion',
'volatile': 'breakout'
},
'recent_switches': [...]
}
}
Based on backtesting and live testing:
config = {
'min_regime_confidence': 0.7, # Higher confidence required
'min_trend_strength': 50, # Stronger trends only
'max_chop_score': 50, # More aggressive chop filtering
}
# Check NAMIE effectiveness daily
summary = namie.get_performance_summary()
# Compare regime performance
for regime, stats in summary['namie_core'].items():
print(f"{regime}: WR={stats['win_rate']:.1%}, PnL=${stats['total_pnl']:.2f}")
# If missing good trades, relax thresholds
config['min_trend_strength'] = 40 # Lower threshold
config['max_chop_score'] = 60 # Allow more chop
# If too many losses, tighten thresholds
config['min_regime_confidence'] = 0.75
config['min_trend_strength'] = 60
# Always record trade results for NAMIE learning
namie.record_trade_result(
signal=namie_signal,
entry_price=entry,
exit_price=exit,
side='long',
size_usd=position_size,
commission=fees
)
Solution: Check thresholds are not too strict
# View current signal
signal = namie.analyze(df, indicators, symbol)
print(f"Regime confidence: {signal.regime_confidence:.0%}")
print(f"Trend strength: {signal.trend_strength}/100")
print(f"Chop score: {signal.chop_score:.0f}/100")
print(f"Reason: {signal.trade_reason}")
# Adjust config if needed
Solution: Increase switch cooldown
config['min_switch_interval_hours'] = 8 # Increase to 8 hours
config['min_trades_for_switch'] = 15 # Need more data before switching
Solution: Verify integration
# Ensure NAMIE decisions are being respected
namie = NAMIEIntegration(config={
'respect_namie_decisions': True,
'override_position_sizing': True,
'override_entry_thresholds': True,
})
# Check that trades are being recorded
# (NAMIE learns from trade results)
# Override default regime parameters
from bot.namie_core import get_namie_engine
namie_core = get_namie_engine()
# Adjust TRENDING regime parameters
namie_core.regime_detector.regime_params[MarketRegime.TRENDING]['position_size_multiplier'] = 1.5
namie_core.regime_detector.regime_params[MarketRegime.TRENDING]['min_entry_score'] = 2
# Use NAMIE in backtesting
from bot.namie_integration import NAMIEIntegration
namie = NAMIEIntegration(enable_switcher=True)
for bar in historical_data:
df = bar.df
indicators = calculate_indicators(df)
signal = namie.analyze(df, indicators, bar.symbol)
if signal.should_trade and base_strategy.check_entry(bar):
# Execute backtest trade
size = base_size * signal.position_size_multiplier
# ... execute trade ...
# Record result
namie.record_trade_result(signal, entry, exit, side, size)
# Get backtest performance
summary = namie.get_performance_summary()
For issues or questions:
namie_core.py, namie_strategy_switcher.py, namie_integration.pyNAMIE - Adaptive Intelligence for Maximum ROI 🧠💎