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"))