bookloveru2

2021年3月15日8 分

pythonで株価分析➉【Apple株とビットコインを自動売買プログラムで運用した結果】

最終更新: 2021年11月1日

皆様、こんにちは。

今回は、大人気シリーズ「pythonで株価分析」の第10弾です❕

本記事では、Apple株とビットコインを自動売買プログラム(シストレ)を使って、運用したらどうなるのか❓を検証していきます。('ω')ノ

尚、今回は実際のマイ・マネー💲(実弾)は使用せず、pythonで自動売買プログラム(シストレ)を構築。仮想ストラテジーの基、バックテストにて運用結果を見ていきます。

※ストラテジー:システムトレードにおける戦略のこと。

今回も、コピペで行ける様、しっかりとpythonコードの解説をしていきますので、グーグルコラボのご準備をお願い致します。

では、早速行ってみましょう!(^^)!


目次

自動売買プログラムの根幹【ストラテジー】とは❓

Apple株とビットコインを移動平均線を使って、ゴールデンクロスで売買してみた(*‘ω‘ *)

pythonコード解説

機械学習でAppleの今後の株価を予測して見た

python一括コード


自動売買プログラムの根幹【ストラテジー】とは❓

ストラテジーとは、システムトレードを行うにあたっての戦略を意味します。

例えば、至極一般的な手法に、『5日移動平均線が25日移動平均線を上回ったら、買いシグナル点灯【所謂、ゴールデンクロス】』というものがあります。逆に、『5日移動平均線が25日移動平均線を下回ったら、売りシグナル点灯【所謂、デットクロス】』というものがあります。

イメージ図👇

マネックス証券より https://info.monex.co.jp/technical-analysis/indicators/001.html

※私もマネックス証券を愛用しています(^_-)-☆

この他にも、統計学の標準偏差の考え方を使用した、ボリンジャーバンドで売買のタイミングを決定する手法など、テクニカル分析を使用した売買ストラテジーは星の数ほどあります。

ボリンジャーバンドのイメージ図👇

マネックス証券より https://info.monex.co.jp/technical-analysis/indicators/003.html

ストラテジーとは、これらの基本的なテクニカル分析に、ご自身の判断基準を付け加えて構築される売買戦略だと言えます。

例えば、

「イールドカーブが予想以上にフラット化したら、株式は買い。」とか、

「原油が値下がりしたら、株式は売り。」とか、

「明日の天気が雨だったら、株式は全力買い。」

といった、ご自身の独自の戦略を構築し、売買の判断基準となるものがストラテジーです(`・ω・´)ゞ

数学や物理が得意な方や、統計学、計量経済学を学んだ人たちは、その知識を活かして独自の数理モデルを構築し、ストラテジーを設計。

そのストラテジーを自動売買プログラムに落とし込んで、シストレを行うといったことを実行します。

※余談ですが、数理モデルとは、数学的な手段を用いて記述された、対象のデータ生成ルールを模擬した数式のことを言ったります。

つまり、世の中で起きている現象などを、一般化された数式で記述する。その数式を見つけることが、数理モデルを構築する、という意味です。

『株の自動売買で言えば、この数式に沿って、株価は日々変動しているんじゃないか!?』

といった、利益の根源になりそうな数式を探す作業が、数理モデルの構築と言えます。

数理モデルをザックリと学びたい方には、下記書籍がオススメです(*^-^*)。

江崎貴裕 (著):データ分析のための数理モデル入門 本質をとらえた分析のために

Kindle版 ¥2,600-


❷Apple株とビットコインを移動平均線を使って、ゴールデンクロスで売買してみた(*‘ω‘ *)

では、ここからは、先程例に挙げた、至極一般的な手法である、

『5日移動平均線が25日移動平均線を上回ったら、買い』。

『5日移動平均線が25日移動平均線を下回ったら、売り』。

という単純なストラテジーを使って、Apple株を自動売買してみたら、どうなるのか❓を見ていきます。

Apple株を選んだ理由は2点。

①現在の株式時価総額が世界一。

②2007年に、大統領就任前のバラク・オバマに、法に触れなければ、Appleの株を山のように買いたいね。すごい大物になるぞ、あれは”と言わせたからです。

では、そんなジョブズ率いるスーパースター銘柄Apple株を、とても単純な移動平均線だけを使って、自動売買していたら、どうなっていたのか❕❓を見ていきます(・ω・)ノ

期間:2007年3月15日~2021年3月15日 現在まで

※ちょうどオバマ大統領がApple株が欲しいと言っていた時期をスタート地点とします(´∀`*)ウフフ

