refactor: Standardize CSV output structure across all scanners

This commit is contained in:
Bobby (aider) 2025-02-08 18:59:19 -08:00
parent bf0adcb163
commit 8c1b98860f
3 changed files with 23 additions and 25 deletions

View File

@ -120,17 +120,17 @@ def run_atr_ema_scanner(min_price: float, max_price: float, min_volume: int, por
if position['shares'] > 0: if position['shares'] > 0:
signal_data = { signal_data = {
'ticker': ticker, 'ticker': ticker,
'entry': current_price, 'entry_price': current_price,
'target': target_price, 'target_price': target_price,
'signal_date': signal_date, 'signal_date': signal_date,
'volume': current_volume, 'volume': current_volume,
'last_update': datetime.fromtimestamp(last_update/1000000000), 'last_update': datetime.fromtimestamp(last_update/1000000000),
'shares': position['shares'], 'shares': position['shares'],
'position_size': position['position_value'], 'position_size': position['position_value'],
'stop_loss': position['stop_loss'], 'stop_loss': position['stop_loss'],
'risk': position['potential_loss'], 'risk_amount': position['potential_loss'],
'reward': position['potential_profit'], 'profit_amount': position['potential_profit'],
'r_r': position['risk_reward_ratio'] 'risk_reward_ratio': position['risk_reward_ratio']
} }
bullish_signals.append(signal_data) bullish_signals.append(signal_data)
dollar_risk = signal_data['risk'] * -1 dollar_risk = signal_data['risk'] * -1

View File

@ -126,20 +126,23 @@ def run_atr_ema_scanner_v2(min_price: float, max_price: float, min_volume: int,
if signal: if signal:
entry_data = { entry_data = {
'ticker': ticker, 'ticker': ticker,
'price': signal_data['price'], 'entry_price': signal_data['price'],
'target_price': signal_data['ema'],
'volume': current_volume, 'volume': current_volume,
'signal_date': signal_date, 'signal_date': signal_date,
'last_update': datetime.fromtimestamp(last_update/1000000000), 'last_update': datetime.fromtimestamp(last_update/1000000000)
'ema': signal_data['ema'] # Make sure we store the EMA value
} }
if calculator: if calculator:
position = calculator.calculate_position_size(entry_data['price']) position = calculator.calculate_position_size(entry_data['entry_price'])
potential_profit = (entry_data['target_price'] - entry_data['entry_price']) * position['shares']
entry_data.update({ entry_data.update({
'shares': position['shares'], 'shares': position['shares'],
'position_size': position['position_value'], 'position_size': position['position_value'],
'stop_loss': position['stop_loss'], 'stop_loss': position['stop_loss'],
'risk': position['potential_loss'] 'risk_amount': position['potential_loss'],
'profit_amount': potential_profit,
'risk_reward_ratio': abs(potential_profit / position['potential_loss']) if position['potential_loss'] != 0 else 0
}) })
entry_signals.append(entry_data) entry_signals.append(entry_data)

View File

@ -252,16 +252,17 @@ def run_sunny_scanner(min_price: float, max_price: float, min_volume: int, portf
# Update signal data with proper stop loss calculation # Update signal data with proper stop loss calculation
signal_data = { signal_data = {
'ticker': ticker, 'ticker': ticker,
'entry': current_price, 'entry_price': current_price,
'target': target_price, 'target_price': target_price,
'signal_date': signal_date,
'volume': current_volume, 'volume': current_volume,
'last_update': datetime.fromtimestamp(last_update/1000000000), 'last_update': datetime.fromtimestamp(last_update/1000000000),
'shares': position['shares'], 'shares': position['shares'],
'position_size': position['position_value'], 'position_size': position['position_value'],
'stop_loss': current_price * 0.93, # 7% stop loss 'stop_loss': current_price * 0.93, # 7% stop loss
'risk': position['potential_loss'], 'risk_amount': position['potential_loss'],
'reward': position['potential_profit'], 'profit_amount': position['potential_profit'],
'r_r': position['risk_reward_ratio'] 'risk_reward_ratio': position['risk_reward_ratio']
} }
bullish_signals.append(signal_data) bullish_signals.append(signal_data)
# Update print output format # Update print output format
@ -299,17 +300,11 @@ def run_sunny_scanner(min_price: float, max_price: float, min_volume: int, portf
if bullish_signals: if bullish_signals:
df_bullish = pd.DataFrame(bullish_signals) df_bullish = pd.DataFrame(bullish_signals)
output_file = f'{output_dir}/sunny_bullish_{output_date}.csv' output_file = f'{output_dir}/sunny_signals_{output_date}.csv'
df_bullish.to_csv(output_file, index=False) df_bullish.to_csv(output_file, index=False)
print(f"\nSaved bullish signals to {output_file}") print(f"\nSaved {len(bullish_signals)} signals to {output_file}")
else:
if bearish_signals: print("\nNo signals found")
df_bearish = pd.DataFrame(bearish_signals)
output_file = f'{output_dir}/sunny_bearish_{output_date}.csv'
df_bearish.to_csv(output_file, index=False)
print(f"\nSaved bearish signals to {output_file}")
print(f"\nFound {len(bullish_signals)} bullish and {len(bearish_signals)} bearish signals")
except Exception as e: except Exception as e:
print(f"Error during scan: {str(e)}") print(f"Error during scan: {str(e)}")