From bf71fa5fb25f49e68dba5800f5a4c975eef1326e Mon Sep 17 00:00:00 2001 From: "Bobby (aider)" Date: Sat, 8 Feb 2025 08:21:28 -0800 Subject: [PATCH] feat: Update default stop loss to 7% and improve position sizing output --- src/screener/t_atr_ema.py | 13 ++++++++++--- src/trading/position_calculator.py | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/screener/t_atr_ema.py b/src/screener/t_atr_ema.py index aa418c0..ad6a43a 100644 --- a/src/screener/t_atr_ema.py +++ b/src/screener/t_atr_ema.py @@ -90,7 +90,11 @@ def run_atr_ema_scanner(min_price: float, max_price: float, min_volume: int, por indicator = ThreeATREMAIndicator() calculator = None if portfolio_size and portfolio_size > 0: - calculator = PositionCalculator(account_size=portfolio_size) + calculator = PositionCalculator( + account_size=portfolio_size, + risk_percentage=1.0, + stop_loss_percentage=7.0 # Explicitly set 7% stop + ) bullish_signals = [] @@ -125,8 +129,11 @@ def run_atr_ema_scanner(min_price: float, max_price: float, min_volume: int, por 'r_r': position['risk_reward_ratio'] } bullish_signals.append(signal_data) - print(f"\n🟢 {ticker} Entry: ${current_price:.2f} Target: ${target_price:.2f}") - print(f" Potential Profit: ${signal_data['reward']:.2f} | Potential Loss: ${abs(signal_data['risk']):.2f}") + dollar_risk = signal_data['risk'] * -1 + print(f"\n🟢 {ticker} @ ${current_price:.2f}") + print(f" Size: {signal_data['shares']} shares (${signal_data['position_size']:.2f})") + print(f" Stop: ${signal_data['stop_loss']:.2f} (7%) | Target: ${target_price:.2f}") + print(f" Risk/Reward: 1:{signal_data['r_r']:.1f} | Risk: ${dollar_risk:.2f}") except Exception as e: print(f"Error processing {ticker}: {str(e)}") diff --git a/src/trading/position_calculator.py b/src/trading/position_calculator.py index bc62d0e..6d8aa7b 100644 --- a/src/trading/position_calculator.py +++ b/src/trading/position_calculator.py @@ -1,12 +1,12 @@ class PositionCalculator: - def __init__(self, account_size: float, risk_percentage: float = 1.0, stop_loss_percentage: float = 6.0): + def __init__(self, account_size: float, risk_percentage: float = 1.0, stop_loss_percentage: float = 7.0): """ Initialize position calculator with account size and risk percentage Args: account_size (float): Total trading account value risk_percentage (float): Maximum risk per trade as percentage (default 1%) - stop_loss_percentage (float): Stop loss percentage (default 6%) + stop_loss_percentage (float): Stop loss percentage (default 7%) """ self.account_size = account_size self.risk_percentage = risk_percentage / 100.0 # Convert to decimal