oas_jpyで高値つかみが発生(1時間足の高値を超える価格で購入)
Resolved 💬 3 comments Opened Jan 5, 2026 by mizuka123 Closed Feb 12, 2026
事象
2026-01-05 12:28にoas_jpyで高値つかみが発生しました。1つ前の1時間足(11時台)の高値を超える価格で購入しています。
詳細
時系列
| 時刻 | イベント | 価格 |
|------|---------|------|
| 11:02〜12:00 | 11時台の買い注文価格帯 | 0.293〜0.304 |
| 12:25:21 | 買い注文発注 | 0.304 |
| 12:26:35 | 買い注文を更新 | 0.315 |
| 12:28:45 | 約定 | 0.315 |
| 12:29〜 | 価格下落、買い注文価格帯 | 0.293〜0.306 |
約定詳細(DBより)
1443506300 | buy | 0.3150 | 25665.7958 | 2026-01-05 12:28:45
1443506290 | buy | 0.3150 | 6400.0000 | 2026-01-05 12:28:38
1443506288 | buy | 0.3150 | 30000.0000 | 2026-01-05 12:28:38
1443506286 | buy | 0.3150 | 20000.0000 | 2026-01-05 12:28:34
合計: 82,065.7958 OAS @ 0.315
原因分析
1. 現在の買い価格決定ロジック
src/logic/strategy.py の determine_buy_zone() では:
# 現在価格をベースにbuy zoneを計算
current_price = ohlcv_list[-1].close
zone_max = current_price * (1 - zone_max_rate)
zone_min = current_price * (1 - zone_min_rate)
問題: 価格が急上昇すると、current_priceが高くなり、zone_max(買いゾーン上限)も高くなる。結果として高い価格でも買いに行ってしまう。
2. 1時間足の高値を考慮していない
11時台の高値は約0.304だったが、12:26に0.315で買い注文を入れてしまった。1時間足の高値を上限として設定する機能がないため、価格急騰時に高値を追いかけてしまう。
修正提案
案1: 1時間足高値を買い上限として設定
# 直近1時間足の高値を取得
prev_hour_high = ohlcv_list[-2].high # 1つ前の1時間足
# zone_maxが前1時間足の高値を超えないように制限
zone_max = min(zone_max, prev_hour_high)
案2: 価格急騰検出時の買い抑制
既存の calculate_price_surge_rate() と PRICE_SURGE_ZONE_DEEPENING_FACTOR の仕組みを拡張し、急騰時には買いを完全に見送るオプションを追加。
案3: 価格変動幅の制限
直前の買い注文価格からの上昇幅に制限を設ける(例: +3%以上の上昇では更新しない)。
関連ファイル
src/logic/strategy.py:200-determine_buy_zone()src/logic/strategy.py:372-find_optimal_entry_price()src/core/bot_controller.py:520-543- buy zone計算と価格決定
ログ
{"timestamp": "2026-01-05T12:25:21.766701", "message": "Placing buy order for oas_jpy: 85035.28192394094 @ 0.304 (allocation: ¥25,851)"}
{"timestamp": "2026-01-05T12:26:35.420150", "message": "Placing buy order for oas_jpy: 82065.79588120127 @ 0.315 (allocation: ¥25,851)"}
{"timestamp": "2026-01-05T12:28:59.803793", "message": "New execution recorded for oas_jpy: 1443506300 (buy 25665.7958 @ 0.315)"}This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