499 lines
19 KiB
Plaintext
499 lines
19 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# 🚨 Trading Bot Fix - Warum handelt er nicht mehr?\n",
|
|
"\n",
|
|
"## Systematische Diagnose und Lösungen"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Imports\n",
|
|
"import pandas as pd\n",
|
|
"import numpy as np\n",
|
|
"import MetaTrader5 as mt\n",
|
|
"import pandas_ta as ta\n",
|
|
"from scipy.signal import savgol_filter\n",
|
|
"from sklearn.linear_model import LinearRegression\n",
|
|
"from tabulate import tabulate\n",
|
|
"from datetime import datetime\n",
|
|
"\n",
|
|
"# Deine bestehenden Funktionen\n",
|
|
"try:\n",
|
|
" from TradingBot_V1.4_Fixed import extended_top_down_v2, get_rates, detect_market_regime\n",
|
|
" print(\"✅ V1.4 functions imported successfully\")\n",
|
|
"except ImportError as e:\n",
|
|
" print(f\"❌ Import error: {e}\")\n",
|
|
" print(\"Continuing with basic diagnosis...\")\n",
|
|
"\n",
|
|
"symbol = \"XAUUSD\""
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 1. 🔍 Grundlegende Diagnose"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"print(\"🔍 TRADING BOT DIAGNOSIS\")\n",
|
|
"print(\"=\" * 50)\n",
|
|
"\n",
|
|
"issues_found = []\n",
|
|
"\n",
|
|
"# MT5 Connection Check\n",
|
|
"print(\"\\n1️⃣ MT5 Connection Check:\")\n",
|
|
"terminal_info = mt.terminal_info()\n",
|
|
"if terminal_info:\n",
|
|
" print(\" ✅ MT5 connected\")\n",
|
|
" print(f\" Company: {terminal_info.company}\")\n",
|
|
" print(f\" Connected: {terminal_info.connected}\")\n",
|
|
" print(f\" Trade allowed: {terminal_info.trade_allowed}\")\n",
|
|
" if not terminal_info.trade_allowed:\n",
|
|
" issues_found.append(\"Trading not allowed in terminal\")\n",
|
|
"else:\n",
|
|
" print(\" ❌ MT5 not connected\")\n",
|
|
" issues_found.append(\"MT5 connection failed\")\n",
|
|
"\n",
|
|
"# Account Info Check\n",
|
|
"print(\"\\n2️⃣ Account Info Check:\")\n",
|
|
"account_info = mt.account_info()\n",
|
|
"if account_info:\n",
|
|
" print(f\" ✅ Account: {account_info.login}\")\n",
|
|
" print(f\" Balance: {account_info.balance}\")\n",
|
|
" print(f\" Equity: {account_info.equity}\")\n",
|
|
" print(f\" Trade allowed: {account_info.trade_allowed}\")\n",
|
|
" if not account_info.trade_allowed:\n",
|
|
" issues_found.append(\"Trading not allowed on account\")\n",
|
|
"else:\n",
|
|
" print(\" ❌ Cannot get account info\")\n",
|
|
" issues_found.append(\"Account info unavailable\")\n",
|
|
"\n",
|
|
"# Symbol Info Check\n",
|
|
"print(f\"\\n3️⃣ Symbol Info Check ({symbol}):\")\n",
|
|
"symbol_info = mt.symbol_info(symbol)\n",
|
|
"if symbol_info:\n",
|
|
" print(f\" ✅ Symbol exists: {symbol_info.name}\")\n",
|
|
" print(f\" Trade mode: {symbol_info.trade_mode}\")\n",
|
|
" print(f\" Min volume: {symbol_info.volume_min}\")\n",
|
|
" if symbol_info.trade_mode == 0:\n",
|
|
" issues_found.append(f\"Trading disabled for {symbol}\")\n",
|
|
"else:\n",
|
|
" print(f\" ❌ Symbol {symbol} not found\")\n",
|
|
" issues_found.append(f\"Symbol {symbol} not available\")\n",
|
|
"\n",
|
|
"# Current Price Check\n",
|
|
"print(\"\\n4️⃣ Price Data Check:\")\n",
|
|
"tick = mt.symbol_info_tick(symbol)\n",
|
|
"if tick:\n",
|
|
" print(f\" ✅ Current price: Bid={tick.bid}, Ask={tick.ask}\")\n",
|
|
" spread = tick.ask - tick.bid\n",
|
|
" print(f\" Spread: {spread:.5f}\")\n",
|
|
" if spread > 0.01:\n",
|
|
" issues_found.append(f\"High spread: {spread:.5f}\")\n",
|
|
"else:\n",
|
|
" print(\" ❌ No current price data\")\n",
|
|
" issues_found.append(\"No price data available\")\n",
|
|
"\n",
|
|
"print(f\"\\n📋 Issues Found: {len(issues_found)}\")\n",
|
|
"for i, issue in enumerate(issues_found, 1):\n",
|
|
" print(f\" {i}. {issue}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 2. 📊 Signal-Analyse: Warum kein Trade?"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Teste deine optimierte V1.4 Logik\n",
|
|
"print(\"🔍 SIGNAL ANALYSIS - Why no trading?\")\n",
|
|
"print(\"=\" * 50)\n",
|
|
"\n",
|
|
"try:\n",
|
|
" # Hole Signal-Info\n",
|
|
" signal_info = extended_top_down_v2(symbol, lookback=100)\n",
|
|
" \n",
|
|
" if signal_info:\n",
|
|
" print(f\"\\n📊 CURRENT SIGNAL STATUS:\")\n",
|
|
" print(f\"Entry Signal: {signal_info['entry_signal']}\")\n",
|
|
" print(f\"Confidence: {signal_info['confidence']:.1f}%\")\n",
|
|
" print(f\"Adaptive Threshold: {signal_info['adaptive_threshold']:.1f}%\")\n",
|
|
" print(f\"Signal Quality: {signal_info['signal_quality'].upper()}\")\n",
|
|
" print(f\"Market Regime: {signal_info['market_regime']['regime'].upper()}\")\n",
|
|
" print(f\"Top-Down Trend: {signal_info['top_down_trend'].upper()}\")\n",
|
|
" print(f\"Risk-Adjusted Strength: {signal_info['risk_adjusted_strength']:.1f}\")\n",
|
|
" \n",
|
|
" # Analyse warum kein Signal\n",
|
|
" print(f\"\\n🔍 WHY NO TRADING SIGNAL:\")\n",
|
|
" \n",
|
|
" reasons = []\n",
|
|
" \n",
|
|
" if signal_info['top_down_trend'] == 'sideways':\n",
|
|
" reasons.append(\"❌ No clear trend direction (sideways market)\")\n",
|
|
" \n",
|
|
" if signal_info['confidence'] < signal_info['adaptive_threshold']:\n",
|
|
" deficit = signal_info['adaptive_threshold'] - signal_info['confidence']\n",
|
|
" reasons.append(f\"❌ Confidence too low: {signal_info['confidence']:.1f}% < {signal_info['adaptive_threshold']:.1f}% (need {deficit:.1f}% more)\")\n",
|
|
" \n",
|
|
" if signal_info['risk_adjusted_strength'] < 100:\n",
|
|
" reasons.append(f\"❌ Risk-adjusted strength too low: {signal_info['risk_adjusted_strength']:.1f} < 100\")\n",
|
|
" \n",
|
|
" if signal_info['signal_quality'] == 'none':\n",
|
|
" reasons.append(\"❌ Signal quality insufficient\")\n",
|
|
" \n",
|
|
" if reasons:\n",
|
|
" for reason in reasons:\n",
|
|
" print(f\" {reason}\")\n",
|
|
" else:\n",
|
|
" print(\" ✅ All signal criteria met - check other filters\")\n",
|
|
" \n",
|
|
" # Vergleich mit V1.3\n",
|
|
" print(f\"\\n🔄 V1.3 vs V1.4 COMPARISON:\")\n",
|
|
" v13_threshold = 80\n",
|
|
" v13_would_trade = (\n",
|
|
" signal_info['top_down_trend'] != 'sideways' and \n",
|
|
" signal_info['confidence'] >= v13_threshold\n",
|
|
" )\n",
|
|
" v14_trades = signal_info['entry_signal'] != 0\n",
|
|
" \n",
|
|
" print(f\" V1.3 would trade: {'✅' if v13_would_trade else '❌'} (fixed 80% threshold)\")\n",
|
|
" print(f\" V1.4 trades: {'✅' if v14_trades else '❌'} (adaptive {signal_info['adaptive_threshold']:.1f}% threshold)\")\n",
|
|
" \n",
|
|
" if v13_would_trade and not v14_trades:\n",
|
|
" print(f\" 🛡️ V1.4 is MORE SELECTIVE in {signal_info['market_regime']['regime'].upper()} market\")\n",
|
|
" elif not v13_would_trade and v14_trades:\n",
|
|
" print(f\" 🚀 V1.4 found opportunity V1.3 missed!\")\n",
|
|
" \n",
|
|
" else:\n",
|
|
" print(\"❌ Could not get signal info\")\n",
|
|
" \n",
|
|
"except Exception as e:\n",
|
|
" print(f\"❌ Error in signal analysis: {e}\")\n",
|
|
" print(\"Will try simplified analysis...\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 3. 🔧 Quick Fixes"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"print(\"🔧 QUICK FIXES TO TRY\")\n",
|
|
"print(\"=\" * 30)\n",
|
|
"\n",
|
|
"# Fix 1: Temporär niedrigere Schwelle\n",
|
|
"print(\"\\n1️⃣ LOWER THRESHOLD TEMPORARILY:\")\n",
|
|
"print(\" Copy this code to make V1.4 less selective:\")\n",
|
|
"print(\"\")\n",
|
|
"quick_fix_1 = '''def quick_fix_lower_threshold(signal_info):\n",
|
|
" # Reduziere adaptive Schwelle um 15%\n",
|
|
" original_threshold = signal_info['adaptive_threshold']\n",
|
|
" new_threshold = max(60, original_threshold - 15)\n",
|
|
" \n",
|
|
" print(f\"Original threshold: {original_threshold}%\")\n",
|
|
" print(f\"New threshold: {new_threshold}%\")\n",
|
|
" \n",
|
|
" if signal_info['confidence'] >= new_threshold:\n",
|
|
" print(\"✅ Would trade with lower threshold!\")\n",
|
|
" return True\n",
|
|
" else:\n",
|
|
" print(f\"❌ Still need {new_threshold - signal_info['confidence']:.1f}% more confidence\")\n",
|
|
" return False'''\n",
|
|
"\n",
|
|
"print(quick_fix_1)\n",
|
|
"\n",
|
|
"# Fix 2: Bypass Pullback Entry\n",
|
|
"print(\"\\n\\n2️⃣ BYPASS PULLBACK ENTRY:\")\n",
|
|
"print(\" Set: use_pullback_entry = False\")\n",
|
|
"print(\" This allows immediate entries instead of waiting for pullbacks\")\n",
|
|
"\n",
|
|
"# Fix 3: Allow Fair Quality\n",
|
|
"print(\"\\n3️⃣ ALLOW 'FAIR' SIGNAL QUALITY:\")\n",
|
|
"print(\" Modify signal quality check to accept 'fair' signals\")\n",
|
|
"\n",
|
|
"# Fix 4: Emergency V1.3 Mode\n",
|
|
"print(\"\\n4️⃣ EMERGENCY V1.3 MODE:\")\n",
|
|
"print(\" Use simplified logic similar to your original bot\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 4. 🚨 Emergency V1.3-Style Trading"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def emergency_trading_signal(symbol=\"XAUUSD\"):\n",
|
|
" \"\"\"\n",
|
|
" Vereinfachte V1.3-ähnliche Logik als Fallback\n",
|
|
" \"\"\"\n",
|
|
" print(\"🚨 EMERGENCY V1.3-STYLE TRADING\")\n",
|
|
" print(\"=\" * 40)\n",
|
|
" \n",
|
|
" try:\n",
|
|
" # Einfache get_rates Funktion\n",
|
|
" def simple_get_rates(tf, count):\n",
|
|
" tf_map = {\"h4\": mt.TIMEFRAME_H4, \"m5\": mt.TIMEFRAME_M5}\n",
|
|
" rates = mt.copy_rates_from_pos(symbol, tf_map[tf], 0, count)\n",
|
|
" if rates is None:\n",
|
|
" return None\n",
|
|
" df = pd.DataFrame(rates)\n",
|
|
" df['atr'] = ta.atr(df['high'], df['low'], df['close'], length=14)\n",
|
|
" return df\n",
|
|
" \n",
|
|
" # Hole H4 und M5 Daten\n",
|
|
" h4_df = simple_get_rates(\"h4\", 150)\n",
|
|
" m5_df = simple_get_rates(\"m5\", 100)\n",
|
|
" \n",
|
|
" if h4_df is None or m5_df is None:\n",
|
|
" return 0, \"No data available\"\n",
|
|
" \n",
|
|
" print(f\"Got H4 data: {len(h4_df)} bars\")\n",
|
|
" print(f\"Got M5 data: {len(m5_df)} bars\")\n",
|
|
" \n",
|
|
" # Vereinfachte Trend-Analyse H4\n",
|
|
" h4_df['close_smooth'] = savgol_filter(h4_df['close'], 15, 3)\n",
|
|
" X = np.arange(len(h4_df)).reshape(-1, 1)\n",
|
|
" y = h4_df['close_smooth'].values\n",
|
|
" model = LinearRegression().fit(X, y)\n",
|
|
" slope_h4 = model.coef_[0]\n",
|
|
" \n",
|
|
" atr_h4 = h4_df['atr'].iloc[-1]\n",
|
|
" threshold_h4 = atr_h4 * 0.0001\n",
|
|
" \n",
|
|
" if slope_h4 > threshold_h4:\n",
|
|
" h4_trend = \"uptrend\"\n",
|
|
" elif slope_h4 < -threshold_h4:\n",
|
|
" h4_trend = \"downtrend\"\n",
|
|
" else:\n",
|
|
" h4_trend = \"sideways\"\n",
|
|
" \n",
|
|
" print(f\"H4 Trend: {h4_trend} (slope: {slope_h4:.6f})\")\n",
|
|
" \n",
|
|
" # Vereinfachte Trend-Analyse M5\n",
|
|
" m5_df['close_smooth'] = savgol_filter(m5_df['close'], 15, 3)\n",
|
|
" X_m5 = np.arange(len(m5_df)).reshape(-1, 1)\n",
|
|
" y_m5 = m5_df['close_smooth'].values\n",
|
|
" model_m5 = LinearRegression().fit(X_m5, y_m5)\n",
|
|
" slope_m5 = model_m5.coef_[0]\n",
|
|
" \n",
|
|
" atr_m5 = m5_df['atr'].iloc[-1]\n",
|
|
" threshold_m5 = atr_m5 * 0.0001\n",
|
|
" \n",
|
|
" if slope_m5 > threshold_m5:\n",
|
|
" m5_trend = \"uptrend\"\n",
|
|
" elif slope_m5 < -threshold_m5:\n",
|
|
" m5_trend = \"downtrend\"\n",
|
|
" else:\n",
|
|
" m5_trend = \"sideways\"\n",
|
|
" \n",
|
|
" print(f\"M5 Trend: {m5_trend} (slope: {slope_m5:.6f})\")\n",
|
|
" \n",
|
|
" # Vereinfachte Confidence\n",
|
|
" if h4_trend == m5_trend and h4_trend != \"sideways\":\n",
|
|
" confidence = 85 # Hoch wenn aligned\n",
|
|
" signal = 1 if h4_trend == \"uptrend\" else -1\n",
|
|
" trend_agreement = \"✅ ALIGNED\"\n",
|
|
" else:\n",
|
|
" confidence = 45 # Niedrig wenn nicht aligned\n",
|
|
" signal = 0\n",
|
|
" trend_agreement = \"❌ NOT ALIGNED\"\n",
|
|
" \n",
|
|
" print(f\"Trend Agreement: {trend_agreement}\")\n",
|
|
" print(f\"Confidence: {confidence}%\")\n",
|
|
" \n",
|
|
" # V1.3-ähnliche niedrige Schwelle\n",
|
|
" emergency_threshold = 70\n",
|
|
" \n",
|
|
" print(f\"Emergency Threshold: {emergency_threshold}%\")\n",
|
|
" \n",
|
|
" if confidence >= emergency_threshold and signal != 0:\n",
|
|
" direction = \"LONG\" if signal == 1 else \"SHORT\"\n",
|
|
" return signal, f\"🚀 EMERGENCY {direction} SIGNAL! Confidence: {confidence}%\"\n",
|
|
" else:\n",
|
|
" return 0, f\"❌ No emergency signal: confidence {confidence}% < {emergency_threshold}%\"\n",
|
|
" \n",
|
|
" except Exception as e:\n",
|
|
" return 0, f\"Error in emergency analysis: {e}\"\n",
|
|
"\n",
|
|
"# Test Emergency Signal\n",
|
|
"emergency_signal, emergency_reason = emergency_trading_signal(symbol)\n",
|
|
"print(f\"\\n🎯 EMERGENCY RESULT:\")\n",
|
|
"print(f\"Signal: {emergency_signal}\")\n",
|
|
"print(f\"Reason: {emergency_reason}\")\n",
|
|
"\n",
|
|
"if emergency_signal != 0:\n",
|
|
" print(\"\\n🚀 EMERGENCY SIGNAL DETECTED!\")\n",
|
|
" print(\"You could use this as a fallback trading signal.\")\n",
|
|
"else:\n",
|
|
" print(\"\\n⏸️ Even emergency logic shows no signal\")\n",
|
|
" print(\"Market conditions may genuinely not be suitable for trading.\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 5. 🔄 Test mit deiner ursprünglichen V1.3 Funktion"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"print(\"🔄 TESTING YOUR ORIGINAL V1.3 LOGIC\")\n",
|
|
"print(\"=\" * 40)\n",
|
|
"\n",
|
|
"# Hier würdest du deine ursprüngliche extended_top_down() Funktion aus V1.3 aufrufen\n",
|
|
"print(\"To test your original logic, run:\")\n",
|
|
"print(\"\")\n",
|
|
"print(\"# Copy your original extended_top_down() function here\")\n",
|
|
"print(\"# Then run:\")\n",
|
|
"print(\"original_result = extended_top_down(symbol)\")\n",
|
|
"print(\"print(f'Original V1.3 result: {original_result}')\")\n",
|
|
"print(\"\")\n",
|
|
"print(\"This will show you if your V1.3 logic would still trade.\")\n",
|
|
"print(\"If V1.3 trades but V1.4 doesn't, we know V1.4 is too restrictive.\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 6. 🎯 Immediate Solutions"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"print(\"🎯 IMMEDIATE SOLUTIONS TO GET TRADING AGAIN\")\n",
|
|
"print(\"=\" * 50)\n",
|
|
"\n",
|
|
"solutions = [\n",
|
|
" \"1️⃣ QUICK FIX - Lower Adaptive Threshold:\",\n",
|
|
" \" In execute_trade_v2(), change:\",\n",
|
|
" \" adaptive_threshold = signal_info['adaptive_threshold'] - 15\",\n",
|
|
" \"\",\n",
|
|
" \"2️⃣ DISABLE PULLBACK ENTRY:\",\n",
|
|
" \" Set: use_pullback_entry = False\",\n",
|
|
" \" This removes the timing filter\",\n",
|
|
" \"\",\n",
|
|
" \"3️⃣ ACCEPT FAIR SIGNALS:\",\n",
|
|
" \" Allow signal_quality = 'fair' to trade\",\n",
|
|
" \"\",\n",
|
|
" \"4️⃣ EMERGENCY MODE:\",\n",
|
|
" \" Use the emergency_trading_signal() function above\",\n",
|
|
" \" as your main trading logic temporarily\",\n",
|
|
" \"\",\n",
|
|
" \"5️⃣ HYBRID APPROACH:\",\n",
|
|
" \" If V1.4 says no trade, check emergency signal\",\n",
|
|
" \" If emergency signal exists, trade with smaller volume\",\n",
|
|
" \"\",\n",
|
|
" \"6️⃣ REVERT TO V1.3:\",\n",
|
|
" \" Temporarily go back to your original bot\",\n",
|
|
" \" while we fine-tune V1.4 parameters\"\n",
|
|
"]\n",
|
|
"\n",
|
|
"for solution in solutions:\n",
|
|
" print(solution)\n",
|
|
"\n",
|
|
"print(\"\\n\" + \"=\" * 50)\n",
|
|
"print(\"🚨 MOST LIKELY ISSUE: V1.4 is TOO SELECTIVE\")\n",
|
|
"print(\"V1.4 was designed to be more careful, which means fewer trades.\")\n",
|
|
"print(\"This is actually GOOD for avoiding bad trades, but may feel like 'not working'.\")\n",
|
|
"print(\"\")\n",
|
|
"print(\"💡 RECOMMENDATION:\")\n",
|
|
"print(\"1. Try the emergency signal above\")\n",
|
|
"print(\"2. If it works, gradually tune V1.4 to be less restrictive\")\n",
|
|
"print(\"3. Compare results over 1-2 weeks to see which performs better\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 7. 📊 Parameter Tuning"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Zeige aktuelle Parameter und Tuning-Optionen\n",
|
|
"print(\"📊 PARAMETER TUNING OPTIONS\")\n",
|
|
"print(\"=\" * 35)\n",
|
|
"\n",
|
|
"tuning_options = [\n",
|
|
" \"Current V1.4 Parameters (too restrictive?):\",\n",
|
|
" \"• Base confidence: 70%\",\n",
|
|
" \"• Trending adjustment: -10 to -15%\",\n",
|
|
" \"• Ranging adjustment: +15%\",\n",
|
|
" \"• Volatile adjustment: +20%\",\n",
|
|
" \"• Min risk-adjusted strength: 100\",\n",
|
|
" \"\",\n",
|
|
" \"Suggested Relaxed Parameters:\",\n",
|
|
" \"• Base confidence: 60%\",\n",
|
|
" \"• Trending adjustment: -15 to -20%\",\n",
|
|
" \"• Ranging adjustment: +10%\",\n",
|
|
" \"• Volatile adjustment: +15%\",\n",
|
|
" \"• Min risk-adjusted strength: 80\",\n",
|
|
" \"\",\n",
|
|
" \"Very Relaxed (V1.3-like):\",\n",
|
|
" \"• Fixed confidence: 75%\",\n",
|
|
" \"• No regime adjustments\",\n",
|
|
" \"• No signal quality filter\",\n",
|
|
" \"• No pullback entry timing\"\n",
|
|
"]\n",
|
|
"\n",
|
|
"for option in tuning_options:\n",
|
|
" print(option)"
|
|
]
|
|
}\n",
|
|
],\n",
|
|
"metadata": {\n",
|
|
"kernelspec": {\n",
|
|
\"display_name\": \"Python 3\",\n",
|
|
\"language\": \"python\",\n",
|
|
\"name\": \"python3\"\n },\n \"language_info\": {\n \"codemirror_mode\": {\n \"name\": \"ipython\",\n \"version\": 3\n },\n \"file_extension\": \".py\",\n \"mimetype\": \"text/x-python\",\n \"name\": \"python\",\n \"nbconvert_exporter\": \"python\",\n \"pygments_lexer\": \"ipython3\",\n \"version\": \"3.11.5\"\n }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}
|