株式・FXや仮想通貨の取引の際に、一定のルールを使って売買する事があります。

 

そのルールで長期間売買したときに利益が出るのか!?

 

投資を実践する際に一番知りたいことですよね。

 

もちろん将来の予測は出来ませんが、過去のデーターがあればシミュレートすることが出来ます。

 

Pythonを使って投資戦略をシミュレートする方法を紹介します。

 

投資戦略

 

今回シミュレートする投資戦略は「移動平均線交差戦略」です。

 

もちろんコードの一部を書き換えれば、その他の投資戦略のシミュレートに応用出来ます。

 

「移動平均線交差戦略(ゴールデンクロス・デッドクロス)」とは?

 

移動平均線交差戦略(ゴールデンクロス・デッドクロス)とは、どのような投資戦略なのでしょうか?

移動平均線交差戦略は、短期移動平均線と長期移動平均線が交差したタイミングで、株を売買するトレード手法です。

 

Pythonコード解説

 

ここからは、サンプルコードをご覧に入れながら解説を進めます。

 

損益シミュレート対象銘柄を指定する

 

損益シミュレート対象銘柄を指定します。

今回のサンプルコードでは、日経平均株価の日足データーを使用します。

 

シミュレートする移動平均の値を登録

 

短期移動平均線と長期移動平均線の値を登録します。

デフォルト値はそれぞれ 25 と 200 を設定。

 

※下のコードでは短期移動平均線の値を130にしています。

短期: 130 長期: 200

 

必要があれば株価データーを取得する

 

シミュレート対象のデーターは、時系列の価格情報があれば何でもOKです。

初心者の方が、このブログ記事を見て一緒に作業できるように株価取得の手順もご紹介します。

 

株価データーの取得先はいつもお世話になっているこちら。 https://www.investing.com/

 

この、大手金融情報サイトのInvesting.comから経済データを取得する事の出来るPythonライブラリー「investpy」を使用します。

 

※サーバーへ過度な負担を掛けることの無いよう、連続で長期データーを取得する事などは控えてください。

 

指定された移動平均の値で、シミュレートを実行する

 

株価データーを読み込んで、シミュレートを進めます。

 

2001年1月5日から、2022年8月12日までの日経平均株価データーを取得しています。

データー取得元:https://www.investing.com/

 

日毎の損益金額を算出

 

前日終値から当日の終値を引いて、1日毎の損益金額を算出します。

 

 

移動平均の値と売買フラグの算出

 

短期・長期移動平均の値と売買フラグを算出します。

 

移動平均は、rolling().mean()で簡単に算出する事ができます。

df[‘SMA_S’] = df[‘Close’].rolling(SMA_s).mean()
df[‘SMA_L’] = df[‘Close’].rolling(SMA_l).mean()

 

売買フラグはこちらのコードで算出します。
# もし、短期移動平均線[‘SMA_S’]が長期移動平均線[‘SMA_L’]よりも大きければ 1 そうで無ければ -1
# np.where( 短期移動平均線[‘SMA_S’] > 長期移動平均線[‘SMA_L’] ならば 1 、 そうで無ければ -1
上記条件をコードに書くと、df[‘Position’] = np.where(df[‘SMA_S’] > df[‘SMA_L’], 1, -1)

 

 

ベクトル化バックテスト

 

ベクトル化バックテストを実行します。

 

「ベクトル化」って何?という方は、こちらのサイトさんの記事がシンプルで参考になると思います。

https://applingo.tokyo/article/6949

 

■移動平均線交差トレードのルール

短期移動平均線が長期移動平均線より上ならば「買い」
短期移動平均線が長期移動平均線より下ならば「売り」

※移動平均線が交差する事が分かった日の終値で売り買いを入れ替える
※手数料、スリップページ、税金等は考慮しない

 

■Pythonコードでのフラグ付け

短期移動平均線が長期移動平均線より上ならば「1」
短期移動平均線が長期移動平均線より下ならば「-1」

 

前日の終値で投資戦略が確定するので、前日shift(1)と日々の損益を掛ける事により投資戦略での損益を算出します。

 

上の例では、たまたま表示されている範囲ではフラグがすべてマイナス(売り戦略)でした。

 

投資戦略での損益累積和

 

投資戦略での損益累積和を算出します。

 

 

グラフ表示

 

損益をグラフ化します。

グラフ描画にplotlyというライブラリーを使用します。

 

plotlyの解説はこちらの記事をご覧下さい。

初心者向けチャート分析方法を解説。Pythonとplotlyで株価分析 動くチャートが描けます![サンプルコード解説]

 

plotlyをインポート

 

plotlyというライブラリーをインポートします。

※事前にplotlyのインストールを済ませておいてください。

 

 

データーフレームの日付がインデックスだとplotlyで描画されないので、インデックスから外す

 

この記事で紹介するPythonコードでは、データーフレームの日付がインデックスだとplotlyで描画されません。

Dateインデックスから外します。

 

 

plotryでグラフ表示

 

いよいよplotryでグラフ表示します。

 

 

plotlyでは右側の凡例をクリックすると、表示のオンオフを切り替えることが出来ます。

下のグラフでは、日経平均株価の終値、株を持ち続けたときに得られる損益、移動平均クロス戦略を適応したときの損益を表示しています。

パフォーマンスは、何も考えずに株を持ち続けた方が良い結果となっています。

 

ご自分で、他の移動平均線の組み合わせを試してみてください。

 

 

参考文献

 

参考にさせていただいた書籍はこちらです。

 

Pythonによるファイナンス

発行元の O’Reilly japan から書籍の画像をお借りしています。

 

※アフリエイト契約はしていません。

 

まとめ

 

投資戦略をPythonでシミュレートする方法を解説しました。

コードの一部を書き換えることによって、他の投資戦略のシミュレートも可能です。

利益が出来ると思われる戦略が、期待外れだったり。。。

そんな事が投資する前に予測できます。

 

相場で戦える実力は、相場でしか養えません。

相場で実際に痛い目に会わなければ、真の成長は得られないでしょう。

 

ただし、投資資産にも限りがあります。

 

シミュレートは未来の損益を正確に予測することは出来ません。

しかし、大切な投資資産を守る役目は果たしてくれるはずです。

 

後日、最適な移動平均線の組み合わせを算出するコード解説も行う予定です。

 

関連動画

 

 

 

この記事を書いた人

 

あしおゆたか

投資歴21年の個人投資家

机上の理論ではなく、実体験に基づいた記事作りをモットーにしています。

スポーツクラブに毎週2日~3日通い、サウナ後の暴飲暴食が趣味。(現在自粛中)

◇主な投資対象
日本株式
株式ETF(上場投資信託)
日経225先物
日経225先物オプション

◇運営者情報はこちら