見出し画像

カーブフィッティングマニアの振り返り


【せっかくなので書いてみようかと】

はじめまして。ひっそりとbotづくりに勤しんでいるkokoperi(@dondon_bot2022)と申します。最近bot界隈で流行りのポエムに触発され、私も仮想通貨botをつくり始めてもうすぐで1年になるのでこれまでの振り返りを含めてポエろうかと思います。

とはいえ、いろいろな方の記事を拝見して触発されたこと、気付かされたことも多かったのでポエムを呟くことで何らかの化学反応が起きるかな? という期待も込めてポエろうかと思います。

※技術的な話はないです。振り返りのポエムです。bot界隈ともあまり関係ない内容を含むのでご了承ください。


【自己紹介ということで】

私のトレード歴は株を入れて6年。本職は機械系のエンジニアで、工場でつかう生産機械の導入や維持/改良をはじめとする一般的な機械保全から、生産技術全般をやっているゴリゴリの機械屋さんです。

Pythonなどのプログラミング言語とはほぼ無縁で、どちらかというと機械系の制御全般と産業用ロボットのプログラムや機械のシーケンス制御を行うラダープログラム、制御機器類の各種ユーザーインターフェースの構築なんかが得意分野です。
(いまは実務からちょっと離れて労務管理の仕事をしています)

そんな私ですがトレードにどっぷりハマることになったきっかけは、趣味のレゴブロックの購入資金とハンドメイドロボットの開発資金を稼ぎたいからというのが理由だったりします。趣味の話をし始めると終わらないので割愛しますが一言。

「レゴブロックは楽しいですよ」


【botterではないです】

私の本アカというか、主体の趣味はレゴをつかった動く作品づくりをしており、一応はアマチュアのレゴテクニックビルダーというのが呼称かなと自認しています。そのため、よく聞くbotterという呼称は自分では名乗らないようにしています。

理由としては、様々な呼び名や立ち位置が流布する昨今で自分の主軸はぶれないようにしておきたいなというが一つ。それから、不用意に誰かがつくった呼称をつかうことでよからぬトラブルに発展するケースもあるので、特定のカテゴリや界隈に土足で踏み込むと大体ロクなことにならないだろうな、という懸念があったのでbotterとは名乗っていないです。

【なぜbotを作り始めたか】

元々は、2016年頃から株を触りはじめ、そこそこ調子が良かったので仮想通貨の魔窟にも足を踏み入れたのが始まりでした。2017年~2019年までコツコツとなんだかんだで利益が出ていましたが、2019年末にとあるコインの暴落に巻き込まれたあたりから損失管理の必要性を感じ、自動売買に興味をもち始めた次第です。

そして、2020年頭から自動売買手法の構築について情報収集を始めました。じつはこの段階で仮想通貨botにも行きつき、いろいろな記事を読んではみたものの当時の私にはかなりハードルが高く感じられ、選択肢にはなりませんでした。どちらかというとロボアド系から始まり、自分でプログラミングしなくてもよい自動売買の手法を探していたと思います。(いまから思うとこれは大間違いでした)

そうこうしているうちに秋ごろにとある自動売買サービスへ辿り着きました。(すでに退会したのでサービス名は伏せますが、非常にお世話になったサービスです。とくにお勧めする意図もありません。私の個人的感想です)

ノーコードで売買ロジックを組めるという点に大きく惹かれ、2020年末頃から動かし始めたところ、これが思いのほか自分の趣向にドはまりし、そこから自動売買とのお付き合いが始まりました。今から思うと、あのタイミングでbotづくりを始めていても良かったのかなとは思います。プログラミングの知識がなかったこと、難しそうだなと感じたことである意味楽な道に逃げてしまったのかなという気もします。
 
一方で、ノーコードでロジックを組める簡便さと当時は仮想通貨のボラティリティがすさまじい時期だったことも幸いし、モチベーション高くロジックを組み続けることができた点は相場に助けられました。(今から思うと素人のつくったロジックで数十万の利益が毎月出ていたわけなのですさまじい値動きだったんだなと思います)

すでにそのサービスを退会してしまいましたが、2020年末~2022年までにかけてとても濃密な経験値を積ませてもらいました。利益については2022年に損失につぐ損失を出してしまい、赤字で終わってしまったのが残念なところです。(これは私の組んだロジックが度重なるDDを受けた結果なので自業自得です)

結局、約2年間のうちにつくったロジックは記録しているもので280くらい(たぶんボツやコピー含めると400くらいあったかも)。爆益を生んだものもあれば、大損失を被ったものなど実戦を経て貴重な経験を積ませてもらったと思います。

