見出し画像

【Python】今日から始めるシストレ講座 ~シミュレーション結果~

こんにちは、今まさにバックテスト環境をゴリゴリプログラミング中のまあさ(@masa_systra)です。

それでは早速本日の内容始めていきましょう!!

-シミュレーション結果の雛形作成


✅おさらい

画像1

前回記事では「過去の株価取得」やりました。たった2行で終わるんでしたね。じゃあ今日はどの部分をやるかというと、「STEP5 シミュレーション結果出力」です。
「おいおい、また馬鹿なこと言ってるよ。まだ売買もしてないのに結果なんか出せるわけないだろ?」て思いましたか?まあそう言わず。確かに具体的な結果の「値」は出てません。そりゃシミュレーションしてないんだから当然。ですが結果として欲しい「項目」は今の時点で考えておかないといけません。次章で具体的に考えていきましょう。


✅項目を考える①

それでは実際に。まずはバックテストの意義からを考えると、

勝てる売買ルールか、過去データを使って検証すること

つまり勝てるか負けるかわからないといけないですね。この場合は、勝つ=資産が増える、負ける=資産が減る。
なので「最終的な資産」を見て、「開始当初の資産」からどのくらい増えているか/減っているかはマスト。もっと言うなら「資産の推移」が見たいですね。過去何度かある著しい不況の際に、自分の考えたルールでどう言う資産推移を示すのか、逆に好況の時は?気になりますよね。
資産というとちょっと曖昧ですので、もうちょっと踏み込むと
現金(口座余力)」「保有株の評価額」「総資産(現金+評価額)」。こんなところでしょうかね。
いったんまとめますと、

-「資産推移」を出力する
-資産とは「現金」「評価額」「総資産」のこと


✅項目を考える②

あとはトレード1回あたりの「期待値」や「トレード回数」も気になりますよね。何回トレードして最終的な資産になるのか。例えば過去10年のデータをバックテストしたとして、3回のトレードで最終的な資産が2倍になっていたとしましょう。あなたはこのルールを採用しますか?少なくともこれ1本ではいかないですよね。次そのトレードチャンスがいつやってくるか、はてまたもう二度と巡ってこないかもしれない。ちょっと抽象的ですが、

妥当な「トレード回数」でプラスの「期待値」であること

は最低限の結果として欲しいでしょう。

「期待値」をもう少し細かく見ていくと、1回のトレードにおいて、「いつ」「いくら」で「何株」エントリーして、「いつ」「いくら」でエグジットしたのか。その結果「損益」はどうなったか。これも結果として欲しいですね。
こちらもまとめますと、

-「トレード回数」と「期待値」を出力する
-期待値を詳細に、「日にち」「株価」「単元数」「損益」を記録する


✅実際にプログラミングしてみた

これまでの内容をまとめると、

🟣「現金」「評価額」「総資産」の資産推移の結果を出す
🟣1トレードごとに、「日にち」「株価」「単元数」「損益」を記録する
🟣最終的な「トレード回数」と「期待値」を確認する

ではこれらの結果を出すための雛形をプログラミングしていきましょう。前回の「株価取得」と併せて、このようになってます。

"""
前回の記事内容です。
S&P500ティッカー(VOO)をYahoofinanceに投げて、過去の株価を取得する
"""
import yfinance as yf
SP500Data = yf.download("VOO", period="max")

"""
今回の記事内容です。
シミュレーション結果の雛形を作成する
"""
import pandas as pd
MoneyHistory = pd.DataFrame(index=SP500Data.index, \
                            columns=['現金', '評価額', '総資産'])
TradeHistory = pd.DataFrame(index=range(1, 1000), \
                            columns=['保有フラグ', 'エントリー日', \
                                     'エグジット日', '保有期間', \
                                     'エントリー価格', 'エグジット価格', \
                                     '単元数', '損益額', '損益率'])

上半分が前回の「株価取得」部分で、下半分が今回の「結果の雛形作成」部分となってます。
詳しく見ていきますと、
"import pandas as pd"はpandasを使いたいときのおまじないです。
その次の"MoneyHistory"が資産推移表を、そして最後"TradeHistory"が1回ごとのトレード履歴表を作っているというわけですね。
これだけではなんのこっちゃだと思うので、実際にCSV出力してみましょうか。


✅実際に実行してみた

MoneyHistory.to_csv('MoneyHistory.csv')
TradeHistory.to_csv('TradeHistory.csv')

それでは"MoneyHistory.csv"から、

画像2

A列のDateは、バックテストする株価データと対応した日付を入れてあげればOKです。あとは1日ずつ資産データを入れていく表になります。
続いて"TradeHistory.csv"は、

画像3

こちらはトレードするごとにデータを入れていく表です。
例えばエントリーしたのであれば、「エントリー日」「エントリー価格」「単元数」を入れて、「保有フラグ」を"1"とでもしておきます。保有している株をエグジットするときは「エグジット日」「エグジット価格」を入れて、「保有フラグ」を"0"にします。あとはそれらから「保有期間」と「損益額」「損益率」を計算すると。


✅まとめ

まだ肝心の1日ずつループさせる部分ができてないので、結果のイメージわきにくいかもしれませんが、何がともあれ「雛形」はできましたね。プログラミング初学者の方にとっては、こういう小さな成功(=できた!)が大事です。どんなに複雑難解なプログラムも、この小さな成功の積み重ねで成り立っていますからね!
ではまた次の記事でお会いしましょう!!(^^)/~~~

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