File size: 4,169 Bytes
18ee127
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import gradio as gr

# Define stocks with their events and impacts
stocks = {
    "AAPL": {
        "events": [
            {"name": "New iPhone release", "impact_if_happens": 0.10, "impact_if_not": -0.05},
            {"name": "Positive earnings report", "impact_if_happens": 0.08, "impact_if_not": -0.03},
        ]
    },
    "TSLA": {
        "events": [
            {"name": "Achieves production target", "impact_if_happens": 0.15, "impact_if_not": -0.10},
            {"name": "New model announcement", "impact_if_happens": 0.12, "impact_if_not": -0.02},
        ]
    },
    "GOOG": {
        "events": [
            {"name": "AI breakthrough", "impact_if_happens": 0.20, "impact_if_not": -0.05},
            {"name": "Regulatory approval", "impact_if_happens": 0.05, "impact_if_not": -0.15},
        ]
    },
}

def calculate_portfolio(selected_stocks, total_investment, 
                        aapl_event1_prob, aapl_event2_prob,
                        tsla_event1_prob, tsla_event2_prob,
                        goog_event1_prob, goog_event2_prob):
    # Check if any stocks are selected
    if not selected_stocks:
        return "Please select at least one stock."
    
    # Map user-input probabilities to stocks (convert from percentage to decimal)
    probs = {
        "AAPL": [aapl_event1_prob / 100, aapl_event2_prob / 100],
        "TSLA": [tsla_event1_prob / 100, tsla_event2_prob / 100],
        "GOOG": [goog_event1_prob / 100, goog_event2_prob / 100],
    }
    
    # Calculate expected return for each selected stock
    expected_returns = {}
    for stock in selected_stocks:
        events = stocks[stock]["events"]
        exp_return = 0
        for i, event in enumerate(events):
            p = probs[stock][i]
            impact_happens = event["impact_if_happens"]
            impact_not = event["impact_if_not"]
            exp_return += p * impact_happens + (1 - p) * impact_not
        expected_returns[stock] = exp_return
    
    # Calculate portfolio metrics assuming equal investment
    num_stocks = len(selected_stocks)
    investment_per_stock = total_investment / num_stocks
    portfolio_expected_return = sum(expected_returns[stock] for stock in selected_stocks) / num_stocks
    expected_future_value = sum(investment_per_stock * (1 + expected_returns[stock]) for stock in selected_stocks)
    
    # Format the output
    output = "Expected Returns:\n"
    for stock in selected_stocks:
        output += f"{stock}: {expected_returns[stock]*100:.2f}%\n"
    output += f"\nPortfolio Expected Return: {portfolio_expected_return*100:.2f}%\n"
    output += f"Expected Future Value: ${expected_future_value:.2f}"
    return output

# Define Gradio inputs
selected_stocks = gr.CheckboxGroup(choices=["AAPL", "TSLA", "GOOG"], label="Select Stocks")
total_investment = gr.Number(label="Total Investment ($)", value=10000)

# Probability sliders for each event
aapl_event1_prob = gr.Slider(0, 100, label="AAPL: Probability of New iPhone release (%)", value=50)
aapl_event2_prob = gr.Slider(0, 100, label="AAPL: Probability of Positive earnings report (%)", value=50)
tsla_event1_prob = gr.Slider(0, 100, label="TSLA: Probability of Achieving production target (%)", value=50)
tsla_event2_prob = gr.Slider(0, 100, label="TSLA: Probability of New model announcement (%)", value=50)
goog_event1_prob = gr.Slider(0, 100, label="GOOG: Probability of AI breakthrough (%)", value=50)
goog_event2_prob = gr.Slider(0, 100, label="GOOG: Probability of Regulatory approval (%)", value=50)

# Define output
output = gr.Textbox(label="Results")

# Create Gradio interface
iface = gr.Interface(
    fn=calculate_portfolio,
    inputs=[selected_stocks, total_investment, 
            aapl_event1_prob, aapl_event2_prob,
            tsla_event1_prob, tsla_event2_prob,
            goog_event1_prob, goog_event2_prob],
    outputs=output,
    title="Investment Decision Analysis POC",
    description="Select stocks and adjust event probabilities to analyze expected returns based on simulated prediction market data. Event impacts are predefined. Click 'Submit' to see results."
)

# Launch the app
if __name__ == "__main__":
    iface.launch()