Pineスクリプト

【大変!?】TradingViewのストラテジーを自動で最適化する方法

makoto
makoto
こんにちは!makoto(@Makoto_beginner)です。今回は、TradingViewで作成したストラテジーを最適化する方法について考えるよ!

TradingViewをお使いの皆さんは一度は思ったことがあるのではないでしょうか?

「ストラテジー自動最適化機能がTradingViewにあればなぁ〜」と。

そこで、今回はTradingViewのPineスクリプトで組んだストラテジーを最適化する方法について考えたいと思います。

1、最適化とはなにか

この記事にたどり着いた方にとっては不要だと思いますが、まず最適化とはなにかについて考えてみようと思います。

ストラテジーの最適化とは、

過去の相場に当てはめて一番成績が良かったパラメーターが何か

を探し当てることです。

例えば、シンプルな例として2本の移動平均線が交差したらエントリーする単純なストラテジーを考えましょう。

当たり前ですが、このストラテジーには二本の移動平均線が必要となります。

↓こんな感じ(ピンクとオレンジの線が移動平均線です)

これらの移動平均線が交差した際にエントリーをするという非常に簡単なロジックです。

そして、移動平均線は何日間の移動平均線であるか指定する必要があります。当然ですが、2日間移動平均と100日間移動平均では値が違ってきます。

ということは、シンプルな移動平均線のストラテジーであっても「何日間の移動平均線と何日間の移動平均線が交差した時にエントリーするのか」によってエントリーするタイミングことがわかります。もちろん、エントリーするタイミングが違えば最終損益も変わってきます。

実際の例として、同じストラテジーで移動平均線の期間のみを変えたものの成績を示します。(銘柄はビットコイン、時間足は1Hです)

まずは短期移動平均線が50日、長期移動平均が100日の時。

この時のリターンは約22%でした。では、同じストラテジーで期間を変えてみましょう。

短期移動平均線を50日、長期移動平均を200日にしてみます。

するとリターンは約14%まで減少しました。

では、一体これらの移動平均の期間をどのようにした場合に最も利益が得られるのでしょうか。

今回のストラテジーでは移動平均線の期間を変えることができましたが、このようにストラテジーで変更が可能な値を以後「パラメーター」と記述します

この最も利益が出るパラメーターの値を探し出すことをパラメーターの最適化と言います。

では、この値をどうやって求めるのでしょうか?

実は冒頭でも言いましたが、TradingViewには最適化機能がないため、人間の手によって細々とパラメータを変えながら当たっていくしかありません

しかし、この作業がめちゃくちゃ大変です!

何故ならばパラメーターの組み合わせは無数に存在するからです。

例えば、先ほどのストラテジーの場合だとパラメーターは「短期移動平均期間」と「長期移動平均期間」の二つだけでした。

しかし、短期移動平均期間を10,15,20,25,30,35,40,45,50,55と10個、長期移動平均期間を100,110,120,130,140,150,160,170,180,190と10個変えていく場合を考えても、パターンは10×10 = 100通りあります。

これを全て手当たり次第やっていくことはかなり無理がある作業だと思います。頑張れば可能ですが、いずれ燃え尽きることになると思います。

そこで、今回はこの最適化を自動で行う方法について考えました。

2、パラメーター最適化を自動で行う手法2つ

パラメーター最適化を自動で行う手法は大きく2つあります。(いずれも、私自身実際にやっている方法です)

1、Python等を使用して実施

一つ目は、Python等の他のプログラミング言語を使用して最適化する方法です。

TradingViewでできないなら他のプログラミング言語で実施しよう!という魂胆です。

しかし、本手法は実施するまでのハードルがかなり高いです。

Python等で最適化を行うまでの流れ

1、PineスクリプトのストラテジーをPythonにて再現するプログラムを組む

2、Pineスクリプトに値動きデータを読み込ませる

3、パラメーター総当たりで最適なものを探すプログラムを組む

特にPineスクリプトをPythonに書き換える必要がありハードルが高いです。

私自身、本手法でパラメーターの最適化を行うのはもともとPythonにて作成したbotのみであり、Pineスクリプトのストラテジーをこの手法で最適化しようとは思いません。労力がかかりすぎるからです。

2、TradingViewから自動でデータをダウンロードして処理

二つ目は、TradingViewから自動でデータをダウンロードして処理を行う方法です。

