この記事は、note で連載した「自動売買をつくってみる」第2回の転載です(全9回)。
元記事: https://note.com/suisei498/n/n4f354ab782cd
前回、売買の判断をすべて確定的なルールにすると決めた話を書きました。理由のひとつが「過去のデータに当てて機械的に測れるから」でした。
今回はその測った結果です。
先に結論を書くと、同じ設計のルールが、対象を変えると逆向きに効きました。しかも私の予想と逆の方に。
※以下はすべてデモ口座での開発・検証の記録です。特定の銘柄や手法を勧めるものではありません。採用したパラメータや配分には触れません。
測り方を先に決めた
検証を始める前に、測り方だけは先に固めました。ここを後から動かすと、良い数字が出るまで測り方をいじる作業になってしまうからです。
決めたのは3つです。
- ウォークフォワードで測る。過去の一部でパラメータを決め、その直後の期間で成績を見る。これを窓をずらしながら繰り返す
- コストを最初から引く。手数料と売買の値幅を片道0.1%として、全部の取引から差し引く
- 判断は現物の買いだけ。売りから入る形とレバレッジは、別枠で後から試す
3つ目は前回書いた制約そのままです。1つ目と2つ目は、あとで自分を助けることになりました。
ウォークフォワードにしたのは、過去の全部を使ってパラメータを決めると、必ず勝つからです。
これは当たり前のようで、実際にやってみるまで実感が湧きませんでした。手元にある全期間から一番成績の良い数字を選べば、その期間で勝つのは当然です。選んだのだから勝ちます。問題は、その数字が次の期間でも通用するかを何も語っていないことでした。
窓を切って、決めた直後の期間だけで評価する形にすると、この幻が消えます。実際、全期間で選んだときに一番良かった設定が、直後の期間ではまるで振るわない、ということが何度もありました。選んだ時点では区別がつかないのが厄介なところです。
特にコストです。コストを引かずに測ると、ほとんどの短期ルールは勝って見えます。引いた瞬間に半分くらいが消える。最初から引いておくと、この幻を見ずに済みます。
効き方は取引の回数に比例します。片道0.1%は1回あたりでは小さく見えますが、往復で0.2%、100回取引すれば20%です。取引の回数が多い設計ほど、コストを後から足すと結論がひっくり返る。だから最初から入れておく必要がありました。
比較の基準も先に置きました。そのまま買って持ち続けた場合の成績です。ルールを作る以上、これを超えられないなら作る意味がありません。この基準は後で効いてきます。
BTCでは、順張りが残った
最初にビットコインで試しました。
いくつかの型を並べて比べたところ、残ったのは順張りでした。一定期間の高値を超えたら買い、一定期間の安値を割ったら手放す。いわゆるブレイクアウトです。
一方で、平均回帰の型は弱かった。下がったら買って戻ったら売る、という考え方です。直感的にはこちらの方が「安く買う」感じがして好みだったのですが、数字は逆でした。
ここに市場の過熱度を見る指標を足すと、成績がもう一段上がりました。過熱しているときに新規の買いを止めるという使い方です。買う条件を増やしたのではなく、買わない条件を足しただけで良くなった。
このとき私は「順張りが効く」と理解しました。これが後で崩れます。
同じルールを他の銘柄に当てたら、全部負けた
ビットコインで残った型を、そのまま他の銘柄に当てました。同じ設計、パラメータだけ測り直し。
結果は、どれも基準を下回りました。
最初は当然の話だと思いました。銘柄ごとに値動きの荒さが違うので、パラメータの探索範囲が合っていないのだろう、と。範囲を広げて測り直しました。
変わりませんでした。
次に期間を疑いました。検証期間の切り方が悪いのではないか。窓の幅を変えて何度か測り直しました。
これも変わりませんでした。
ここで手が止まりました。設計は同じ、測り方も同じ、それでも片方だけ通らない。パラメータの問題ではないなら、設計そのものが対象に合っていないことになります。
逆にしたら、7銘柄すべてで効いた
念のため、という気持ちで逆向きを試しました。順張りではなく、下がったら買う型です。ビットコインでは弱かった、あの型です。
7銘柄すべてで、基準を上回りました。
7つのうち5つや6つではなく、7つ全部でした。方向を逆にしただけで、負けていたものが揃って通った。
正直なところ、このときは自分の実装を疑いました。売買の向きを取り違えていて、たまたま数字が良く出ているだけではないか。取引の記録を1件ずつ開いて、買った日と売った日の値段を手で確かめました。合っていました。
同時に、この結果は割り引いて見る必要もありました。これらの銘柄は値動きが互いに似ています。7つ全部で効いたと言っても、独立した7回の検証ではありません。実質的にはもっと少ない回数を、7回に分けて数えているだけかもしれない。
この点は、あとで枠を増やそうとしたときにはっきりしました。同じ性質の銘柄を足していけば、検証した回数は増えます。ところが増えるのは約定の件数であって、独立した証拠の数ではない。似た動きをするものを何本足しても、同じ相場を何度も数え直しているだけです。
なので「7銘柄で確認できた」ではなく、**「この性質の銘柄群では、逆向きの型が通った」**という言い方に留めています。
効かなかったものも書いておく
うまくいった話だけ並べると誤解を生むので、通らなかったものも書きます。
売りから入る型は、ほぼ全滅しました。 検証期間が全体として上がっている相場だったので、売り側は入るたびにコストを払って終わる形になりました。相場の向きが変われば結果も変わるはずですが、少なくとも私が測った期間では成立しませんでした。
レバレッジは前回書いたとおりです。 2倍にするとリターンは増えますが、下落の深さも同じだけ増えて、リスクあたりの成績はむしろ下がりました。
イーサリアムだけ、どの型でも通りませんでした。 順張りも逆張りも、基準に届かない。理由は分かっていません。分からないので採用していません。
そして買って持ち続けるだけの成績が、意外と手強かった。ビットコインについては、ルールを作っても大きくは離せませんでした。一方で、ある銘柄を同じように持ち続けた場合は8割方失われる計算になり、こちらは「持ち続ける」が基準として機能しませんでした。同じ「買い持ち」でも、対象によって意味がまるで違うというのが、この検証で一番意外だったところです。
暗号資産の外側でも測ってみた
同じ枠組みを、暗号資産以外にも当てました。値動きの性質が違うものを入れれば、同時に全部が崩れる事態を避けられるのではないかと考えたからです。
金は順張りが通りました。 ビットコインと同じ側です。値動きの荒さはまったく違うのに、通る型は同じでした。ここで「順張りが効く市場と、逆張りが効く市場がある」という見方に変わりました。銘柄の種類ではなく、市場の性格の方に分かれ目がありそうだ、と。
為替は、何をやっても通りませんでした。
順張りも逆張りも、期間を変えても、パラメータの範囲を広げても、基準を超えない。しばらく粘ってから、廃止しました。
粘っている間、私は「見つけ方が悪いのだろう」と思っていました。もっと良い型があるはずだ、と。ただ、探し続ければいつか良い数字は出ます。前の節に書いたとおり、たくさん試して一番良かったものを選べば、それは選んだから良いのであって、通用するとは限らない。試行の回数を増やすほど、この危険は上がります。
なので、決めた回数を試して出なければ落とす、という形にしました。為替はそれで落ちました。エッジが無いことを証明したわけではなく、私が見つけられなかっただけです。ただ、見つけられないものは運用できません。
この枠は空きました。次回はここに何を入れようとして、どう失敗したかの話になります。
なぜ逆になるのか、は分かっていない
説明を付けたくなるところですが、私は理由を確かめていません。
思いつく話はあります。取引の厚みが違う、参加している人の層が違う、値が飛びやすい、など。どれももっともらしく聞こえます。
ただ、これらは後から結果に合わせて考えた説明です。先に立てて検証した仮説ではありません。もっともらしい説明を付けた瞬間に、それを前提に次の判断をしてしまうので、ここは分からないままにしています。
代わりに、運用のルールとして1つだけ決めました。新しい対象を足すときは、既存の型が通ると仮定しない。必ず両方向を測り直す。
理由が分からなくても、この手順は守れます。
この検証で決めたこと
3つ決まりました。
- 対象ごとに、通る型が違うことを前提にする。1つの型で全部を賄おうとしない
- 効かなかったものを消さずに残す。上のイーサリアムのように、通らなかった記録は次に同じことを試すときの時間を節約してくれる
- 基準は対象ごとに置き直す。「買って持ち続けた場合」は、対象によって強い基準にも無意味な基準にもなる
そしてもう1つ、書き方の話として。
私はこの検証を「順張りが効くと分かった」で終わらせるところでした。ビットコインで止めていたら、そう結論していたはずです。間違った一般化に気づけたのは、たまたま対象を増やしたからです。うまくいった結論ほど、範囲を確かめずに広げてしまう。
次回
次は、この検証で良い数字が出た対象を実際に組み込もうとして、実装する前に3つとも落ちた話を書きます。
過去のデータ上は悪くない成績が出ていたのに、実際の口座で確かめたら、片方はそもそも発注できず、もう片方はコストが想定の100倍以上でした。
数字が良いことと、動かせることは別でした。
連載の全9回は note にまとまっています → https://note.com/suisei498



