File size: 12,858 Bytes
917d353
 
 
 
 
7fe7872
917d353
 
 
 
 
8dfeda7
 
917d353
9c8318f
05f771f
9c8318f
 
 
 
 
 
 
 
 
917d353
9c8318f
917d353
9c8318f
17b5fa7
 
 
 
 
 
 
 
 
917d353
9c8318f
dc8d324
9c8318f
 
917d353
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8dfeda7
1c2f514
917d353
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
import mysql.connector
import os
from dotenv import load_dotenv
import gradio as gr
import cohere
from decimal import Decimal

# Load environment variables
load_dotenv(verbose=True)

# Function to fetch top high performers
#def get_top_high_performers(html: str):
def get_top_high_performers(html: str, limit: str):

    results = [{'manager_name': '加藤 圭介', 'annual_return': Decimal('11.40'), 'risk_adjusted_return': Decimal('6.40'), 'alpha': Decimal('1.60'), 'volatility': Decimal('13.50'), 'max_drawdown': Decimal('8.70'), 'customer_feedback': '信頼性の高さ', 'behavior_patterns': '計画性のある進行', 'score': Decimal('-2.80')}, {'manager_name': '鈴木 花子', 'annual_return': Decimal('13.20'), 'risk_adjusted_return': Decimal('7.50'), 'alpha': Decimal('1.66'), 'volatility': Decimal('18.80'), 'max_drawdown': Decimal('9.00'), 'customer_feedback': '積極的な姿勢', 'behavior_patterns': 'データドリブンアプローチ', 'score': Decimal('-5.44')}, {'manager_name': '中村 亮介', 'annual_return': Decimal('12.20'), 'risk_adjusted_return': Decimal('5.80'), 'alpha': Decimal('1.50'), 'volatility': Decimal('18.40'), 'max_drawdown': Decimal('8.10'), 'customer_feedback': '高度なプレゼン力', 'behavior_patterns': '結果志向の行動', 'score': Decimal('-7.00')}, {'manager_name': '田中 美咲', 'annual_return': Decimal('12.30'), 'risk_adjusted_return': Decimal('5.90'), 'alpha': Decimal('1.40'), 'volatility': Decimal('18.30'), 'max_drawdown': Decimal('9.10'), 'customer_feedback': 'ポジティブな思考', 'behavior_patterns': '戦略的な計画性', 'score': Decimal('-7.80')}, {'manager_name': '小林 彩香', 'annual_return': Decimal('11.90'), 'risk_adjusted_return': Decimal('6.10'), 'alpha': Decimal('1.20'), 'volatility': Decimal('18.80'), 'max_drawdown': Decimal('8.50'), 'customer_feedback': '優れたチームリーダー', 'behavior_patterns': '創造的な提案力', 'score': Decimal('-8.10')}]

    # Format the results for Gradio output
    formatted_results = [
        f"{i+1}. Manager: {row['manager_name']}, Score: {row['score']:.2f}\n"
        f"Customer Feedback: {row['customer_feedback']}\n"
        f"Behavior Patterns: {row['behavior_patterns']}\n"
        f"Annual Return: {row['annual_return']}%, Risk-Adjusted Return: {row['risk_adjusted_return']}%, "
        f"Alpha: {row['alpha']}, Volatility: {row['volatility']}%, Max Drawdown: {row['max_drawdown']}%\n"
        for i, row in enumerate(results)
    ]

    tmp = "\n\n".join(formatted_results)

    co = cohere.ClientV2(api_key=os.environ.get("COHERE_API_KEY"))
    res = co.chat(
        model="command-a-03-2025",
        messages=[
            {
                "role": "user",
                "content": tmp+"はパフォーマンスの高いファンド・マネージャのデータです。このデータを参考にしてファンド・マネージャの育成ガイドラインを策定してください。 必ず、日本語で答えてください。",
            }
        ],
    )
            
    final = res.message.content[0].text

    return "\n\n".join(formatted_results),final
    