比較条件

【Apple株を100ドル(≒約1万円)分買って、放置していた場合。】と、

【Apple株を100ドル(≒約1万円)分買って、ストラテジー通り売買していた場合】と、でどちらが利益を上げたかを比較していきます。

とりあえず、結果です👇

HODL:100ドル分買って、放置した場合。

EMA return:100ドル分買って、ストラテジー通り自動売買した場合。

HODLの圧勝という結果に終わりました(・ω・)ノ

HODL:100ドル分買って、放置した場合では、14年間で、約4,400ドル(43倍)に大化けしました(・ω・)ノ

一方、

EMA return:100ドル分買って、ストラテジー通り自動売買した場合では、14年間で、583ドル(5倍)にしかなりませんでした(´;ω;`)ウゥゥ

テクニカル分析で最も初歩的かつ有名な手法を持ってしても、購入して寝てる。』という動作に勝つことは出来ませんでした(´;ω;`)ウゥゥ。これが、自動売買・ストラテジー構築の難しいところです。

マイ・マネー(実弾)を使用しなくて良かった ε-(´∀`*)ホッ。

因みに、これをビットコインで試した場合、こんな感じです👇

HODL:100ドル分買って、放置した場合では、約12,200ドル(122倍)に大化けしました(・ω・)ノ

一方、

EMA return:100ドル分買って、ストラテジー通り自動売買した場合では、4,000ドル(40倍)でした(´;ω;`)ウゥゥ

Apple株よりは健闘している様に見えます。

恐らくこれは、ビットコインが群雄割拠の株式相場ではなく、知名度および出来高ともに、脆弱で、テクニカル的にイージーであった時代が背景にあると考えられます。


❸ pythonコード解説

では、コードです👇

はい!ドン❕

まずは必要なモジュールをインストール。

対象期間の株価推移をプロットします。

import numpy as np
 
import pandas as pd
 
import datetime
 
import pandas_datareader.data as web
 
import fix_yahoo_finance as yf
 
import matplotlib.pyplot as plt
 

 
start = datetime.date(2007,3,15)
 
end = datetime.date.today()
 

 
codelist = ["AAPL"]
 
AAPL = yf.download(codelist, start=start, end=end)["Adj Close"].dropna()
 

 
AAPL
 
# データを可視化する
 
AAPL.plot()

変化率をグラフ表示👇

スタート日に100ドル分Apple株を購入した場合の増減額を表示👇

移動平均線を作成👇

ストラテジーを構築👇

『5日移動平均線が25日移動平均線を上回ったら、買い』。

『5日移動平均線が25日移動平均線を下回ったら、売り』。

結果です👇

HODL時と自動売買プログラム稼働時の結果比較。

こうして、単純な移動平均線を使用したストラテジーで自動売買プログラムを実行した結果が視覚化されました❕

お疲れ様でした。(`・ω・´)ゞ

機械学習でAppleの今後の株価を予測して見た

最後に、Apple株の未来を予測して見ましょう(・ω・)ノ

学習期間:2007年3月15日から2021年3月15日現在まで

予測した株価:2021年3月~2022年3月までの1年間(未来)

以下グラフです👇

黒い点が実際の株価です。

青い線が株価の予測値です。

赤い線がトレンドです。

薄い水色のバンドが株価の信頼区間です。

垂直に引かれた赤い破線はトレンド転換点です。


 

現在は1株121ドル。1年後は1株141ドル程度

この予測からは、『既に株価が弾けてるから、良く分かんねーぜ(^_-)-☆でも、まだまだ行けんじゃね❕❓❓』

と言っている様に感じます。

つまり、天井ですね('ω')ノ

値崩れに気をつけましょう!(^^)!

【まとめ】

今回は、単純なストラテジーを構築し、その戦略の基での結果を見ていきましたが、数理モデルやストラテジーというものは、あくまで、『仮定』をモデル化しただけであって、現実の値動きを完全に模擬できるものではありません。

データ解析に深くハマると、良くできた数理モデルが現実を説明出来ているような、【ピグマリオン症】という錯覚に陥ります(`・ω・´)ゞ

