GarGerry commited on
Commit
615b087
·
verified ·
1 Parent(s): 1a50854

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -2
app.py CHANGED
@@ -6,6 +6,7 @@ import matplotlib.pyplot as plt
6
  import scipy.optimize as sco
7
 
8
  def get_stock_data(tickers, start, end):
 
9
  data = yf.download(tickers, start=start, end=end)
10
 
11
  if data.empty:
@@ -22,10 +23,12 @@ def get_stock_data(tickers, start, end):
22
  return None
23
 
24
  def calculate_returns(data):
 
25
  log_returns = np.log(data / data.shift(1))
26
  return log_returns.mean() * 252, log_returns.cov() * 252
27
 
28
  def optimize_portfolio(returns, cov_matrix):
 
29
  num_assets = len(returns)
30
 
31
  def sharpe_ratio(weights):
@@ -41,6 +44,7 @@ def optimize_portfolio(returns, cov_matrix):
41
  return result.x if result.success else None
42
 
43
  def generate_efficient_frontier(returns, cov_matrix, num_portfolios=5000):
 
44
  num_assets = len(returns)
45
  results = np.zeros((3, num_portfolios))
46
 
@@ -58,6 +62,11 @@ def generate_efficient_frontier(returns, cov_matrix, num_portfolios=5000):
58
 
59
  st.title("Analisis Portofolio Saham Optimal (Model Markowitz)")
60
 
 
 
 
 
 
61
  def get_recommended_stocks():
62
  return "KLBF.JK, SIDO.JK, KAEF.JK, TLKM.JK, UNVR.JK"
63
 
@@ -68,7 +77,7 @@ def validate_tickers(tickers):
68
  return False
69
  return True
70
 
71
- st.write("Rekomendasi Saham yang Bertahan Saat COVID-19:")
72
  st.write(get_recommended_stocks())
73
 
74
  tickers_list = st.text_input("Masukkan ticker saham", "KLBF.JK, SIDO.JK, KAEF.JK").split(", ")
@@ -95,6 +104,12 @@ if st.button("Analisis Portofolio"):
95
  ax.axis('equal')
96
  st.pyplot(fig)
97
 
 
 
 
 
 
 
98
  results = generate_efficient_frontier(mean_returns, cov_matrix)
99
 
100
  st.subheader("Efficient Frontier")
@@ -105,6 +120,11 @@ if st.button("Analisis Portofolio"):
105
  ax.set_title("Efficient Frontier")
106
  fig.colorbar(scatter, label="Sharpe Ratio")
107
  st.pyplot(fig)
 
 
 
 
 
 
108
  else:
109
  st.error("Optimasi portofolio gagal. Coba dengan saham yang berbeda.")
110
-
 
6
  import scipy.optimize as sco
7
 
8
  def get_stock_data(tickers, start, end):
9
+ """Mengambil data harga saham dari Yahoo Finance."""
10
  data = yf.download(tickers, start=start, end=end)
11
 
12
  if data.empty:
 
23
  return None
24
 
25
  def calculate_returns(data):
26
+ """Menghitung return logaritmik dan matriks kovarians saham."""
27
  log_returns = np.log(data / data.shift(1))
28
  return log_returns.mean() * 252, log_returns.cov() * 252
29
 
30
  def optimize_portfolio(returns, cov_matrix):
31
+ """Mengoptimalkan portofolio dengan memaksimalkan rasio Sharpe."""
32
  num_assets = len(returns)
33
 
34
  def sharpe_ratio(weights):
 
44
  return result.x if result.success else None
45
 
46
  def generate_efficient_frontier(returns, cov_matrix, num_portfolios=5000):
47
+ """Membuat simulasi Efficient Frontier untuk berbagai kombinasi portofolio."""
48
  num_assets = len(returns)
49
  results = np.zeros((3, num_portfolios))
50
 
 
62
 
63
  st.title("Analisis Portofolio Saham Optimal (Model Markowitz)")
64
 
65
+ st.write("""
66
+ Portofolio optimal adalah strategi investasi yang bertujuan untuk mencapai return maksimum dengan risiko minimal.
67
+ Model Markowitz digunakan untuk menentukan kombinasi saham terbaik dalam suatu portofolio.
68
+ """)
69
+
70
  def get_recommended_stocks():
71
  return "KLBF.JK, SIDO.JK, KAEF.JK, TLKM.JK, UNVR.JK"
72
 
 
77
  return False
78
  return True
79
 
80
+ st.subheader("Rekomendasi Saham Bertahan Saat COVID-19")
81
  st.write(get_recommended_stocks())
82
 
83
  tickers_list = st.text_input("Masukkan ticker saham", "KLBF.JK, SIDO.JK, KAEF.JK").split(", ")
 
104
  ax.axis('equal')
105
  st.pyplot(fig)
106
 
107
+ st.write("""
108
+ **Interpretasi:**
109
+ - Bobot dalam portofolio menunjukkan proporsi investasi pada masing-masing saham.
110
+ - Semakin besar bobot, semakin besar porsi dana yang dialokasikan ke saham tersebut.
111
+ """)
112
+
113
  results = generate_efficient_frontier(mean_returns, cov_matrix)
114
 
115
  st.subheader("Efficient Frontier")
 
120
  ax.set_title("Efficient Frontier")
121
  fig.colorbar(scatter, label="Sharpe Ratio")
122
  st.pyplot(fig)
123
+
124
+ st.write("""
125
+ **Penjelasan Efficient Frontier:**
126
+ - Grafik ini menunjukkan hubungan antara risiko dan return dari berbagai kombinasi portofolio.
127
+ - Portofolio yang berada di frontier efisien memberikan return terbaik untuk tingkat risiko tertentu.
128
+ """)
129
  else:
130
  st.error("Optimasi portofolio gagal. Coba dengan saham yang berbeda.")