先ほど、パラメータの総当たりは人間がやると相当大変だというお話をしましたが、この作業を自動でやってくれれば簡単に最適化が行えそうです。

例えば、PythonのSeleniumというライブラリを使用すればWEBブラウザ(Chrome)の操作をPythonからコントロールすることができます。

これを使ってTradingViewのページを自動で操作すれば、ストラテジーのパラメータ変更&データのダウンロードを自動で行えそうです。

あとは、そのデータをEXCELなどでまとめてヒートマップを作成すれば、最適なパラメーターがわかります。

TradingViewから自動でデータをダウンロードして処理する流れ(Pythonの例)

 

1、PythonでTradingViewのストラテジーのパラメータ変更およびデータのダウンロードを自動で実施できるようにコードを書く。

2、ダウンロードしたデータをExcel等で整理してヒートマップを作成する。

この方法であれば、ストラテジーごとに処理を変える必要がなく簡単にパラメーター最適化が実施できそうです。

しかし、欠点としては、

1、そもそもPythonでプログラムを書くことが大変である

2、Pythonでの最適化と比較すると最適化に時間がかかること

があります。

そもそも、「Pythonってなに?」「Seleniumってなに?」という方にはハードルが高いですね。

ガッカリマン
ガッカリマン
そっか・・・なら、諦めるか・・・

 

実は、そんな方のために誰でも簡単にTradingViewのストラテジーを最適化するツールを作成しました。

しかもこのツール、誰でも簡単に使えるだけではなく自動でヒートマップの作成まで実施してくれる便利ツールです。

3、TradingViewのストラテジー最適化ツール

今回、私自身TradingViewでのストラテジー最適化を行うために、Pythonでプログラムを組んでいましたが「これがプログラミングができない人が使えるようにしたら便利だな」という思いがあったので、今回、誰でも簡単にストラテジーの最適化が行えるようにデスクトップアプリを作成しました。

プログラムを書くにはアレルギーがある方がいるかと思います。

しかし、そんな方にも簡単に最適化が行えるようなツールを目標として作成したアプリです。

その名も、、、

Optima Heat(オプティマヒート)

です!

最適化を意味するOptimizeとヒートマップのHeatを合わせてこの名前になりました。

名前は相変わらずダサいですがロゴは少しかっこよくしました!

このアプリケーションを使用すれば、誰でも簡単にTradingViewのストラテジーの最適化が行えます。

操作画面はこんな感じです。

「シンボル名」「タイムフレーム」「ストラテジー名」「パラメータ」を指定して処理開始ボタンを押せば、あとは自動でヒートマップが作成され指定のフォルダに画像として保存されます。

シンボル名やタイムフレームは、項目を「,(カンマ)」で区切れば複数指定することも可能です。

出力可能なヒートマップは24種類で、最終損益だけではなくプロフィットファクターやシャープレシオについてもパラメーターごとに比較が可能です。

もうすぐリリース予定なので、TradingVIewのストラテジー最適化を行いたいという方はぜひ本アプリの使用を検討してみてください。

4、まとめ

では、本日の記事のまとめです。

1、ストラテジーの最適化とは、過去の相場に当てはめた時に最も利益が出るパラメーターを探し出すこと

2、TradingViewのストラテジーを最適化するには、保管のプログラミング言語用にコードを書き換えて実施するか、手動で行うしかない。

3、Optima Heatを使用すれば誰でも簡単にストラテジーの最適化が行える

では、次回の記事ではOptima Heatの使用方法、便利なところや欠点について記事を書きたいと思います。

では、また次回の記事でお会いしましょう!

応援よろしくお願いします!

皆さんの応援がブログを更新するモチベーションになっています!

記事について「面白い!」「わかりやすかった!」と思っていただけましたら、ぜひブログのお気に入り登録 & Twitter(@Makoto_beginner)のフォローをよろしくお願いいたします!

ブックマーク・フォロー・コメントよろしくお願いします!

本記事を気に入っていただけたらブックマークお願いします!また、ツイッターもやってるのでフォローよろしくお願いいたします!

Twitter : makoto(@Makoto_beginner)

また、記事中で不明なことや間違い等ありましたら以下のコメント欄からコメントいただけると幸いです。

皆様のコメントをもとにどこよりもわかりやすいブログを目指していきます。

 

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です