diff --git a/src/screener/t_sunnyband.py b/src/screener/t_sunnyband.py index 018305f..f54e390 100644 --- a/src/screener/t_sunnyband.py +++ b/src/screener/t_sunnyband.py @@ -299,7 +299,11 @@ def run_sunny_scanner(min_price: float, max_price: float, min_volume: int, portf sunny = SunnyBands() 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 # Explicit 7% stop loss + ) bullish_signals = [] bearish_signals = [] @@ -321,25 +325,36 @@ def run_sunny_scanner(min_price: float, max_price: float, min_volume: int, portf target_price = results['upper_band'].iloc[-1] if calculator: - position = calculator.calculate_position_size(current_price, target_price) - if position['shares'] > 0: - signal_data = { - 'ticker': ticker, - 'entry': current_price, - 'target': target_price, - 'volume': current_volume, - 'last_update': datetime.fromtimestamp(last_update/1000000000), - 'shares': position['shares'], - 'position_size': position['position_value'], - 'stop_loss': position['stop_loss'], - 'risk': position['potential_loss'], - 'reward': position['potential_profit'], - 'r_r': position['risk_reward_ratio'] - } - bullish_signals.append(signal_data) - # Print potential entry, target, and potential P/L - 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}") + try: + position = calculator.calculate_position_size( + entry_price=current_price, + target_price=target_price + ) + if position['shares'] > 0: + # Update signal data with proper stop loss calculation + signal_data = { + 'ticker': ticker, + 'entry': current_price, + 'target': target_price, + 'volume': current_volume, + 'last_update': datetime.fromtimestamp(last_update/1000000000), + 'shares': position['shares'], + 'position_size': position['position_value'], + 'stop_loss': current_price * 0.93, # 7% stop loss + 'risk': position['potential_loss'], + 'reward': position['potential_profit'], + 'r_r': position['risk_reward_ratio'] + } + bullish_signals.append(signal_data) + # Update print output format + dollar_risk = position['potential_loss'] * -1 + print(f"\n🟢 {ticker} @ ${current_price:.2f}") + print(f" Size: {position['shares']} shares (${position['position_value']:.2f})") + print(f" Stop: ${signal_data['stop_loss']:.2f} (-7%) | Target: ${target_price:.2f}") + print(f" Risk/Reward: 1:{position['risk_reward_ratio']:.1f} | Risk: ${dollar_risk:.2f}") + except ValueError as e: + print(f"Skipping {ticker} position: {str(e)}") + continue elif results['bearish_signal'].iloc[-1]: bearish_signals.append({