前回までのあらすじ
前回の記事
→【Python】トレード戦略をバックテストして有効性を検証する
トレード戦略は利益だけがすべてではない
トレード戦略はもちろん利益が出ているかどうかがまず大きな判断指標にはなりますが、他にも考慮するべき点があります。
それはトレードの安定性です。バックテスト期間では大きく利益が出ていたとしても勝率が低かったり、利益の上下が大きい場合は本番の環境で運用した場合、バックテストのようなパフォーマンスを発揮しないことが多いです。
そういったことも鑑みるためにトレード戦略のバックテストにはリターンだけではなく、他の判断指標も存在しています。今日はリターン以外で有名なトレード戦略の判断指標とPythonでの計算方法についてみていきたいと思います。
勝率
勝率=勝ちトレードの回数÷全トレードの数
もちろん勝率が高くてもコツコツドカンだと儲からないので、絶対的な判断基準ではありませんが、安定性は測れるかと思います。
#勝率を計算する関数 def win_lose(returns): return_diff=returns.diff() data=return_diff.fillna(method='ffill') win=[] lose=[] for i in data: if i>0: win.append(i) if i<0: lose.append(i) score=len(win)/(len(win)+len(lose))*100 return score #勝率を計算する win_lose(returns)
ドローダウン
ドローダウンとは累計利益の最大値からどれだけ落ちたかを測る指標です。まあ利益が出ていれば問題ないのですが、ドローダウンが大きいと本番で実装したときに大きな損失が発生する確率が高く精神にクルので、一応確認しておきたいです。
#最大ドローダウンの計算 def drowdown(returns): dro=[] for i in range(2026): max=returns[:i].max() drop=max-returns[i] dro.append(drop) dhi=dro[2:] sdi=np.array(dhi) s=sdi.max() score=(1-(max-s)/max)*100 return score drowdown(returns)
ペイオフレシオ
勝ちトレードの平均利益額÷負けトレードの平均損失額
ペイオフレシオが1.0より大きくなるほど、負けるときは小さく勝つときは大きいスタイル(損小利大)となり効率の良いトレード戦略ということになります。
#ペイオフレシオの計算 def payoff_ratio(returns): return_diff=returns.diff() paydata=return_diff.fillna(method='ffill') win=[] lose=[] for i in paydata: if i>0: win.append(i) if i<0: lose.append(i) lose_mean=np.array(lose).mean() win_mean=np.array(win).mean() score=win_mean/lose_mean*-1 return score payoff_ratio(returns)
他にも「ペイオフレシオ」と「勝率」を算出して、下図の「バルサラの破産確率」と照らし合わせてみるのもトレードの有効性の検証方法の1つです。
バルサラの破産確率とは、ナウザー・バルサラという数学者が考案したもので、資金が底をつく破産確率を表しています。自分のトレード戦略のバックテストをsてみて破産確率が100%でないかを確認するのがまず大事ですね。↓
プロフィットファクター
プロフィットファクターの計算式:純利益÷純損失
#プロフィットファクターの計算する関数 def profit_facter(returns): return_diff=returns.diff() paydata=return_diff.fillna(method='ffill') win=[] lose=[] for i in paydata: if i>0: win.append(i) if i<0: lose.append(i) score=sum(win)/sum(lose)*-1 return score profit_facter(returns)
まとめ
以上が僕の知る限りのリターン以外のトレード戦略の評価基準です。まあトレード戦略は儲かるか儲からないかがすべてですが、その戦略の特徴を知ることで有利な場面不利な場面を分析することもできますし、より損失を少なく利益を最大化することにつながると思うので知っておいて損はないでしょう。
システムトレードでなくとも勝率、利益率、年間のトレード回数、最大ドローダウン数値など、自分のトレードをしっかりと数値化して意識しておかないと破綻する確率が高くなります。
多くの人々がトレードで成功しない原因は殆どがコレなわけですが、それを管理できる人間というのは、感情やバイアスをすべて捨てたということを意味するので、もはや人間ではないと言えます。
なので個人的にはコンピューターにシステムトレードさせるというのが、時間的な効率や人間らしい生活を送るためにも一番いいんじゃないかなと思います。
→Pythonで自動売買Botを作る①~システムトレードの流れを把握する
→【Scikit-learn】ビットコインの価格を機械学習で予測してみる
→【Python】ビットコイン価格をディープラーニングで予測する方法
→ビットコインと主要なアルトコインの価格には相関関係があるのかを検証する
コメント