fudii0921 commited on
Commit
917d353
·
verified ·
1 Parent(s): 34c63b4

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +251 -0
app.py ADDED
@@ -0,0 +1,251 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import mysql.connector
2
+ import os
3
+ from dotenv import load_dotenv
4
+ import gradio as gr
5
+ import cohere
6
+
7
+ # Load environment variables
8
+ load_dotenv(verbose=True)
9
+
10
+ # Establish database connection
11
+ conn = mysql.connector.connect(
12
+ host=os.environ.get("HOST"),
13
+ user=os.environ.get("USER_NAME"),
14
+ password=os.environ.get("PASSWORD"),
15
+ port=os.environ.get("PORT"),
16
+ database=os.environ.get("DB"),
17
+ ssl_disabled=True
18
+ )
19
+
20
+ cursor = conn.cursor(dictionary=True)
21
+
22
+ # Function to fetch top high performers
23
+ def get_top_high_performers(html: str):
24
+ try:
25
+ with cursor:
26
+ # Query to fetch top performers based on calculated score
27
+ query = """
28
+ SELECT manager_name, annual_return, risk_adjusted_return, alpha, volatility, max_drawdown, customer_feedback, behavior_patterns,
29
+ (annual_return + risk_adjusted_return + alpha - volatility - max_drawdown) AS score
30
+ FROM fm_kpis
31
+ WHERE annual_return >= 10
32
+ AND risk_adjusted_return >= 5
33
+ AND alpha >= 1
34
+ AND volatility <= 20
35
+ AND max_drawdown <= 10
36
+ ORDER BY score DESC
37
+ LIMIT 5
38
+ """
39
+ cursor.execute(query)
40
+ results = cursor.fetchall()
41
+
42
+ # Format the results for Gradio output
43
+ formatted_results = [
44
+ f"{i+1}. Manager: {row['manager_name']}, Score: {row['score']:.2f}\n"
45
+ f"Customer Feedback: {row['customer_feedback']}\n"
46
+ f"Behavior Patterns: {row['behavior_patterns']}\n"
47
+ f"Annual Return: {row['annual_return']}%, Risk-Adjusted Return: {row['risk_adjusted_return']}%, "
48
+ f"Alpha: {row['alpha']}, Volatility: {row['volatility']}%, Max Drawdown: {row['max_drawdown']}%\n"
49
+ for i, row in enumerate(results)
50
+ ]
51
+
52
+ tmp = "\n\n".join(formatted_results)
53
+
54
+ co = cohere.ClientV2(api_key=os.environ.get("COHERE_API_KEY"))
55
+ res = co.chat(
56
+ model="command-a-03-2025",
57
+ messages=[
58
+ {
59
+ "role": "user",
60
+ "content": tmp+"はパフォーマンスの高いファンド・マネージャのデータです。このデータを参考にしてファンド・マネージャの育成ガイドラインを策定してください。 必ず、日本語で答えてください。",
61
+ }
62
+ ],
63
+ )
64
+
65
+ final = res.message.content[0].text
66
+
67
+ return "\n\n".join(formatted_results),final
68
+
69
+ except Exception as e:
70
+ return f"Error occurred: {e}"
71
+
72
+ # Define Gradio interface
73
+ interface = gr.Interface(
74
+ fn=get_top_high_performers,
75
+ inputs=[gr.HTML("""<strong>優秀なファンドマネージャーのKPI(重要業績評価指標)</strong>は、そのパフォーマンスを測定し、投資家の期待に応えるための指標として活用されます。以下に、具体的なKPIについて詳しく説明します:<br /><br />
76
+
77
+ 1. ポートフォリオのリターン
78
+ 年間リターン: ファンドのパフォーマンスを年間でどれだけ向上させたかを評価します。
79
+
80
+ リスク調整後リターン(シャープレシオなど): リスクを取った分に対してどれだけ効率的にリターンを生んだか。<br />
81
+
82
+ 2. ベンチマークとの比較
83
+ ベンチマークインデックス(例: S&P500やTOPIX)を超えたパフォーマンスがあるかどうか。
84
+
85
+ アルファ: ベンチマークを上回る超過リターンを測定。<br />
86
+
87
+ 3. リスク管理
88
+ ボラティリティ: ポートフォリオの価格変動の安定性を測定。
89
+
90
+ 最大ドローダウン: ポートフォリオがどれだけ急落したかを把握。<br />
91
+
92
+ 4. 資金流入と流出
93
+ 資金流入量: 新規投資家から集めた資金額。
94
+
95
+ 資金流出量: 既存投資家の資金引き上げ率。<br />
96
+
97
+ 5. 費用対効果
98
+ 経費率: ファンドの運営にかかる総費用が投資家に与える影響を分析。<br />
99
+
100
+ 6. ポートフォリオの構成・分散
101
+ アセットアロケーション: 投資先の地域やセクターの多様性。
102
+
103
+ 分散投資: リスクを軽減するための適切な銘柄選択。<br />
104
+
105
+ 7. 投資家とのコミュニケーション
106
+ 投資家に対する透明性と情報提供の頻度。<br />
107
+
108
+ 8. 定期的なレポートや説明会の実施。<br />
109
+
110
+ これらのKPIを総合的に分析し、運用手腕を評価することで、優秀なファンドマネージャーの力量が分かります。
111
+
112
+ <br /><br /><strong>High Performer</strong><br />
113
+ High Performer 抽出の基準例<br />
114
+ ✨年間リターンが10%以上<br />
115
+ ✨リスク調整後リターンが5%以上<br />
116
+ ✨アルファが1%以上<br />
117
+ ✨ボラティリティが20%以下<br />
118
+ ✨最大ドローダウンが10%以下
119
+ """)],
120
+ outputs=[gr.Textbox(label="結果",info="Show records where the annual return is 10% or more, the risk-adjusted return is at least 5%, the alpha (excess return) is greater than or equal to 1, the volatility is no more than 20%, and the maximum drawdown is 10% or less. Then, sort these records in score descending order.\n年間リターンが10%以上、リスク調整後リターンが5%以上、アルファ(超過リターン)が1以上であり、ボラティリティが20%以下、最大ドローダウンが10%以下のレコードを選択します。その後、計算されたスコアを基準に降順で並び替えます。"),gr.Textbox(label="教育ガイドライン",info="""
121
+ High Performerとは、優れた業績を上げるファンドマネージャーのことを指します!!
122
+ ✨ 特に、以下のような基準を満たしていることが重要です:
123
+ 高いリターン:年間リターンが安定して高く、投資家に大きな利益をもたらします。
124
+ リスク管理能力:ボラティリティ(価格変動)や最大ドローダウンが低く、リスクを抑えながら運用しています。
125
+ ベンチマーク超過リターン:市場の指標(例: S&P500など)を上回るアルファ(超過リターン)を達成。
126
+ 顧客との信頼関係:顧客からのフィードバックが良好で、透明性や適切なコミュニケーションを維持。
127
+ 行動習慣と戦略:継続的な学習や市場の動向を分析するなど、優れた投資戦略を展開。
128
+
129
+ 例えば、あるHigh Performerの行動として、「地政学的イベントを監視して意思決定を行う」や「歴史的トレンドに基づいた投資方針を確立する」などがあります。💡
130
+ このような特徴を持つファンドマネージャーは投資家から信頼され、資金運用の成功を導く鍵となる存在です。
131
+ score = (annual_return + risk_adjusted_return + alpha - volatility - max_drawdown)""")],
132
+ title="Top High Performers",
133
+ submit_btn="実行",
134
+ clear_btn="クリア",
135
+ description="""Displays the top 5 high-performing fund managers based on calculated score.\n計算されたスコアに基づいて、パフォーマンスの高いファンドマネージャー上位5名を表示します。"""
136
+ )
137
+
138
+ # Add a sidebar for additional context or features
139
+ with gr.Blocks() as app:
140
+ with gr.Row():
141
+ #with gr.Column(scale=4):
142
+ with gr.Sidebar(open=False):
143
+ gr.HTML("""<!DOCTYPE html>
144
+ <html lang="ja">
145
+ <head>
146
+ <meta charset="UTF-8">
147
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
148
+ <title>投資指標の説明</title>
149
+ <style>
150
+ body {
151
+ font-family: Arial, sans-serif;
152
+ line-height: 1.6;
153
+ margin: 20px;
154
+ }
155
+ h1, h2 {
156
+ color: #2E86C1;
157
+ }
158
+ p {
159
+ margin: 10px 0;
160
+ }
161
+ ul {
162
+ margin: 10px 20px;
163
+ }
164
+ li {
165
+ margin-bottom: 5px;
166
+ }
167
+ </style>
168
+ </head>
169
+ <body>
170
+ <h1>投資指標の概要</h1>
171
+ <h2>ドローダウン (Drawdown)</h2>
172
+ <p>ドローダウンは、資産価値が最大から最小までどれだけ減少したかを示す指標です。投資のリスクを評価する重要な指標であり、ドローダウンが小さいほど安定した運用とみなされます。</p>
173
+ <ul>
174
+ <li>例: 資産価値が1,000万円から800万円に下がった場合、ドローダウン率は20%。</li>
175
+ <li>「最悪の場合どれだけの損失を出す可能性があるか」を示します。</li>
176
+ </ul>
177
+
178
+ <h2>アルファ (Alpha)</h2>
179
+ <p>アルファは市場全体(ベンチマーク)をどれだけ上回ったかを示す指標で、ファンドマネージャーの運用手腕を評価するのに使われます。</p>
180
+ <ul>
181
+ <li>アルファ = ポートフォリオのリターン - [無リスク利率 + ベンチマークリターン × ベータ値]</li>
182
+ <li>アルファがプラスの場合、運用が市場を上回っていることを意味します。</li>
183
+ </ul>
184
+
185
+ <h2>年間リターン (Annual Return)</h2>
186
+ <p>年間リターンは、1年間でどれだけの利益を生み出したかを示す指標です。</p>
187
+ <ul>
188
+ <li>計算式: 年間リターン (%) = [(期末の資産価値 - 期初の資産価値) / 期初の資産価値] × 100</li>
189
+ <li>投資パフォーマンスを評価する際の基本的な指標。</li>
190
+ </ul>
191
+
192
+ <h2>リスク調整後リターン (Risk-Adjusted Return)</h2>
193
+ <p>リスク調整後リターンは、リスクを考慮してリターンの質を評価する指標です。主な指標にはシャープレシオとトレイナーレシオがあります。</p>
194
+ <ul>
195
+ <li>シャープレシオ: ポートフォリオのリターン − 無リスク資産のリターン ÷ ポートフォリオの標準偏差</li>
196
+ <li>トレイナーレシオ: ポートフォリオのリターン − 無リスク資産のリターン ÷ ベータ値</li>
197
+ </ul>
198
+
199
+ <h2>ボラティリティ (Volatility)</h2>
200
+ <p>ボラティリティは資産の価格変動の大きさを表す指標で、リスクの尺度として使われます。</p>
201
+ <ul>
202
+ <li>価格の標準偏差を基に計算されます。</li>
203
+ <li>ボラティリティが高いほどリスクが高く、低いほど安定していると評価されます。</li>
204
+ </ul>
205
+ <ul>
206
+ <li>S&P500とTopixの計算方法</li>
207
+ <li>S&P500は、時価総額加重平均指数を使用しています。これは、大企業がインデックスに与える影響が大きくなる仕組みです。
208
+
209
+ 計算式:
210
+
211
+ S&P500 = frac{sum text{各企業の時価総額}}{text{基準時の時価総額}} times 100
212
+ 各企業の時価総額は「株価 × 発行済み株式数」で求められます。
213
+
214
+ 基準時の時価総額は固定された値で、比較を容易にします。
215
+
216
+ 特徴:
217
+
218
+ 米国のトップ500社が対象。
219
+
220
+ 大企業の動向がインデックスに強く影響。
221
+
222
+ TOPIX(東京証券取引所株価指数)の計算方法
223
+ TOPIXも同様に、時価総額加重平均指数を使用しますが、日本市場全体を対象としています。
224
+
225
+ 計算式:
226
+
227
+
228
+ Topix = ∑各企業の時価総額/基準時の時価総額×100
229
+ 各企業の時価総額 = 株価 x 発行済み株式数。
230
+
231
+ 基準時の時価総額は1968年の市場時価総額。
232
+
233
+ 特徴:
234
+
235
+ 東京証券取引所に上場しているすべての銘柄が対象。
236
+
237
+ 市場全体の動きを反映。
238
+
239
+ 両インデックスとも時価総額加重方式を採用し、大企業が与える影響が大きいですが、S&P500は米国市場、TOPIXは日本市場を示す指標として利用されます。
240
+ </ul>
241
+ </body>
242
+ </html>
243
+ """)
244
+ with gr.Column(scale=8):
245
+ interface.render()
246
+
247
+ # Launch the app
248
+ app.launch()
249
+
250
+ # Launch Gradio app
251
+ #interface.launch()