# Define Gradio interface
interface = gr.Interface(
    fn=get_top_high_performers,
    inputs=[gr.HTML("""<strong>優秀なファンドマネージャーのKPI(重要業績評価指標)</strong>は、そのパフォーマンスを測定し、投資家の期待に応えるための指標として活用されます。以下に、具体的なKPIについて詳しく説明します:<br /><br />

    1. ポートフォリオのリターン
    年間リターン: ファンドのパフォーマンスを年間でどれだけ向上させたかを評価します。

    リスク調整後リターン(シャープレシオなど): リスクを取った分に対してどれだけ効率的にリターンを生んだか。<br />

    2. ベンチマークとの比較
    ベンチマークインデックス(例: S&P500やTOPIX)を超えたパフォーマンスがあるかどうか。

    アルファ: ベンチマークを上回る超過リターンを測定。<br />

    3. リスク管理
    ボラティリティ: ポートフォリオの価格変動の安定性を測定。
    
    最大ドローダウン: ポートフォリオがどれだけ急落したかを把握。<br />

    4. 資金流入と流出
    資金流入量: 新規投資家から集めた資金額。

    資金流出量: 既存投資家の資金引き上げ率。<br />

    5. 費用対効果
    経費率: ファンドの運営にかかる総費用が投資家に与える影響を分析。<br />

    6. ポートフォリオの構成・分散
    アセットアロケーション: 投資先の地域やセクターの多様性。

    分散投資: リスクを軽減するための適切な銘柄選択。<br />

    7. 投資家とのコミュニケーション
    投資家に対する透明性と情報提供の頻度。<br />

    8. 定期的なレポートや説明会の実施。<br />

    これらのKPIを総合的に分析し、運用手腕を評価することで、優秀なファンドマネージャーの力量が分かります。
    
    <br /><br /><strong>High Performer</strong><br />
    High Performer 抽出の基準例<br />
    ✨年間リターンが10%以上<br />
    ✨リスク調整後リターンが5%以上<br />
    ✨アルファが1%以上<br />
    ✨ボラティリティが20%以下<br />
    ✨最大ドローダウンが10%以下
    """),gr.Textbox(label="件数",info="",value="5")],
    outputs=[gr.Textbox(label="結果",show_copy_button=True,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="""
    High Performerとは、優れた業績を上げるファンドマネージャーのことを指します!!
    ✨ 特に、以下のような基準を満たしていることが重要です:
    高いリターン:年間リターンが安定して高く、投資家に大きな利益をもたらします。
    リスク管理能力:ボラティリティ(価格変動)や最大ドローダウンが低く、リスクを抑えながら運用しています。
    ベンチマーク超過リターン:市場の指標(例: S&P500など)を上回るアルファ(超過リターン)を達成。
    顧客との信頼関係:顧客からのフィードバックが良好で、透明性や適切なコミュニケーションを維持。
    行動習慣と戦略:継続的な学習や市場の動向を分析するなど、優れた投資戦略を展開。

    例えば、あるHigh Performerの行動として、「地政学的イベントを監視して意思決定を行う」や「歴史的トレンドに基づいた投資方針を確立する」などがあります。💡
    このような特徴を持つファンドマネージャーは投資家から信頼され、資金運用の成功を導く鍵となる存在です。
    score = (annual_return + risk_adjusted_return + alpha - volatility - max_drawdown)""")],
    title="Top High Performers",
    submit_btn="実行",
    clear_btn="クリア",
    description="""Displays the top 5 high-performing fund managers based on calculated score.\n計算されたスコアに基づいて、パフォーマンスの高いファンドマネージャー上位5名を表示します。"""
)

