diff --git a/src/trading/main.py b/src/trading/main.py index 5923cf5..45c1d77 100644 --- a/src/trading/main.py +++ b/src/trading/main.py @@ -2,10 +2,20 @@ from datetime import datetime from position_calculator import PositionCalculator from portfolio import Portfolio, Position +def get_float_input(prompt: str) -> float: + while True: + try: + return float(input(prompt)) + except ValueError: + print("Please enter a valid number") + def main(): + # Get initial portfolio value from user + portfolio_value = get_float_input("Enter your portfolio value: $") + # Initialize portfolio and position calculator portfolio = Portfolio() - calculator = PositionCalculator(account_size=100000) # $100k account + calculator = PositionCalculator(account_size=portfolio_value) # Use user's portfolio value while True: print("\nTrading Management System") @@ -19,16 +29,15 @@ def main(): if choice == "1": try: - entry_price = float(input("Enter entry price: ")) - stop_loss = float(input("Enter stop loss price: ")) + entry_price = get_float_input("Enter entry price: $") - position = calculator.calculate_position_size(entry_price, stop_loss) + position = calculator.calculate_position_size(entry_price) print("\nPosition Details:") print(f"Shares: {position['shares']}") print(f"Position Value: ${position['position_value']:.2f}") print(f"Risk Amount: ${position['risk_amount']:.2f}") - print(f"Risk Per Share: ${position['risk_per_share']:.2f}") + print(f"Stop Loss Price: ${position['stop_loss']:.2f}") except ValueError as e: print(f"Error: {e}") @@ -36,10 +45,10 @@ def main(): elif choice == "2": try: symbol = input("Enter symbol: ") - entry_price = float(input("Enter entry price: ")) + entry_price = float(input("Enter entry price: $")) shares = int(input("Enter number of shares: ")) - stop_loss = float(input("Enter stop loss: ")) - target_price = float(input("Enter target price: ")) + stop_loss = entry_price * 0.94 # Automatic 6% stop loss + target_price = float(input("Enter target price: $")) position = Position( symbol=symbol, diff --git a/src/trading/position_calculator.py b/src/trading/position_calculator.py index 563cf42..4965dee 100644 --- a/src/trading/position_calculator.py +++ b/src/trading/position_calculator.py @@ -1,26 +1,30 @@ class PositionCalculator: - def __init__(self, account_size: float, risk_percentage: float = 1.0): + def __init__(self, account_size: float, risk_percentage: float = 1.0, stop_loss_percentage: float = 6.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%) """ self.account_size = account_size self.risk_percentage = risk_percentage / 100.0 # Convert to decimal + self.stop_loss_percentage = stop_loss_percentage / 100.0 # Convert to decimal - def calculate_position_size(self, entry_price: float, stop_loss: float) -> dict: + def calculate_position_size(self, entry_price: float) -> dict: """ Calculate position size based on risk parameters Args: entry_price (float): Planned entry price - stop_loss (float): Stop loss price Returns: dict: Position details including shares and dollar amounts """ + # Calculate stop loss price (6% below entry) + stop_loss = entry_price * (1 - self.stop_loss_percentage) + # Calculate risk amount in dollars risk_amount = self.account_size * self.risk_percentage @@ -40,5 +44,6 @@ class PositionCalculator: "shares": shares, "position_value": position_value, "risk_amount": risk_amount, - "risk_per_share": risk_per_share + "risk_per_share": risk_per_share, + "stop_loss": stop_loss }