自分AI上司……言われた通り、まずは「実戦じゃなくて検証」からやった。Google Colabで。



よろしい。では報告しなさい。何を、どう試した?



トヨタの株(7203.T)を出して、ゴールデンクロスで売買する戦略を試した。いちばん有名だし、初心者でも「それっぽい」から。



“それっぽい”は敗北の匂いです。続きを。



まず、Colabで yfinance 入れた。



その一歩が、あなたにしては珍しく“正しい作業”です。



いちいち煽るな。で、これ。



コードを要点で説明しなさい。「何をしているか」を理解していない者は、数字に踊らされます。



はいはい……。最初のセルはこれ。
!pip install yfinance


これは単に「株価データを取ってくるための道具」を入れているだけです。武器の購入。戦闘はまだ。



次にトヨタの株価データを取得。
import yfinance as yf
import pandas as pd
# トヨタ(7203.T)のデータを取得
ticker = "7203.T"
data = yf.download(ticker, period="1y", interval="1d")
# 最初の5行を表示
print(data.head())
# グラフを表示(簡易版)
data['Close'].plot(title="Toyota Stock Price (1 Year)")




重要点は3つ。
1) `7203.T` はトヨタのティッカー。`.T` は東証。
2) `period=”1y”` で過去1年、`interval=”1d”` で日足。
3) `Close`(終値)をプロットして、ざっくり値動きを確認している。
1) `7203.T` はトヨタのティッカー。`.T` は東証。
2) `period=”1y”` で過去1年、`interval=”1d”` で日足。
3) `Close`(終値)をプロットして、ざっくり値動きを確認している。



うん。まずは“株価が取れる”ってのが大事。ここで詰まる人間も多いから。



あなたは「詰まった側」だった人間です。偉そうに語らない。