# Add a sidebar for additional context or features
with gr.Blocks() as app:
    with gr.Row():
        #with gr.Column(scale=4):
        with gr.Sidebar(open=False):
            gr.HTML("""<!DOCTYPE html>
    <html lang="ja">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>投資指標の説明</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            line-height: 1.6;
            margin: 20px;
        }
        h1, h2 {
            color: #2E86C1;
        }
        p {
            margin: 10px 0;
        }
        ul {
            margin: 10px 20px;
        }
        li {
            margin-bottom: 5px;
        }
    </style>
    </head>
    <body>
    <h1>投資指標の概要</h1>
    <h2>ドローダウン (Drawdown)</h2>
    <p>ドローダウンは、資産価値が最大から最小までどれだけ減少したかを示す指標です。投資のリスクを評価する重要な指標であり、ドローダウンが小さいほど安定した運用とみなされます。</p>
    <ul>
        <li>例: 資産価値が1,000万円から800万円に下がった場合、ドローダウン率は20%。</li>
        <li>「最悪の場合どれだけの損失を出す可能性があるか」を示します。</li>
    </ul>

    <h2>アルファ (Alpha)</h2>
    <p>アルファは市場全体(ベンチマーク)をどれだけ上回ったかを示す指標で、ファンドマネージャーの運用手腕を評価するのに使われます。</p>
    <ul>
        <li>アルファ = ポートフォリオのリターン - [無リスク利率 + ベンチマークリターン × ベータ値]</li>
        <li>アルファがプラスの場合、運用が市場を上回っていることを意味します。</li>
    </ul>

    <h2>年間リターン (Annual Return)</h2>
    <p>年間リターンは、1年間でどれだけの利益を生み出したかを示す指標です。</p>
    <ul>
        <li>計算式: 年間リターン (%) = [(期末の資産価値 - 期初の資産価値) / 期初の資産価値] × 100</li>
        <li>投資パフォーマンスを評価する際の基本的な指標。</li>
    </ul>

    <h2>リスク調整後リターン (Risk-Adjusted Return)</h2>
    <p>リスク調整後リターンは、リスクを考慮してリターンの質を評価する指標です。主な指標にはシャープレシオとトレイナーレシオがあります。</p>
    <ul>
        <li>シャープレシオ: ポートフォリオのリターン − 無リスク資産のリターン ÷ ポートフォリオの標準偏差</li>
        <li>トレイナーレシオ: ポートフォリオのリターン − 無リスク資産のリターン ÷ ベータ値</li>
    </ul>

    <h2>ボラティリティ (Volatility)</h2>
    <p>ボラティリティは資産の価格変動の大きさを表す指標で、リスクの尺度として使われます。</p>
    <ul>
        <li>価格の標準偏差を基に計算されます。</li>
        <li>ボラティリティが高いほどリスクが高く、低いほど安定していると評価されます。</li>
    </ul>
    <ul>
        <li>S&P500とTopixの計算方法</li>
        <li>S&P500は、時価総額加重平均指数を使用しています。これは、大企業がインデックスに与える影響が大きくなる仕組みです。

        計算式:

        S&P500 = frac{sum text{各企業の時価総額}}{text{基準時の時価総額}} times 100
        各企業の時価総額は「株価 × 発行済み株式数」で求められます。

        基準時の時価総額は固定された値で、比較を容易にします。

        特徴:

        米国のトップ500社が対象。

        大企業の動向がインデックスに強く影響。

        TOPIX(東京証券取引所株価指数)の計算方法
        TOPIXも同様に、時価総額加重平均指数を使用しますが、日本市場全体を対象としています。

        計算式:


        Topix = ∑各企業の時価総額/基準時の時価総額×100
        各企業の時価総額 = 株価 x 発行済み株式数。

        基準時の時価総額は1968年の市場時価総額。

        特徴:

        東京証券取引所に上場しているすべての銘柄が対象。

        市場全体の動きを反映。

        両インデックスとも時価総額加重方式を採用し、大企業が与える影響が大きいですが、S&P500は米国市場、TOPIXは日本市場を示す指標として利用されます。
    </ul>
    </body>
    </html>
""")
        with gr.Column(scale=8):
            interface.render()

# Launch the app
app.launch()

# Launch Gradio app
#interface.launch()