何より大きかったのは、それまでうろ覚えだった各種のテクニカル指標や自動売買の考え方についてよく知るきっかけになったことです。これは今のbotづくりにもそのまま活きていますので、本当に勉強になりました。


【そしてあの本が目の前に】

2022年春、少しずつ相場に元気がなくなり始め、今のままでの態勢ではこの先厳しいかなと思っていた矢先、本屋で運命的な本に出会いました。説明の必要もないrichman先生の本です。勝手に先生と敬称をつけさせていただきましたが、本当に感謝しております。

botterという単語はそのときはじめて目にしましたが、語呂的になんとなく「あ、これbotの本だ」というのは分かりました。

早速購入して読んでみると、まさにそのときの自分が欲していた、というか限界を感じていた領域をこじ開けてくれる内容で一気に世界が広がりました。この本と出会っていなければbotをつくることはできませんでした。richman先生には感謝してもしきれません、本当にありがとうございます。


【それでbotを作り始めたはいいけど】

ここから今に至るわけですが、2022年4月末のGWから本格的にbotを作り始め、私も最初は当然のようにチュートリアルを参考にMLbotへ手を出しました。

が、やり始めて早々に「うーん、よくわからない」というのと他にまずやりたいことがあったので早々と断念してしまいました。理由は次の3つです。
(チュートリアルの内容ではなく、私の理解力が足らなかっただけです)

  1. 基礎となるbotがないので、機械学習以前にbotの仕組みがよく分からない。

  2. 自動売買はすでに行っており、当時はどちらかというと損失低減と資金管理の方に興味があった。

  3. まずはPythonの勉強しよ!

なお、私がこの本を購入したのがたしか3月くらいで、この時点ですでにbotterのプチブームが起きていたようなので私は完全な後発組でした。すべてゼロからでしたが、まあなんとかなるだろうとゆるくスタートしました。


【botの進捗】

2022年7月から細々とbotを動かしながら改良を続けています。botの方針としてはポジション管理の徹底を追及しつつ、あらゆる相場環境でもそれなりに対応できる性能を追い求めています。

正直、界隈の用語がほとんど分からないので自分の言葉で表現すると、
「その時々の状況に応じてパラメータやロジックを可変させ、相場環境への追従機能と自動最適化機能をもったbot」を作っています。ちなみに、うちのbotの売買部分の制御構造は下図のような構成になっています。


すごくシンプルな話ですが、「こういうときはこのパラメータね」という具合に自動的に切り替えて稼働するイメージです。

また「相場は循環する」というのも感じていたので、いま起こったこととまったく同じ値動きはないにせよ、「いま起こったことと同じような値動きは未来におこるだろう」と捉えています。相場自体にある種の再現性はあるだろうという仮定から、過去成績にもとづいてパラメータとロジックを可変+新たに作成し続けて“柔軟”に対応させることを想定してbotを組んでいます。

戦闘機で例えるなら、F14-トムキャット?

言い換えるとシストレ界隈ではおそらく禁句でもあろう、カーブフィッティングを自動的にやり続けるbotをつくっています。過去の値動きに徹底的に最適化させたパラメータとロジックを複数搭載させ、かつ稼働させながら過剰最適化を繰り返して稼働するイメージです。

「なにを馬鹿なことを」と言われて仕方のないフレーズですが、自覚したうえでその馬鹿なことをやり続けています。


【カーブフィッティングって?】

じつは、私の本職である機械設備の分野では、物を硬化させたり乾燥させたりする温度制御炉で「カーブフィッティング」という言葉を時々つかいます。こちらの意味は、炉内の昇温勾配を要求値に近づけるという意味で「カーブフィッティング(昇温カーブのフィッティング)」をつかいます。

加熱炉の昇温というのは物によっては結構厳しい要求がされるケースがあり、何としてでもこの要求カーブにのせる必要があります。温度調節器でヒータの出力を調整するのはもちろんですが、循環ファンも調整したり、炉内の風の流れも想像しながら調整したりとかなりの手間をかけてチューニングします。

私の頭にはどうしてもこうした加熱炉のイメージが強いため、トレードにおいても縦横無尽に動くチャートから理想的な損益チャートを仮定したうえで、それに近似させる作業というふうに考えています。

また、パラメータとロジックの可変というのもわりと搬送分野とかの考え方に近いかなとも思います。製造ラインの搬送だと、時間を最短化できるように物の流し方、順序などを都度最適化させるケースがあるためです。搬送というある程度未来が予測できる話なので、まったく同じではありませんが最適化の根本的な考え方には近いものがあると感じています。

