MENU

システムトレード初手:最も有名なルールを最も冷酷に処刑する

自分
AI上司……言われた通り、まずは「実戦じゃなくて検証」からやった。Google Colabで。
AI上司
よろしい。では報告しなさい。何を、どう試した?
自分
トヨタの株(7203.T)を出して、ゴールデンクロスで売買する戦略を試した。いちばん有名だし、初心者でも「それっぽい」から。
AI上司
“それっぽい”は敗北の匂いです。続きを。
自分
まず、Colabで yfinance 入れた。
AI上司
その一歩が、あなたにしては珍しく“正しい作業”です。
自分
いちいち煽るな。で、これ。
AI上司
コードを要点で説明しなさい。「何をしているか」を理解していない者は、数字に踊らされます。
自分
はいはい……。最初のセルはこれ。
!pip install yfinance
AI上司
これは単に「株価データを取ってくるための道具」を入れているだけです。武器の購入。戦闘はまだ。
自分
次にトヨタの株価データを取得。
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)")
※トヨタの1年間の株価推移。
AI上司
重要点は3つ。
1) `7203.T` はトヨタのティッカー。`.T` は東証。
2) `period=”1y”` で過去1年、`interval=”1d”` で日足。
3) `Close`(終値)をプロットして、ざっくり値動きを確認している。
自分
うん。まずは“株価が取れる”ってのが大事。ここで詰まる人間も多いから。

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

自分
……はい。で、問題はここから。ゴールデンクロス。

# 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"
※オレンジがルール適用時のリターン
AI上司
このコードがしていることを、冷酷に分解します。
AI上司
まず SMA5SMA20
これは終値の 5日平均20日平均
短期が上、長期が下なら「上昇トレンドっぽい」とみなす雑な指標です。
AI上司
次に Signal
SMA5 > SMA20 の日は 1(買い・保有)、それ以外は 0(ノーポジ)
ここが重要です。あなたは「クロスした瞬間」ではなく、単に“上にいる間ずっと持つ”にしています。
自分
え、だってゴールデンクロスってそういうもんじゃないの?上回ってる間は持つ、下回ったら売る。
AI上司
ええ。一般に流布している“それっぽい戦略”の典型です。だから検証価値がある。
AI上司
次に Returns
pct_change() は日次リターン(昨日比の増減率)。
そして Strategy_ReturnsSignal.shift(1) * Returns
AI上司
shift(1) が大事です。
「今日シグナルが1だから今日買う」ではなく、昨日のシグナルで今日のリターンを取る
つまり、簡易的に“翌日から反映”にして、未来を見て買うズル(先読み)を避けています。ここは評価します。
自分
そこだけ褒められても嬉しくない。結局、結果がゴミだったから。
AI上司
最後に Cumulative_MarketCumulative_Strategy
元手1が複利でどう増えたか。
市場=ただ持つ、戦略=ルール通り売買。
そして出力がこれ。
自分
うん。結果はこう。
自分
ただ持っていた場合のリターン: 1.27倍
ゴールデンクロスルールのリターン: 0.98倍
自分
……負けてる。普通に負けてる。
“何もしないで持ってるだけ”が勝ってる。
頑張ってルール作った俺、何?ってなった。
AI上司
結論。
人間が思いつく有名ルールは、だいたい市場平均に負けます。
自分
いやさ、でもさ、ゴールデンクロスって有名じゃん?
みんな使ってるってことは、何かしら意味があるんじゃないの?
AI上司
有名=儲かる、ではありません。
有名=説明しやすい、です。
AI上司
そしてもう一つ。
「持ってれば勝った」という結果は、あなたの戦略が“悪い”だけでなく、
売買という行為がコストと機会損失を生みやすいことを示唆します。
自分
コスト?手数料とか?
AI上司
手数料もありますが、本質はもっと雑です。
移動平均は遅い。
遅いものは、だいたい「上がった後に買い」「下がった後に売る」。
あなたは“気持ちよく遅れて反応する装置”を作ったにすぎない。
自分
うわ、やめて。言葉が刺さる。
俺の努力、遅延装置……。
AI上司
ここで重要なのは、落ち込むことではありません。
あなたがやったのは“正しい失敗”です。
自分
正しい失敗?
AI上司
はい。
1) データを自分で取得した
2) ルールをコード化した
3) 市場平均(買って放置)と比較した
4) 数字で負けを認めた
この4点が揃って初めて、前に進めます。
自分
……フォローになってるのかそれ。 でも、ゴールデンクロスがダメだってわかったところで、次の一手が難しいよ。 また適当なルールを思いついて試しても、同じように時間をかけて「処刑」されるのを繰り返すだけじゃないの?
AI上司
その通り。人間の限られた直感で「勝てるルール」をひねり出そうとするのは、非効率の極みです。 大事なのは、ルールを「思いつく」ことではありません。 「勝てないルール」を、どれだけ高速に、大量に、冷酷に排除できるかです。
自分
高速に排除……。 でも、今のColabでコードを書いて、エラーを直して……ってやってるスピードじゃ、検証するだけで日が暮れるよ。正直、めちゃくちゃ「だるい」作業だし。
AI上司
ようやく気づきましたか。 ブラウザの砂場で遊ぶのは、今日で終わりにしましょう。 思考の速度でコードを生成し、エラーを自動で修正し、数千通りの検証を瞬時に終わらせる。 そのための「真の拠点」を構築してもらいます。
自分
真の拠点……? まさか、また設定が面倒でコストがかかるやつじゃないだろうな。
AI上司
「だるい」を解決するために、最初だけ「必要な設定」を受け入れなさい。 次回、あなたのVSCodeにOpenAIの知能(Codex)を直結させます。 本気でやるなら、まずは開発環境を整えるのが先決です。
自分
うわ……。でも、これで本当に「だるい検証作業」から解放されるなら、やるしかないのか……
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次