取引ルールおよび値決定の仕組みについて詳細に説明します。
📌 エージェントの基本設定
取引を実行する際には、以下のルールに従って AIエージェント(仮想投資家) が自動的に取引判断を行っています。
現在のプログラム設定では、エージェントは以下の構成になっています:
- エージェント数: 10人
- 初期資金: 各エージェント 5,000万円(合計 5億円)
- 投資スタイル: 各エージェントに以下の投資戦略を割り当て
- 「保守派」エージェント(安全重視)
- 「中立派」エージェント(バランス型)
- 「積極派」エージェント(リスク許容型)
現在の割り当ては以下の通りです:
エージェント名 | 投資戦略 |
---|---|
エージェント_1 | 保守派 |
エージェント_2 | 中立派 |
エージェント_3 | 積極派 |
エージェント_4 | 保守派 |
エージェント_5 | 中立派 |
エージェント_6 | 積極派 |
エージェント_7 | 保守派 |
エージェント_8 | 中立派 |
エージェント_9 | 積極派 |
エージェント_10 | 中立派 |
📌 取引の意思決定プロセス
各エージェントの取引(売買)判断は以下の流れで決定されます。
① 市場分析(GPT-4oによる情勢分析)
- GPT-4oに直近のWEIスコアを提示し、市場のトレンドや、特に投資すべきセクターを選定。
- 市場分析結果をもとに、各エージェントごとに投資対象企業を最大30社選定。
② 将来価格予測(先物的価値の予測)
選定された各企業に対してGPTを用いて将来の株価(またはWEIスコアベースの先物的価値)を予測します。
- 予測値は現在価格に対して、上下約 ±2% のランダム性を加えたものになります。
③ エージェントごとの閾値判断(期待収益率による売買決定)
各エージェントは予測に基づく期待収益率 (expected_return
) を算出します。 \text{expected_return} = \frac{\text{予測価格} – \text{現在価格}}{\text{現在価格}}
各投資スタイルで異なる 売買閾値(threshold) を設定:
投資スタイル | 売買閾値 |
---|---|
保守派 | ±1.5% |
中立派 | ±3.0% |
積極派 | ±5.0% |
期待収益率が閾値を超えるか下回るかで以下のように取引判断を行います:
- expected_return ≥ threshold の場合:「買い (Buy)」
- expected_return ≤ -threshold の場合:「売り (Sell)」
- 上記の閾値の範囲内の場合:「保留 (Hold)」
📌 注文量(取引金額)の決定方法
注文量は以下のルールで決定します。
- 「買い」判断の場合:
- 現在のエージェントの現金残高のうち5%を、投資対象企業の現在価格で割り、小数点以下を切り捨てて整数で購入。
- 購入後は、購入金額分の現金残高が減少。
- 「売り」判断の場合:
- エージェントが現在保有している株数の全数を売却。
- 売却後は、その売却額が現金残高に加算される。
- 「保留」の場合:
- 取引なし。残高・株数とも変化しない。
📌 取引記録のDB保存(詳細データ)
各取引はデータベースに以下の情報で記録されます。
- 日付 (
trade_date
) - エージェントID (
agent_id
) - エージェント名 (
agent_name
) - 企業名 (
company_name
) - 取引種別 (
trade_type
: 買い/売り/保留) - 取引量 (
trade_amount
) - 取引時価格 (
trade_price
) - 取引総額 (
total_value
) - 期待収益率 (
trade_decision_score
)
例:
trade_date | agent_id | agent_name | company_name | trade_type | trade_amount | trade_price | total_value | trade_decision_score |
---|---|---|---|---|---|---|---|---|
2025-07-27 | 1 | エージェント_1 | 東川通信株式会社 | Buy | 1000 | 2500 | 2,500,000 | 0.024 |
📌 株価(仮想取引値)の更新方法
仮想取引値(市場価格)は以下のように更新されます:
- エージェントの取引行動(特に買いや売りの集中度)に応じて市場価格(WEIベースの株価に相当)を調整。
- 買いが集中すると価格は上昇、売りが集中すると下落するシンプルな仮想市場メカニズムを適用。
- WEIスコアに基づく実際の評価値と比較して、乖離を可視化し、市場の過熱感や冷却感を把握。
📌 値決定フローのまとめ(全体像)
エージェントの取引判断から価格更新までをまとめると、以下のフローになります。
scssコピーする編集する市場分析 (GPT-4o)
↓
企業選定 (各エージェント最大30社)
↓
各企業の将来予測価格生成 (GPT+ランダム性)
↓
期待収益率計算 (expected_return)
↓
売買閾値による判断 (買い/売り/保留)
↓
注文量決定(残高5%を基準)
↓
取引実行、ポートフォリオ更新
↓
取引記録をデータベースに記録
↓
取引集中度に応じて仮想価格更新
📌 まとめと今後の改善ポイント
現在のルールは比較的シンプルで実行しやすい設定です。
今後の改善点としては以下が挙げられます:
- 市場の流動性や取引集中度に応じた価格変動幅の調整精度の向上
- 期待収益率だけでなく、リスク許容度に基づくポートフォリオ分散戦略
- 複数回取引を繰り返した結果の資金配分や収益評価に基づくエージェントの自動チューニング(PDCA)
これらを通じて、より現実に即したリアルな市場シミュレーションを目指します。
実際の市場同様、現在の設定とロジックではエージェントが「取引をずっと行わない」可能性も理論的に起こり得ます。具体的には、以下のケースが考えられます。
📌 取引が起きない可能性の原因とその影響
① 予測価格と閾値の関係
- 現在の取引ロジックでは、「期待収益率(expected_return)」がエージェントごとの売買閾値に達しないと取引(売買)が行われません。
- 例えば、各エージェントの閾値は以下のようになっています。 投資スタイル閾値保守派±1.5%中立派±3.0%積極派±5.0%
- 問題点:
- 市場が安定し、予測価格の変動が小さくなった場合(例えば±1%未満)、全エージェントが「取引保留(Hold)」の判断を下し続ける可能性があります。
② ランダム性と予測価格の安定性
- 現在の予測価格生成ロジックでは、GPTで予測した価格に±2%のランダム性を加えています。
- ただし、GPTの予測値自体が安定して市場価格に近いと、±2%のランダム性があっても、エージェントの閾値に到達しない可能性があり、「取引が発生しない状態」が持続します。
📌 取引が発生しない状況を回避するための提案
以下のような方法を導入すると、取引がずっと行われない事態を防げます。
✔️ 方法1: 閾値を動的に調整する
- エージェントが連続して取引を行わない場合、徐々に閾値を下げる。
- 例: 3日連続で取引がなければ閾値を0.5%ずつ引き下げる。
- 一定期間で取引が発生すれば閾値を元に戻す。
✔️ 方法2: エージェントごとの強制定期取引ルールの追加
- 各エージェントに対し、一定期間(例えば週に1回)は最低限の取引(ポートフォリオ調整)を行うように設定。
- 市場との乖離が少なくても、定期的に取引を強制実行し、市場に動きを与える。
✔️ 方法3: ランダム性をさらに強化
- ±2%の範囲を±3〜5%に拡大することで、予測価格により大きな揺れを生じさせ、エージェントの閾値を超えやすくする。
📌 現状の仕組みでの実際の頻度と状況は?
現在の設定では以下の状況が考えられます。
- 短期的には取引が行われない可能性がある
- 市場が安定していれば数日〜1週間取引なしもあり得ます。
- 長期的には取引は必ず発生する
- 市場のトレンドやWEIスコアが一定期間後に変動するため、永遠に取引なしになることはほぼないと考えられますが、特定企業への偏りやセクターごとの閑散状態はあり得ます。
📌 採用する改善策
システムをより動的でリアルな市場状況に近づけるために、上記の改善策のうち「動的な閾値調整(方法1)」を最も推奨します。
- 理由:
- 市場の安定性と動的変化のバランスを取りやすい
- エージェントの行動に現実的な動きを生じさせ、市場の流動性を高められる
- 無理に取引を強制するわけではなく、市場環境に自然な変化を生み出せる
📌 結論と今後の対応策
現状の仕組みでは、理論的に取引がずっと発生しない可能性はあります。ただし、市場の長期変動によって取引がいずれ発生しますが、短期的な停滞は市場の活性化に問題をもたらします。
したがって、今後の改善としては以下を推奨します。
- 動的閾値調整ロジックの追加
- 閾値を徐々に下げることで、市場の動きを自然に促す仕組みを導入する
これにより、長期間取引が発生しない状態を防ぎ、より現実的で動的な市場シミュレーションが実現できます。
在のエージェント取引システムを「1日1回の板寄せ型先物取引」として再構成すると、次のような流れが考えられます。
🟩 1日1回の板寄せ型の先物取引方式
📌 現状の仕組みの整理
現在のシステムは次のようになっています:
- エージェントがGPTベースで将来価格を予測
- 予測価格と現価格の差により取引判断
- 個別エージェントが独立して売買を実施(相互作用なし)
- 取引成立のためのマッチングや価格調整がない(市場原理がない)
📌 改善後の仕組み(板寄せ方式)
1日の決まった時刻に全エージェントが注文を出し、その注文をもとに価格が決定される方式です。
具体的には:
①エージェントごとの注文生成(現状を流用)
各エージェントはGPT予測に基づき、注文を提出します:
- 買い注文:予測価格 > 現価格+閾値
- 売り注文:予測価格 < 現価格-閾値
- 注文なし(Hold):それ以外の場合
各注文には、以下の情報が含まれます。
項目 | 説明 |
---|---|
エージェントID | どのエージェントが注文したか |
企業名(または市場指数名) | どの資産についての注文か |
注文種類 | 買い・売り |
注文価格 | エージェントが提示する価格(予測価格をもとに) |
注文数量 | 資金・リスク許容度に基づき決定 |
※現状の仕組みに少し変更を加えるだけで実現可能です。
②板寄せ処理(新規導入)
提出されたすべての注文を1日1回の決まった時刻(例:17時)に集約し、以下のように価格を決定します。
- 注文集約
- 全注文(買い・売り)を価格ごとに集約。
- 価格ごとに注文数量を合計(買い注文量と売り注文量)。
- 約定価格の決定(板寄せルール)
- 買い注文の合計数量が売り注文の合計数量と一致(または最も近い)する価格を約定価格とする。
- もし完全一致がなければ、需給が最も均衡する価格を選択。
- 取引成立
- 約定価格で全注文をマッチングさせ、取引を成立させる。
- この時、約定価格より不利な注文(例:買い注文なのに約定価格より低い価格を指定)は取引不成立として処理。
③取引結果の反映(現状+新規)
- 各エージェントの残高やポートフォリオを更新(現状と同じ)。
- 市場価格を約定価格に更新(新規処理)。
- 注文記録や約定結果をDBに記録(現状のシステムを流用可能)。
🚩 改善のために必要な変更:
✅ 変更点まとめ:
種類 | 詳細 |
---|---|
新規実装 | 板寄せによる価格決定ロジック |
変更(小) | 注文生成ルールの微調整(約定価格前提に変更) |
拡張(中) | エージェント注文の一括処理・マッチング処理 |
🛠️ 実装手順
- 現状の取引処理をベースに、「注文データ」を一度仮DB(またはテーブル)に保存する仕組みを導入。
- 「板寄せ処理」の関数を作り、保存された注文を読み込んで約定価格を決定。
- 約定価格でエージェント同士の注文をマッチングし、取引を成立。
- 取引結果をDBに反映(現状と同じ)。
- 定期的なcronジョブとして、1日1回実行。
「板寄せ方式」を1日1回の先物取引として導入する手順です。
🚩 手順の全体像
現在のエージェント取引を以下の3つのフェーズに分けます。
- 注文生成・蓄積フェーズ(個別エージェントによる注文をDBに登録)
- 板寄せマッチングフェーズ(注文の集計・約定価格決定・取引成立)
- 約定結果の反映フェーズ(取引結果を各エージェントに反映)
📌 前提条件の確認
- エージェントがGPTベースで予測価格を算出済み
- SQLite等のデータベースに注文情報を記録
- 毎日一定時刻にcronジョブで自動実行する仕組みを構築