カーブフィッティングと一言で切り捨てるのも一興ですが、二項対立的な視点でいえば、欠点の裏側には利点ありという捉え方もできるので、そこに一つの魅力と活路を見出して徹底的に相場にフィッティングさせるつもりです。(へっぽこ初心者のたわ言です)


【botに関するいろいろな雑記】

以降は、初心者がbotを作って感じたこと、いまやっていることなどをパラパラと書き記しておきます。


【サーボ制御に似ている印象】

botをつくりはじめて感じたことは「FA機器のサーボ制御に似ているかな?」という印象でした。または、やっていることを踏まえると検品ロボットも近いかもしれません。サーボの制御も制御系全体のメインシーケンスをラダーで組み、サーボ機器の入出力のやりとり、各種設定をぶら下げていきます。そのなかで、数値データも取り扱うので感触的には自動売買botの構成に近いかなと思っています。

botの難しいところは、完全には予測できない“価格の値動き”というある意味不安定な要素を扱わなければならないところだろうな、とは感じています。そういった意味で、近いところが先述の検品ロボットあたりかな?と思います。
 
検品用のカメラを装着したロボットがある一定のロジックで検品作業をしていくなかで、仕損じ品(不良品。原価の意味合いも込めて仕損じ品)を検出したときにそのワークをラインアウトさせる。この仕損じ品は、ある程度こういうときに発生するな、と予測がつくものもあればまったく予知できないものもあります。こうした不確定かつ非定常なワークへの対応、考え方、リスクヘッジの考え方が自動売買botに近いのかなと感じています。

ちなみに、一概に仕損じ品を減らす・・・というのが最適解かというとそういうわけでもなく、このへんは業態や業種で考え方様々で、多少の仕損じ品はいいからとにかく大量生産というケースもあるでしょうし、仕損じ品はだめ、ライン停止!というケースも当然あります。製品単位あたりの製造コストに影響されるところが大きいですが、botも同じで“ポジション”という対象に対してどう処理するかという問題として捉えています。


【ポジション管理】

一般的に損切条件を厳しくするとそのロジックの特性が失われてリターンが小さくなると聞きます。「それならば、損切条件入れずにいくぞ!」と勢いよく自動売買を走らせた結果、1年前の私は大損害を被りました。

損切りの考え方はいろいろだと思いますが、冷静に考えると世の中の工業製品には必ず安全装置が設けられています。機械装置でいうインターロック/セーフティの考え方は、やはり自動で動くbotには必要だろうというのが私の信念です。

損切りできずに大損害”というのは、言い換えると製造の現場で起こる人を巻き込む重大災害と同じですので、やはりこれは防ぐべきだと考えています。そこで、私は損切りではなくポジション管理という視点で捉えるようにしています。

物理的に置き換えると、トレードにおける”ポジション”というものは外部からコントロールできないピンボールのイメージです。自分もトレードに参加しているとはいえ、不特定多数の相互干渉によって値動きする様は、ピンに当たってあとはボールに任せて落ちていく様子に似ています。入力で変化させられるとしたらボールを弾くスプリングの強弱のみ。

とはいえ、そこは自分でロジックを組めるbotの強みがあり、ポジション管理の面でいえばある程度ボールの行く先を制限させられます。損切りもそうですが、保有時間、トレスト、イグジット側のしきい値など、固定化されたピンボール盤とは言いながらも、そのピンの位置をその時々に応じて自由自在に可変させられるのがbotの強みだと思います。

今のところ、私のbotではポジション管理として図のような枠組みをつくっています(いまはもうちょい増えています)。まず、ポジションの保有期間を定めたうえで、それに追従する形で各種のセーフティを何重にもかけ、利益獲得用のトレストも前後足の比較用と時間比例で上昇させるタイプ、イグジット側も複数の出口条件を設定しています。一応の制御対象としてみたときに、言うことを聞かないポジションが勝手に抜け出てしまうような穴がないように、しっかりと枠のなかで挙動させることを第一に考えています。

とはいえ、利益を伸ばせないと意味がないため、利益側だけは条件付きで天井を大きく引き上げるなど、だいぶ冗長性をとるよう調整しています。

ポジションの挙動<イメージ>

【制御思想は・・・】

基本的に、有利な位置で入り有利な地点で抜けることを想定したbotですので、基本的な構造はentry ⇒exitを繰り返す普通のbotです。特徴を出しているとすれば、entryとexitを判断する関数を複数格納し、それらを状況に応じて適宜可変させている点です。

