![見出し画像](https://assets.st-note.com/production/uploads/images/165680221/rectangle_large_type_2_27b4e3caf73b79437fa6b30f42738691.png?width=1200)
Perplexity vs Claude 比較 #2 - FXトレード戦略のバックテスト・最適化
こんにちは。
先日のこちらの記事の続編になります。
AIでトレード戦略バックテスト用のスクリプトを作成し比較しようというものです。
前回、Perplexity AI、ClaudeおよびCopilotの助けを借りて、トレード戦略のバックテスト、最適化のスクリプトを作成しました。
スクリプトの生成まで行い、その段階での評価を比較しました。
この記事では、生成されたスクリプトを実行した上で、評価・比較したいと思います。
なお、Copilotが生成したコードは、必要な機能・処理が含まれていないため今回の比較からは除外しました。
FXトレード戦略の実行結果・比較
実際にコードを実行した結果の比較・評価は以下のとおりでした。
![](https://assets.st-note.com/img/1730150950-dCSI4lHc8EbUMg7wNrkmWQeL.png?width=1200)
まず、最終的に望ましいものができたかという点、最終的なコード品質、つまり総合評価については、Claudeが最良でした。
コードの初歩的エラーの有無
【Perplexity】2件
関数のパラメータ指定に関するエラー 1件
クラスで指定するパラメータ初期値のエラー 1件
【Claude】2件
並列処理でのオブジェクト共有のエラー 1件
日付データの型変換のエラー 1件
どちらも2件程度のエラーで解消後、実行までできるようになりました。
いずれのエラーも事前にチェックできるレベル、コードレビューで防げるレベルのような気がしますが、AIでも事前にチェックは難しいのでしょうか?
デバッグのし易さ・分かり易さ
【Perplexity】説明は分かり易い。コード修正も問題なし。
![](https://assets.st-note.com/img/1730151195-5t13iMfEO0LFAVWjdp6wvTuC.png?width=1200)
![](https://assets.st-note.com/img/1730151247-MfXcZmpneJ6701Ov4qwulF2I.png?width=1200)
【Claude】説明は分かり易い。コード修正も問題なし。
![](https://assets.st-note.com/img/1730151416-iKE9gpQY3Rb8CScoTk6PmX1e.png?width=1200)
![](https://assets.st-note.com/img/1730151513-nFs8P6bRYQJj3KrcSalZyuTh.png?width=1200)
ここまでは、PerplexityとClaudeに大きな差異はありませんでした。
最終的なコード品質
ここでの評価は最終的に満足できるものができたかという観点です。
当然、スクリプトが実行できて、バックテスト・最適化が行える状態であることが前提です。
PerplexityとClaudeともに最終的な動くものはきちんとできました。
最終品質については、Claudeが最良でした。
【Perplexity】
最終品質の評価として減点になったのは以下の2点です。
エラー対処によりプログラムの大幅な変更
デバックのし易さで挙げた2つ目の対応で、使用するライブラリの変更、つまりプログラムの構成を根本的に変更する提案がありました。
もともと、提案・実装されたコードでしたが、エラーがあったためにあっさりとその実装を変えるということになりました。
Perplexityは、正直ちょっといい加減なところがあります。
ハルシネーション(Hallucination)というものなのでしょうか。最終実行結果が意味ないもので終わった
下の画像のとおり、Best win rate : 0と意味不明な結果で終わりました。
1点目については、当初以下のとおり説明していたが、エラーがあったためあっさりと別の実装に切り換えたということです。
あまり当てにならないですね。
これが人間相手であれば、信頼しなくなります。
プログラムの性能という観点から比較すると、BayesSearchCVを使用した新しい実装の方がベターだと言えます。以下に理由を説明します:
探索範囲の拡大:
ランダムサーチとベイズ最適化を組み合わせることで、より広範囲のパラメータ空間を効率的に探索できます
1 並列処理の活用:
ProcessPoolExecutorを使用して並列処理を実装しています。これにより、最適化プロセスを高速化し、より多くのパラメータ組み合わせを評価できます
2 カスタム目的関数:
新しい実装では、勝率や特定の条件を考慮したカスタム目的関数を使用しています。これにより、問題に特化した最適化が可能になり、より実用的な結果を得られる可能性が高まります。
3 適応的な探索:
BayesSearchCVは、過去の評価結果を学習しながら次のパラメータを選択します。これにより、探索が進むにつれてより効率的にパラメータ空間を探索できます
4 プロファイリングとの親和性:
新しい実装は、必要に応じてプロファイリングツールと組み合わせやすい構造になっています。これにより、パフォーマンスのボトルネックを特定し、さらなる最適化を行うことが容易になります
これらの特徴により、新しい実装の方がより効率的かつ効果的に最適なパラメータを探索できる可能性が高く、結果としてプログラムの性能向上につながると考えられます。ただし、具体的な問題や使用するデータセットによっては、両方の方法を試してみて比較することも重要です
こちらが実行結果の画面ですが、肝心のWin Rateが0で使えなさそうです。
また、Parametersの記載もユーザーフレンドリーでなく、分かりにくいですね。
![](https://assets.st-note.com/img/1730153199-kwuLoj2xEWnUBqtsaDQI4Mz7.png?width=1200)
【Claude】
以下の画像のとおり、しっかりとした結果が出てきました。
数値の正確性など詳細は確認する必要がありますが、今後の調査のベースとしては十分使い物になりそうです。
ただ、最適化結果で Win Rate 100%で、最適パラメータでの再実行結果のWin Rateが87.29%と異なっているのがなぜなのでしょうか? 要調査です。
![](https://assets.st-note.com/img/1730153532-GmDsXiPaVU548joqZ6u0kxCE.png?width=1200)
なお、上記の最適化結果では、指値30 pips、逆指値 671 pipsで100%の勝率です。
これが本当だとするとトレード戦略の検討という意味ではおもしろそうです。
なお、分析に利用したデータは クリック証券 EURUSD 1分足 2013~ 2024年のデータです。
トレード戦略の検討については、また別の記事で調査結果をご紹介したいと思います。
最後に
この記事はお気に入りいただけましたでしょうか?
内容お役にたちましたらうれしく思います。
また、サポートなど応援いただけましたら幸いです
いいなと思ったら応援しよう!
![なべなべ](https://assets.st-note.com/production/uploads/images/155410970/profile_b8f45dd20c92a4e7b69bb210ec4bf424.png?width=600&crop=1:1,smart)