refactor: Standardize CSV output structure across all scanners
This commit is contained in:
parent
bf0adcb163
commit
8c1b98860f
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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)}")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user