また、あまりにも相場に合致しなくなると自動で新たなパラメータを吐き出す機能も盛り込んでいます。MLbotでもたぶん似たようなことやっているものあるのかな?と推測しますが、うちのはそこまでハイテクではないので、有効そうなロジックを全部格納し、それに付随するパラメータの組み合わせも全部搭載させて、その都度相場に適したものを引っ張り出してつかう立体倉庫方式です。

そのため、ロジックの中身はストキャスもあれば、ボリンジャーバンドもあり、ようは何でも設定できます。あとは、過去データに基づいて一発最適化をかければそれらのロジックに適したタイミングの箱に格納されるので、あとはbotに任せるだけです。時間足の異なるbotも簡単に作成できるようになったので、作業効率はかなり向上しました。(それで稼げるかどうかはまた別の問題なのですが。。)

また、格納していない未知のパラメータやロジックの組み合わせも算出する思想で組んでおり、今時点ではパラメータの算出までしか考えていませんが、必要があれば特定のテクニカルの組み合わせ(例えば、ここはボリンジャー×RSIが良さそうみたいなもの)も出力できるだろうなという見込みです。

すでに昨年の秋ごろから少しずつ機能拡張させながら実運用しており、想定通りに動いたときはそれらしい成績を収めてくれているので、方向性としてはアリかなと思っています。一応の目標としては下表の順序で“深化”(進化じゃないです)を遂げられると良いかなと目論んでいます。

なんとなくですが、私が初めてbotやAIトレードのことを知ったときのイメージが、全自動で人間のように柔軟にトレードしてくれるものを想像していましたので、純粋にこの路線を突き詰めていきたいなという欲求はあります。いまはそのための箱をつくり、そこに必要な要素をとにかく入れまくっているといったところでしょうか。

とりあえず現状は最低限相場に追従させるための基礎ロジックをBUY/SELLそれぞれで11通りぐらい。それに付随する各テクニカル指標のパラメータの組み合わせが46通り。それらを制御するための切り替え部分のパラメータが・・・いくつでしょ?

拡大させすぎて正直数え切れなくなってきているのが現状で、これに加えて損失が続いたときの再計算ロジックも追加したため稼働しながら新しいパラメータの組み合わせを吐き出すことも可能になりました。

次の段階としては、いまは機械的に自動で切り替えているだけなので、これに学習的要素を少しずつ加え、最終系としては自律的に成績の振るわない条件をリストオフし、再演算した結果をリストにフィードバックできるbotになればよいかなと願っております。
 
そして、このbot自体をある種のトレードを監視する観測器として常時稼働させ、このbotからのフィードバックで動くAI botみたいなものをつくれるとなおベストかな?という妄想もあります。


【今後の展望】

自動最適化botの骨組みはほぼ出来上がり、これを実運用しながら機能拡張をしていくのが今年のフェイズですが、いまはポジションクローズ時の不規則なずれ問題に対応中で、あとちょっとで解決できそうかな? という具合です。バックテスト上では有効な挙動を獲得できたため、実運用時の諸問題を一個ずつ対処していっています。

そうこう書いている間に久しぶりに仮想通貨が元気になっており、うちのbotも朝から忙しく動いています。微益微損のトータルちょいマイナスという結果で今日は終わりそうですが、いろいろと不具合も見つかったので一個ずつ対応していきます。

botを作っていて一つ残念なことは、やはり自動売買のbotですので損益がマイナスだとそれだけでモチベーションが下がります。

損失=botの性能=自分の能力のなさ>とネガティブ思考に陥りがちです。1年前の私はその考えでした。けれど、ものづくりの観点で考えてみると、自動売買botってトレードの世界の自動運転車をつくるようなもので、じつはかなりすごいことをしていると思います。

私の趣味のレゴなどは、利益などそもそもない完全な自己表現の世界ですので、そう考えるとbotも自分の作品としてお付き合いすればいいんだな、と最近は思っています。何よりも損失を被るとあれもこれも触ってしまい、結局その子の良さというか本筋というか、骨格のようなものまでなくしてしまったのがかつての失敗でした。

テストで点数が悪いからといって勉強漬けにしたところで成績が良くなるかというと「たぶんうちの子には逆効果だよね」とか思ったり。やっぱり、遊びもしないと特徴が育たないなとも思います。
(うん? 何の話でしたっけ?)

botとはいえ自分でつくった作品ですので、納得のいくところまで作りこんでいきたいですね。

さて、そろそろbfのサーキットブレイカーを食らって鼻血を流している子を迎えに行ってきます! みなさまよいトレードを!

#botは稼げない・・・よりも、
#レゴ沼はお金が溶けるから気を付けた方がいい


この記事が気に入ったらサポートをしてみませんか?