Files
profitable-expert-advisor/ai/dummy/test_very_low_threshold.py
zhutoutoutousan 98a87a69ca Update
2026-02-13 08:03:25 +01:00

104 lines
3.3 KiB
Python

"""
Test with very low thresholds to see if we can get any trades
"""
import os
import sys
from datetime import datetime, timedelta
import MetaTrader5 as mt5
# Add paths
current_dir = os.path.dirname(os.path.abspath(__file__))
backtest_dir = os.path.join(os.path.dirname(current_dir), 'backtesting', 'MT5')
sys.path.insert(0, backtest_dir)
from backtest_engine import BacktestEngine
from onnx_backtest_strategy import ONNXBacktestStrategy
from performance_analyzer import PerformanceAnalyzer
def main():
"""Test with very low thresholds."""
print("="*60)
print("Testing with VERY LOW Thresholds")
print("="*60)
symbol = 'XAUUSD'
timeframe = mt5.TIMEFRAME_H1
model_path = 'models/XAUUSD_H1_model.onnx'
scaler_path = 'models/XAUUSD_H1_scaler.pkl'
initial_balance = 10000.0
if not os.path.exists(model_path):
print(f"ERROR: Model not found: {model_path}")
return
end_date = datetime.now()
start_date = end_date - timedelta(days=180)
print(f"\nModel: {model_path}")
print(f"Date Range: {start_date.date()} to {end_date.date()}")
print(f"\nVERY RELAXED Parameters:")
print(" Prediction Threshold: 0.00001 (0.001%)")
print(" Min Confidence: 0.05 (5%)")
print(" Stop Loss: 50 pips")
print(" Take Profit: 100 pips")
print(" Lot Size: 0.1\n")
if not mt5.initialize():
print("ERROR: Failed to initialize MT5")
return
try:
# Create strategy with VERY low thresholds
strategy = ONNXBacktestStrategy(
symbol=symbol,
timeframe=timeframe,
model_path=model_path,
scaler_path=scaler_path,
initial_balance=initial_balance,
prediction_threshold=0.00001, # Very low: 0.001%
min_confidence=0.05, # Very low: 5%
lot_size=0.1,
stop_loss_pips=50,
take_profit_pips=100
)
print("Running backtest...\n")
engine = BacktestEngine(strategy, start_date, end_date)
results = engine.run()
analyzer = PerformanceAnalyzer(results)
metrics = analyzer.metrics
print("\n" + "="*60)
print("Results")
print("="*60)
print(f"Total Trades: {metrics.get('total_trades', 0)}")
print(f"Final Balance: ${metrics.get('final_balance', initial_balance):,.2f}")
print(f"Total Return: {metrics.get('total_return_pct', 0):.2f}%")
if metrics.get('total_trades', 0) == 0:
print("\n" + "="*60)
print("STILL NO TRADES!")
print("="*60)
print("This suggests the model predictions may be:")
print(" 1. Too small in magnitude")
print(" 2. Not meeting even very low thresholds")
print(" 3. Or there's an issue with the prediction logic")
print("\nNext steps:")
print(" - Check model predictions directly")
print(" - Verify feature preparation matches training")
print(" - Consider retraining with different architecture")
except Exception as e:
print(f"\nERROR: {e}")
import traceback
traceback.print_exc()
finally:
mt5.shutdown()
if __name__ == '__main__':
main()