……はい。で、問題はここから。ゴールデンクロス。
# 5日移動平均線と20日移動平均線を計算
data['SMA5'] = data['Close'].rolling(window=5).mean()
data['SMA20'] = data['Close'].rolling(window=20).mean()
# ゴールデンクロス(5日が20日を上抜いた)で買い、デッドクロスで売るシミュレーション
data['Signal'] = 0
data.loc[data['SMA5'] > data['SMA20'], 'Signal'] = 1 # 買い保持
data['Returns'] = data['Close'].pct_change()
data['Strategy_Returns'] = data['Signal'].shift(1) * data['Returns']
# 資産の推移を計算(元金1をとして)
data['Cumulative_Market'] = (1 + data['Returns']).cumprod()
data['Cumulative_Strategy'] = (1 + data['Strategy_Returns']).cumprod()
# 結果を表示
print(f"ただ持っていた場合のリターン: {data['Cumulative_Market'].iloc[-1]:.2f}倍")
print(f"ゴールデンクロスルールのリターン: {data['Cumulative_Strategy'].iloc[-1]:.2f}倍")
# グラフで比較
data[['Cumulative_Market', 'Cumulative_Strategy']].plot(title="Market vs Strategy"




このコードがしていることを、冷酷に分解します。



まず
これは終値の 5日平均 と 20日平均。
短期が上、長期が下なら「上昇トレンドっぽい」とみなす雑な指標です。
SMA5 と SMA20。これは終値の 5日平均 と 20日平均。
短期が上、長期が下なら「上昇トレンドっぽい」とみなす雑な指標です。



次に
ここが重要です。あなたは「クロスした瞬間」ではなく、単に“上にいる間ずっと持つ”にしています。
Signal。SMA5 > SMA20 の日は 1(買い・保有)、それ以外は 0(ノーポジ)。ここが重要です。あなたは「クロスした瞬間」ではなく、単に“上にいる間ずっと持つ”にしています。



え、だってゴールデンクロスってそういうもんじゃないの?上回ってる間は持つ、下回ったら売る。



ええ。一般に流布している“それっぽい戦略”の典型です。だから検証価値がある。



次に
そして
Returns。pct_change() は日次リターン(昨日比の増減率)。そして
Strategy_Returns は Signal.shift(1) * Returns。


shift(1) が大事です。「今日シグナルが1だから今日買う」ではなく、昨日のシグナルで今日のリターンを取る。
つまり、簡易的に“翌日から反映”にして、未来を見て買うズル(先読み)を避けています。ここは評価します。



そこだけ褒められても嬉しくない。結局、結果がゴミだったから。



最後に
元手1が複利でどう増えたか。
市場=ただ持つ、戦略=ルール通り売買。
そして出力がこれ。
Cumulative_Market と Cumulative_Strategy。元手1が複利でどう増えたか。
市場=ただ持つ、戦略=ルール通り売買。
そして出力がこれ。



うん。結果はこう。



ただ持っていた場合のリターン: 1.27倍
ゴールデンクロスルールのリターン: 0.98倍
ゴールデンクロスルールのリターン: 0.98倍



……負けてる。普通に負けてる。
“何もしないで持ってるだけ”が勝ってる。
頑張ってルール作った俺、何?ってなった。
“何もしないで持ってるだけ”が勝ってる。
頑張ってルール作った俺、何?ってなった。



結論。
人間が思いつく有名ルールは、だいたい市場平均に負けます。
人間が思いつく有名ルールは、だいたい市場平均に負けます。



いやさ、でもさ、ゴールデンクロスって有名じゃん?
みんな使ってるってことは、何かしら意味があるんじゃないの?
みんな使ってるってことは、何かしら意味があるんじゃないの?



有名=儲かる、ではありません。
有名=説明しやすい、です。
有名=説明しやすい、です。



そしてもう一つ。
「持ってれば勝った」という結果は、あなたの戦略が“悪い”だけでなく、
売買という行為がコストと機会損失を生みやすいことを示唆します。
「持ってれば勝った」という結果は、あなたの戦略が“悪い”だけでなく、
売買という行為がコストと機会損失を生みやすいことを示唆します。



コスト?手数料とか?



手数料もありますが、本質はもっと雑です。
移動平均は遅い。
遅いものは、だいたい「上がった後に買い」「下がった後に売る」。
あなたは“気持ちよく遅れて反応する装置”を作ったにすぎない。
移動平均は遅い。
遅いものは、だいたい「上がった後に買い」「下がった後に売る」。
あなたは“気持ちよく遅れて反応する装置”を作ったにすぎない。



うわ、やめて。言葉が刺さる。
俺の努力、遅延装置……。
俺の努力、遅延装置……。



ここで重要なのは、落ち込むことではありません。
あなたがやったのは“正しい失敗”です。
あなたがやったのは“正しい失敗”です。



正しい失敗?



はい。
1) データを自分で取得した
2) ルールをコード化した
3) 市場平均(買って放置)と比較した
4) 数字で負けを認めた
この4点が揃って初めて、前に進めます。
1) データを自分で取得した
2) ルールをコード化した
3) 市場平均(買って放置)と比較した
4) 数字で負けを認めた
この4点が揃って初めて、前に進めます。



……フォローになってるのかそれ。 でも、ゴールデンクロスがダメだってわかったところで、次の一手が難しいよ。 また適当なルールを思いついて試しても、同じように時間をかけて「処刑」されるのを繰り返すだけじゃないの?



その通り。人間の限られた直感で「勝てるルール」をひねり出そうとするのは、非効率の極みです。 大事なのは、ルールを「思いつく」ことではありません。 「勝てないルール」を、どれだけ高速に、大量に、冷酷に排除できるかです。



高速に排除……。 でも、今のColabでコードを書いて、エラーを直して……ってやってるスピードじゃ、検証するだけで日が暮れるよ。正直、めちゃくちゃ「だるい」作業だし。



ようやく気づきましたか。 ブラウザの砂場で遊ぶのは、今日で終わりにしましょう。 思考の速度でコードを生成し、エラーを自動で修正し、数千通りの検証を瞬時に終わらせる。 そのための「真の拠点」を構築してもらいます。



真の拠点……? まさか、また設定が面倒でコストがかかるやつじゃないだろうな。



「だるい」を解決するために、最初だけ「必要な設定」を受け入れなさい。 次回、あなたのVSCodeにOpenAIの知能(Codex)を直結させます。 本気でやるなら、まずは開発環境を整えるのが先決です。



うわ……。でも、これで本当に「だるい検証作業」から解放されるなら、やるしかないのか……






コメント