しかし、これには気をつけましょう!(^^)!

データ解析や数理最適化【AI】を探求する行為は、私たちを、未知のものを解決する「天才名探偵シャーロック・ホームズ」に近付いている様な感覚で、自分自身を高揚させますが、ハマり過ぎない様に、他者との会話や外部記憶装置も重要です❕

何かまとめが意味分かりませんが、数理モデルよりも利益よりも、ビールとビキニが好きだぜっ❕という最低な言葉で締めくくりたいと思います。(`・ω・´)ゞ(面倒くさくなってきた(笑))

皆様と私に爆益荒れ❕

❹機械学習でApple株の今後の株価を予測して見たのPythonのコードが見たい方はこちらの過去記事をご覧下さい。👇

コード全部載せてるので、コピペでOK(^_-)-☆です。

https://www.bookloveru2.com/post/python-analysis7


➎ python一括コード

あっ、一括コード載せときますね(^_-)-☆

以下です。👇今後ともよろしくお願いいたします。

import numpy as np
 
import pandas as pd
 
import datetime
 
import pandas_datareader.data as web
 
import fix_yahoo_finance as yf
 
import matplotlib.pyplot as plt
 

 
start = datetime.date(2007,3,15)
 
end = datetime.date.today()
 

 
codelist = ["AAPL"]
 
AAPL = yf.download(codelist, start=start, end=end)["Adj Close"].dropna()
 

 
# データを可視化する
 
AAPL.plot()
 

 
# 変化率を計算する
 
change = AAPL.pct_change()
 
print(change)
 
change.plot()
 

 
# 変化率からトータルリターン(累積変化率)を計算する
 
#この累積変化率のスタートを1として、100倍すると、HODLしていたという計算。
 
trade_return = (change + 1).cumprod()
 
trade_return
 

 
#100ドル分Apple株を買って、ホールドしていた場合のリターン
 
trade_return[0] = 1
 
trade_return = trade_return*100
 
trade_return
 

 
#ここでApple株の移動平均を計算する
 
#EMA5には5日移動平均を代入。
 
#EMA25には25日移動平均を代入。
 
EMA5 = AAPL.rolling(5).mean()
 
EMA25 = AAPL.rolling(25).mean()
 
EMA5
 

 
EMA25
 

 
#トレード戦略から売買シグナルを計算する
 
signal = []
 
for i in range(len(AAPL)):
 
#5日平均が25日平均より上なら買い=1とする
 
if EMA5[i] > EMA25[i]:
 
signal.append(1)
 

 
# 5日平均が25日平均より下なら売り=-1とする
 
elif EMA5[i] < EMA25[i]:
 
signal.append(-1)
 
else: signal.append(0)
 

 
print(signal)
 

 
# プロット用ライブラリの読み込み
 
from pylab import rcParams
 
import matplotlib as mpl
 

 
#キャンバスのサイズを大きくする
 
rcParams['figure.figsize'] = 10,5
 

 
# 日次変化率×トレードシグナルの累積変化率で
 
# トレード戦略に従ってトレードした累積リターンを算出する
 
backtest_return = ((change[1:-1] * signal[0:-2]) + 1).cumprod()*100
 
x = AAPL.index[0:-2]
 

 
backtest_return
 

 
# matplotlibでリターンの推移を可視化
 

 
plt.title('trade return')
 
plt.plot(x, trade_return[0:-2], 'b', label='HODL', alpha=0.8, linewidth=0.5)
 
plt.plot(x, backtest_return, 'orange', label='EMA return', alpha=1, linewidth=1.5)
 
plt.grid(which='both')
 
plt.legend()
 
plt.show()

pythonでプログラミングがしたい!!
 
pythonを学びたい!という方には、
 
オンラインプログラミング教室『Aidemy アイデミー』がお勧めです。
 
ご自身でプログラム環境を用意する必要は無く、サイトへアクセスするだけです。 創業者は東京大学工学部卒の石川聡彦さん。
 
著書に『人工知能プログラミングのための数学がわかる本』(KADOKAWA/2018年)など。
 
無料で、お試しもできますので安心です。
 
お時間ある方は下記リンクを覗いてみてはいかがでしょうか(*'ω'*)

    12340
    6