Spaces:
Sleeping
Sleeping
File size: 2,438 Bytes
4464b01 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | from typing import Dict, Any, Literal
def calculate_risk_reward(entry_price: float, atr_value: float, risk_tolerance: str = "Moderate", direction: Literal["Long", "Short"] = "Long") -> Dict[str, Any]:
"""
Deterministic Python script that calculates exact Stop-Loss and Take-Profit targets
based on Average True Range (ATR) and user risk tolerance for both Long and Short positions.
"""
# Multipliers for Stop-Loss (Risk) and Take-Profit (Reward)
if risk_tolerance not in ["Conservative", "Moderate", "Aggressive"]:
risk_tolerance = "Moderate"
if risk_tolerance == "Conservative":
atr_multiplier = 1.0 # Tighter Stop
reward_multiplier = 3.0 # Require higher R:R
elif risk_tolerance == "Aggressive":
atr_multiplier = 2.0 # Wider Stop
reward_multiplier = 1.5 # Lower R:R threshold
else: # Moderate
atr_multiplier = 1.5
reward_multiplier = 2.0
risk_amount = atr_value * atr_multiplier
reward_amount = risk_amount * reward_multiplier
if direction == "Long":
stop_loss_price = round(entry_price - risk_amount, 2)
take_profit_price = round(entry_price + reward_amount, 2)
actual_rr = round((take_profit_price - entry_price) / (entry_price - stop_loss_price), 1) if entry_price > stop_loss_price else 0
actionable_signal = f"LONG: Stop-Loss at ${stop_loss_price}. Target at ${take_profit_price}. R:R is {actual_rr}:1."
else: # Short
stop_loss_price = round(entry_price + risk_amount, 2)
take_profit_price = round(entry_price - reward_amount, 2)
actual_rr = round((entry_price - take_profit_price) / (stop_loss_price - entry_price), 1) if stop_loss_price > entry_price else 0
actionable_signal = f"SHORT: Stop-Loss at ${stop_loss_price}. Target at ${take_profit_price}. R:R is {actual_rr}:1."
return {
"direction": direction,
"entry_price": entry_price,
"stop_loss_price": stop_loss_price,
"take_profit_price": take_profit_price,
"risk_tolerance": risk_tolerance,
"risk_reward_ratio": f"{actual_rr}:1",
"actionable_signal": actionable_signal
}
if __name__ == "__main__":
# Test
print("Long Test:", calculate_risk_reward(135.0, 5.5, "Moderate", "Long"))
print("Short Test:", calculate_risk_reward(135.0, 5.5, "Moderate", "Short"))
|