PythonでFinTech講座 https://python-fin.tech Pythonを学んで投資に活用するブログ Sun, 24 Aug 2025 02:29:27 +0000 ja hourly 1 https://python-fin.tech/wp-content/uploads/2024/07/cropped-0cedf80a00d4ae19601e849c627722c7-32x32.png PythonでFinTech講座 https://python-fin.tech 32 32 みんなのシストレのストラテジーの選び方を解説 https://python-fin.tech/min-fx-strategy/ Sun, 24 Aug 2025 02:29:19 +0000 https://python-fin.tech/?p=1833

FXの自動売買サービス「みんなのシストレ」では、投資家が公開している数多くのストラテジー(自動売買プログラム)から、自分に合ったものを選ぶことができます。 しかし、「どのストラテジーを選べばいいの?」「勝てる戦略をどう見 ... ]]>

FXの自動売買サービス「みんなのシストレ」では、投資家が公開している数多くのストラテジー(自動売買プログラム)から、自分に合ったものを選ぶことができます。

しかし、「どのストラテジーを選べばいいの?」「勝てる戦略をどう見極めればいいの?」と迷う方も多いでしょう。

本記事では、初心者でも安心して使えるようにストラテジー選びの基本ポイントをわかりやすく解説します。

ストラテジーとは?

ストラテジーとは、FX自動売買における「売買ルール」や「取引戦略」のことを指します。

みんなのシストレでは、このストラテジーが自動的に動いて取引を行い、ユーザーは自分に合ったストラテジーを選んで運用します。

つまり、どのストラテジーを選ぶかが収益に大きく影響するため、慎重に選ぶ必要があります。

ストラテジーの選び方のポイント

緩やかな右肩上がりの損益グラフ

運用成績が優秀なストラテジーは、長期間にわたって緩やかな右肩上がりの損益グラフを示します。

短期間の急激な利益だけでなく、年単位で損益グラフをチェックし、安定して資産を増やしているものを選ぶことが重要です。

十分な運用期間とトレード回数

トラテジーの実力を正確に判断するためには、ある程度の実績サンプルが必要です。

少なくとも半年から1年以上、かつ50回以上のトレード回数をクリアしているストラテジーを選ぶようにしましょう。

PF(プロフィットファクター)

PFとは総利益を総損失で割った数値で、ストラテジーがどれだけ効率的に稼いでいるかを示します。

PFは最低限1より大きいことが条件であり、2以上を目安にすると、より高い利益が期待できます。

最大ドローダウンを確認する

最大ドローダウンとは、運用中にどれだけ資産が減ったかを示す指標です。

直近半年程度で最大ドローダウンが何度も更新されているストラテジーは、最近の成績が不振である可能性が高いため、選択を避けるのが無難です。

勝率だけでは判断しない

勝率が高いということは損切りの回数が少ないことを意味しますが、これは大きな含み損を抱えたり、ロスカットにつながったりするリスクを伴う場合があります。

勝率が6割程度あれば十分であり、あまりに高すぎる勝率には注意し、それが本当に「利確している確率」なのかを注視してください。

損小利大

損失を最小限に抑え、利益を最大化するという投資の基本が成績に表れているかをチェックします。

平均利益が平均損失を上回り、最大利益が最大損失を上回っているストラテジーであれば、損切りが適切に行われていると判断できます。

初心者におすすめの選び方

投資において重要なポイントのひとつが、市場に長く生き残るということです。

強制ロスカットで退場してしまわないためにも、以下のことを重視してストラテジーを選択してください。

  • 収益率よりも安定性を重視する
  • ドローダウンが小さいものを優先する
  • 稼働期間が長いストラテジーを選ぶ

まとめ

みんなのシストレでは、ストラテジー選びが成績を大きく左右します。

「高い利益率」よりも「安定した運用実績」と「リスク管理」を重視するのがポイントです。

まずは少額から自分に合った運用スタイルを見つけていきましょう。

]]>
みんなのシストレの取引方法をわかりやすく解説 https://python-fin.tech/min-fx-trading-method/ Sat, 23 Aug 2025 00:59:27 +0000 https://python-fin.tech/?p=1806

前回の記事ではみんなのシストレの口座の開設方法を解説しました。 今回は取引方法の解説です。 みんなのシストレは、FX自動売買(システムトレード)サービスです。みんなのFXで実際に取引しているトレーダーや自動売買プログラム ... ]]>

前回の記事ではみんなのシストレの口座の開設方法を解説しました。

今回は取引方法の解説です。

みんなのシストレは、FX自動売買(システムトレード)サービスです。
みんなのFXで実際に取引しているトレーダーや自動売買プログラム(ストラテジー)を選択することで、自分の代わりに24時間自動で取引を行ってくれます。

本記事では みんなのシストレの具体的な取引方法 をわかりやすく解説します。

みんなのシストレの取引の流れ

みんなのシストレは、以下の4ステップで取引を始められます。

  1. 口座にログインして入金
  2. ストラテジー(自動売買プログラム)の選択
  3. 運用数量の設定
  4. 取引開始

口座開設がまだの場合は、下記の記事を参考にしてください。

それでは、それぞれ詳しく見ていきましょう。

口座にログインして入金

口座開設完了のメールを確認する

口座の開設が完了するとメールが送られてくるので、「入金して取引してみる」をクリックします。

ログインIDとパスワードを入力してログインする

初めてログインした時に、第2パスワードの設定を求められました。

入金する

マイページの「入金」から投資資金を入金できます。
ネットバンクから⼊⾦⼿続きを⾏うと、⼿数料無料でほぼリアルタイムでの⼊⾦ができます。

シストレのタブを選択して、プロフィールを登録する

ストラテジー(自動売買プログラム)の選択

ストラテジーを選択する

ランキング画面からストラテジーを選び、フォローします。

取引設定画面に移動する
フォローリストの中から取引したいストラテジーをセレクトする

投資数量を設定

ストラテジーをセレクトすると、セレクトリストにストラテジーが表示されるので、投資数量を設定します。

取引開始

投資数量を入力するとシミュレーションデータに将来の運用成績のシミュレーション結果が表示されます。

「取引開始」をクリックすると取引が始まります。

用語の解説

ストラテジーを選ぶ際に参考にする、指標の用語を解説します。

1LOTあたりの収益率

1LOT(10,000通貨)あたりの損益が何倍になったのかを表す指標です。

1LOTあたりの収益率は、次の計算式で求められます。

収益率(%)=(損益額 ÷ 必要証拠金)× 100

  • 損益 = (決済価格 − 注文価格)× LOTの取引通貨数 + スワップポイント
  • 1ロットの必要証拠金 = 現在の為替レート × 1LOTの通貨数 ÷ レバレッジ

例えば、1ロットの必要証拠金が10万円として3万円の損益得た場合、収益率は30%となります。

1LOTあたりの合計収益

価格差とスワップ収益を合算した1LOTあたりの最終的な損益(=合計収益)を表す指標です。

1LOTあたりの合計収益は、次の計算式で求められます。

合計収益=(決済価格−注文価格)×LOTの通貨数+スワップポイント

取引回数

一定期間の売買の回数です。

1ヶ月、3ヶ月、6ヶ月、1年から選択できます。

PF

PFとはプロフィットファクター(Profit Factor)」の略で、FXやシステムトレードの成績を評価する指標の一つです。

次の計算式で求められ、期間内に得た利益の合計を損失の合計で割った値になります。

PF = 総利益 ÷ 総損失

数値が1.0以上であれば利益が出ている状態で、数字が大きいほど効率的に利益を上げていることを示しています。

リピート注文

リピート注文とは、あらかじめ設定した条件(価格レンジや注文数量、利益確定幅など)に基づいて、自動的に同じまたは類似の売買注文を繰り返し発注する取引手法です。

具体的には、通貨ペアの価格が一定範囲(レンジ)内で上下するときに、買い注文でエントリーし、設定した利益幅で売却して利益を繰り返し積み上げる仕組みを指します。

出典:みんなのシストレ

以下のような特徴があります。

  • 一定の価格レンジ内で利益を積み上げることが得意
  • 価格が一方向に大きく動くトレンド相場では効果が薄い場合が多い
  • 手間をかけず自動売買できるため忙しい人に向いている

まとめ

以上、みんなのシストレの取引方法について解説しました。

みんなのシストレの取引は、

  1. 口座にログインして入金
  2. ストラテジー(自動売買プログラム)の選択
  3. 運用数量の設定
  4. 取引開始

というシンプルな流れで始められます。

FXの自動売買をしたいけどPythonの勉強をする時間がない場合は、みんなのシストレを利用する方法もあるので検討してみてください。

]]>
【FXの自動売買の始め方】みんなのシストレの口座の開設方法を徹底解説 https://python-fin.tech/min-fx/ Tue, 19 Aug 2025 16:23:59 +0000 https://python-fin.tech/?p=1787

当ブログではPythonでFXの自動売買するプログラミングの解説をしていますが、 「Pythonに挑戦したけどちょっと難しかった」「もっと簡単にFXの自動売買する方法はないですか?」 といった方もおられるかと思います。 ... ]]>

当ブログではPythonでFXの自動売買するプログラミングの解説をしていますが、

「Pythonに挑戦したけどちょっと難しかった」
「もっと簡単にFXの自動売買する方法はないですか?」

といった方もおられるかと思います。

そこで今回は、FX自動売買(システムトレード)サービスの「みんなのシストレ」の紹介です。

みんなのシストレでは、みんなのFXで実際に取引しているトレーダーや自動売買プログラム(ストラテジー)を選択することで、自分の代わりに24時間自動で取引を行ってくれます。
初心者でも簡単な設定だけで自動売買が始められるサービスです。

FXの自動売買をしたいけど自作するのにハードルを感じる方は、みんなのシストレを利用してみてはいかがでしょうか。

みんなのシストレの特徴

「みんなのシストレ」は、トレイダーズ証券が提供するFXの自動売買(システムトレード)サービスです。
自分で取引ルールを細かく設定する必要がなく、あらかじめ用意されたストラテジー(自動売買プログラム)を選ぶだけで始められるのが大きな特徴です。

24時間自動でトレード

みんなのシストレは、投資戦略に基づいて常にルールに沿ったトレードを24時間自動で行います。

Pythonで自動売買のプログラムを作成すれば自由度の高いシステムトレードが可能ですが、プログラミングの知識が必要であったり、作成する時間もかかるので上級者向けです。

一方、みんなのシストレでは、一度ストラテジーを設定すればPCの電源を落としていてもシステムが24時間自動で取引してくれるので、忙しい社会人やプログラミングの勉強する時間がない人でも手軽に自動売買を始めることができます。

初心者でも始めやすい

みんなのシストレは、運用実績ランキング上位の自動売買の手法を選べるため未経験者でも始めやすいです。

プログラムを自作する場合は、トレード手法を考えたり、その手法が有効か検証(バックテスト)をする必要があります。

一方、みんなのシストレでは、収益率や勝率などのランキングから成績の良い手法を選べるので、FX初心者でも上級者と同じ取引ができます。

少額から運用が可能

みんなのシストレの取引単位は1,000通貨なので、少額から運用ができます。
例えば、1ドルが150円とすると約6,000円からとなります。

また、口座開設や口座維持、ロスカット、クイック入金、出金などに関する手数料が全て無料なので、低コストで運用が可能です。

みんなのシストレの口座の開設方法

みんなのシストレの口座開設は、スマホで本人認証がおすすめです。
最短当日に取り引きを開始することができます。

PCをお使いの場合は、右クリックから「お使いのデバイスに送信」をすると、手順を確認しながら作業ができて便利です。

みんなのシストレ」の公式サイトにアクセスします。

「無料の口座開設はこちら」をクリックします。
メールアドレス、生年月日、パスワードを入力してアカウントの仮登録をします。
登録したメールアドレス宛にメールが届くので、メールアドレス認証をします。

次に「口座開設を続ける」をタップします。

口座申込フォームに必要事項を入力します。

まず各種規約などを確認して、「承諾する」にチェックを入れます。
そのあとに氏名や住所などの必要事項を入力します。

マイナンバー書類と本人確認証類を提出します。

まずマイナンバーカードの裏面の写真をアップロードします。

本人確認証類は「スマホで本人認証」が早くて便利です。
画面の指示に従い、運転免許証の撮影をします。

以上で口座の申し込みは完了です。

口座開設の審査が開始されます。

審査が完了すれば取り引きが開始できます。

まとめ

この記事では、みんなのシストレについて解説しました。

みんなのシストレには、次のような特徴があります。

  • 取り引きに時間を割けない人でも24時間自動でトレードができる
  • コピートレードでFXの初心者でも始めやすい
  • 約6,000円からの少額で運用が可能

みんなのシストレは、実際に取引をしているリアルなトレーダーの取引をもとに、24時間自動売買を行うサービスです。Pythonで自動売買プログラムを自作するのは難しいと感じた方は、いちど利用してみてはいかがでしょうか?

次回は、実際の取引方法の解説をします。

なお、FXは常に運用リスクが伴います。
投資の実行は必ずご自身の責任で判断されるようお願いします。

最後までお読みいただき、ありがとうございました。

]]>
【Python】株のセクターの相関係数を可視化する方法を解説 https://python-fin.tech/sector/ Sun, 11 May 2025 12:46:28 +0000 https://python-fin.tech/?p=1754

株式投資では、業種や産業ごとに分類されたセクター(例:金融、IT、エネルギーなど)によって似通った値動きをしたり、逆に異なった値動きをすることがあります。セクター間の相関関係を知り、相関関係の低いセクターの銘柄を選択する ... ]]>

株式投資では、業種や産業ごとに分類されたセクター(例:金融、IT、エネルギーなど)によって似通った値動きをしたり、逆に異なった値動きをすることがあります。
セクター間の相関関係を知り、相関関係の低いセクターの銘柄を選択することでリスクを分散させることができます。

この記事では、Pythonを使って株のセクター間の相関係数を可視化する方法を、初心者でもわかりやすく解説します。

セクターの相関係数とは

セクターの相関関係とは、異なる業種(セクター)同士の株価やリターンがどれくらい同じ方向に動くか(相関性)を示します。
相関係数は「-1」から「+1」までの値をとり、+1に近いほど値動きが似ており、0に近いほど独立、-1に近いほど逆の動きをします。

日本株のセクターは、「東証業種別株価指数」による33業種区分(水産・農林業、鉱業、建設業など)がありますが、本記事ではこれを集約したTOPIX-17(17業種)区分のETFで相関関係を可視化します。

相関係数を可視化する方法

今回は、以下のライブラリを使用します。pipでインストールしてください。

  • yfinance: 価格データを取得するためのライブラリ。
  • seaborn: データ可視化ライブラリ。
  • matplotlib: 2Dや3Dのグラフを描画するためのライブラリ。
  • pandas: 時系列データを処理するためのライブラリ。
Python
pip install yfinance seaborn matplotlib pandas

相関係数の可視化のサンプルコード

Python
import yfinance as yf
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import japanize_matplotlib

# 取得する銘柄リスト
tickers = ["1617.T", "1618.T", "1619.T", "1620.T", "1621.T", "1622.T", "1623.T", "1624.T", "1625.T", "1626.T", "1627.T", "1628.T", "1629.T", "1630.T", "1631.T", "1632.T", "1633.T"]

# 株価データを取得(過去1年分)
data = yf.download(tickers, interval="1d", period='1y')["Close"]

# リターンを計算(対数リターン)
returns = np.log(data / data.shift(1))

# 相関係数を計算
correlation_matrix = returns.corr()

# ヒートマップを描画
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap="coolwarm", linewidths=0.5, fmt=".2f", cbar_kws={'label': '相関係数'})
plt.title("株価リターンの相関関係ヒートマップ")
plt.show()

これを実行すると、以下のヒートマップが出力されます。
このヒートマップから1621(医薬品セクター)が他の銘柄と比較して相関関係が低いことが視覚的にわかります。

ポイントの解説

取得する銘柄リスト

Python
# 取得する銘柄リスト
tickers = ["1617.T", "1618.T", "1619.T", "1620.T", "1621.T", "1622.T", "1623.T", "1624.T", "1625.T", "1626.T", "1627.T", "1628.T", "1629.T", "1630.T", "1631.T", "1632.T", "1633.T"]

TOPIX-17(17業種)で取得するETFのコードとセクターは次の通りです。

  • 1617:食品
  • 1618:エネルギー資源
  • 1619:建設・資材
  • 1620:素材・化学
  • 1621:医薬品
  • 1622:自動車・輸送機
  • 1623:鉄鋼・非鉄
  • 1624:機械
  • 1625: 電機・精密
  • 1626:情報通信・サービスその他
  • 1627:電力・ガス
  • 1628:運輸・物流
  • 1629:商社・卸売
  • 1630:小売
  • 1631:銀行
  • 1632: 金融(除く銀行)
  • 1633:不動産

株価データを取得

Python
# 株価データを取得(過去1年分)
data = yf.download(tickers, interval="1d", period='1y')["Close"]

yfinanceで株価データを取得します。

yfinanceの使い方については過去の記事をご覧ください。

リターンを計算

Python
# リターンを計算(対数リターン)
returns = np.log(data / data.shift(1))

data / data.shift(1)で当日の株価を前日の株価で割って、リターンを計算します。

相関係数を計算

Python
# 相関係数を計算
correlation_matrix = returns.corr()

corr()メソッドで各列の間の相関係数が計算されます。

ヒートマップを描画

Python
# ヒートマップを描画
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap="coolwarm", linewidths=0.5, fmt=".2f", cbar_kws={'label': '相関係数'})
plt.title("株価リターンの相関関係ヒートマップ")
plt.show()

seabornheatmapメソッドでcorrelation_matrixのヒートマップを出力することができます。

まとめ

今回は株のセクターの相関係数を可視化する方法について解説しました。

セクターの相関関係は、業種ごとの値動きの似通い方を示し、景気や市場環境、業種再編などで変化します。

相関係数はセクター以外でも応用できるので、商品CFDなどでも試してみてください。

]]>
【初心者向け】ChatGPTでPythonのエラーを解決する方法|よくあるトラブルと対処法まとめ https://python-fin.tech/error-chatgpt/ Sun, 13 Apr 2025 06:26:12 +0000 https://python-fin.tech/?p=1759

プログラミングをしていると、避けられないのがエラーの発生です。初心者のうちは、エラーの意味が分からず手が止まってしまうことも多いですよね。 そんなときに強い味方になるのが、ChatGPTなどのAIチャットツールです。 C ... ]]>

プログラミングをしていると、避けられないのがエラーの発生です。
初心者のうちは、エラーの意味が分からず手が止まってしまうことも多いですよね。

そんなときに強い味方になるのが、ChatGPTなどのAIチャットツールです。

ChatGPTを使えば、学習効率を大きく上げることができます。

しかし、エラーの原因を正しく伝えなければ的確なアドバイスをもらえないこともあります。

この記事では、ChatGPTを使ってPythonのエラーを効率よく解決する方法を初心者向けにわかりやすく解説します。

ChatGPTはエラーの「相談相手」として優秀!

ChatGPTは、自然な言葉で質問できるAIツールです。コードのバグ修正やエラーメッセージの解釈、エラーの解決方法を提案してくれます。

例えば、以下のようなことができます。

  • エラー文をコピペして原因を聞く
  • コード全体を貼り付けてレビューしてもらう
  • どう書けばいいかわからない時のコードの提案

ただし、うまく使うには正しい伝え方が大切です。

ChatGPTでエラーを相談する時のポイント

まずはChatGPTに「pythonのエラーの対処方法を教えて」と依頼しましょう。Pythonエラー対処方法というスレッドができるので、エラーの対処方法を教えてもらうことができます。

エラーメッセージをそのまま貼り付ける

次にエラーメッセージをそのまま貼り付けてみましょう。ChatGPTが対処方法を提案してくれます。

エラーメッセージをそのまま貼ることで、ChatGPTが正確に状況を把握できます。

コードの該当部分を一緒に貼る

エラーだけでは情報が足りない場合は、コードの前後を一緒に載せるのがポイントです。

例えば、次のように質問をします。

TeX
Pandasを使ってCSVファイルを読み込んでいますが、以下のエラーが出ます。

NameError: name 'df' is not defined

以下が該当コードです。

data = pd.read_csv('data.csv')
df.plot()

このように「エラー内容」「コード」をまとめて伝えると、ChatGPTが正確に判断してくれます。

何をしたかったのか目的を書く

エラーを解決するには「どうなれば成功か」をChatGPTに伝えるのが大事です。

例えば、「CSVから読み込んだデータでグラフを表示したいです」というように具体的に指示をします。

目的が明確だと、ChatGPTはより適切な修正コードを提案してくれます。

よくあるエラーと解決方法

SyntaxError(文法エラー)

SyntaxErrorは、コードの構文や書き方が間違っていることを示すエラーです。Pythonでは、コードが実行される前に構文チェックが行われるため、文法的な問題がある場合は即座にエラーが表示されます。このエラーが発生するとプログラムの実行は停止するので修正が必要です。

エラーの解決方法は、エラーメッセージを確認し、指摘された行や周辺コードを修正します。

IndentationError(インデントのミス)

IndentationErrorは、コードのインデント(文章の行頭に空白)が不適切な場合に発生するエラーです。Pythonではインデントがコードブロックを定義するため、インデントの不一致や欠如があるとプログラムは実行されません。

Pythonでは、4つのスペースを使用することが推奨されています。エラーメッセージには問題箇所が示されるので、その行や周辺コードを確認します。

TypeError(不適切な型のオブジェクト)

TypeErrorは、不適切な型のオブジェクトを操作しようとした際に発生するエラーです。

例えば、 整数と文字列を足し算するような異なるデータ型の間で不適切な演算を行った場合に発生します。

Python
result = "Hello" + 123  # エラー発生

解決方法は、データの型を確認して、異なる型同士の操作が必要な場合は、型変換を行います。

まとめ

ChatGPTはエラー解決の強い味方です。ChatGPTを使えば、エラーに悩んで時間を無駄にすることなく、学習効率を大きく上げることができます。

エラーでつまずいたときは、以下の3点セットでChatGPTに質問しましょう!

  • エラーメッセージ
  • 関連コード(前後も含めて)
  • やりたいこと(目的)

どんどん質問してエラー解決力を高めていきましょう!

]]>
【Pythonでテクニカル分析】ARTを計算して視覚化する方法を解説 https://python-fin.tech/art/ Sun, 16 Mar 2025 14:16:51 +0000 https://python-fin.tech/?p=1711

株式や為替、仮想通貨など、様々な金融市場でトレードを行う際に欠かせないのが、適切な分析ツールです。 これらのトレードにおいて、ボラティリティ(価格変動の大きさ)を把握することはとても重要です。その指標の一つとして広く利用 ... ]]>

株式や為替、仮想通貨など、様々な金融市場でトレードを行う際に欠かせないのが、適切な分析ツールです。

これらのトレードにおいて、ボラティリティ(価格変動の大きさ)を把握することはとても重要です。その指標の一つとして広く利用されているのが、ATR(Average True Range)です。

ATRは、相場の変動幅を数値化し、トレード戦略のリスク管理やエントリータイミングの判断に活用できます。

本記事では、ATRの概要から、Pythonを使った計算方法、グラフによる視覚化までを解説します。

ATRとは

ATR(Average True Range)は、指定した期間の価格の変動幅(ボラティリティ)を測るテクニカル指標です。

トレンドの方向性を示すものではなく、どれくらい価格が変動しているかを把握するための指標として使われます。

1970年代半ばに、数々の革新的なテクニカル指標を開発したJ. Welles Wilder Jr.氏が、著書「New Concepts in Technical Trading Systems」で紹介しました。

ATRの使い方

ATRは主に次の目的で使用されます。

ボラティリティの測定

  • ATRが高い:価格変動が大きい(ボラティリティが高い)
  • ATRが低い:価格変動が小さい(ボラティリティが低い)

損切りの設定

ATRを利用して、ボラティリティに応じた損切りラインを設定する手法があります。

例えば、「エントリー価格からATRの1.5倍を損切りとする」などです。

トレンドの強さを判断

ATRが急上昇すると、新たなトレンドが発生する可能性があります。

逆にATRが低いままだと、レンジ相場(横ばい)が続く可能性があります。

ATRの計算方法

ATRの計算方法は以下の手順で行います。

まず1日の値動きで、以下の3つの値のうち最大のものをTrue Range(TR)とします。

  • 当日の高値 – 当日の安値
  • |当日の高値 – 前日の終値|(絶対値)
  • |当日の安値 – 前日の終値|(絶対値)

次に、TRの値を使ってATRを計算します。一般的には14期間の指数移動平均を使用します。

ATR = (前日のATR * (n – 1) + 今日のTR) / n

ここで、nは期間数(通常14)です。

PythonでATRを計算するコード

ATRを計算しグラフで表示するには、以下のライブラリを使用します。

  • pandas: 時系列データを処理するためのライブラリ。
  • NumPy: 数値計算を効率的に行うためのライブラリ。
  • yfinance: 価格データを取得するためのライブラリ。
  • mplfinance: グラフの描画に使用します。

以下のコードを使って、ATRの計算とグラフの表示をします。使用するデータは、2024年の日経平均株価です。

Python
import pandas as pd
import numpy as np
import yfinance as yf
import mplfinance as mpf

# 期間の設定
period = 14

# 株価データを取得(例:日経平均株価のデータを使用)
ticker = yf.Ticker('^N225')
data = ticker.history(start='2024-01-01', end='2024-12-31')

# TRの計算
high_low = data['High'] - data['Low']
high_close = np.abs(data['High'] - data['Close'].shift(1))
low_close = np.abs(data['Low'] - data['Close'].shift(1))

# TRは3つの値の中で最大のもの
tr = pd.concat([high_low, high_close, low_close], axis=1).max(axis=1)

# ATRの計算
atr = tr.rolling(window=period).mean()

# ATRを追加してプロット
apds = [
    mpf.make_addplot(atr, panel=1, color='red', ylabel='ATR')
]

mpf.plot(
    data,
    type='candle',  # ローソク足チャート
    addplot=apds,
    style='yahoo',
    title='Stock Price with ATR',
    ylabel='Price',
    volume=False
)

上記のコードを実行すると、以下のようにローソク足とARTのグラフが出力されます。

ポイントの解説

Python
# 期間の設定
period = 14

periodでARTの期間を設定します。通常は14期間ですが、変更したい場合はこの数値を変更してください。

Python
# TRの計算
high_low = data['High'] - data['Low']
high_close = np.abs(data['High'] - data['Close'].shift(1))
low_close = np.abs(data['Low'] - data['Close'].shift(1))

TRの計算でのポイントは、.shift(1)で当日と前日の価格が比較できるように計算する値をずらします。そして、Numpyの関数のnp.absで計算した値を絶対値にします。

Python
# TRは3つの値の中で最大のもの
tr = pd.concat([high_low, high_close, low_close], axis=1).max(axis=1)

TRは上記で計算した値の最大値になるので、.max(axis=1)で行ごとの最大値を求めます。

Python
# ATRの計算
atr = tr.rolling(window=period).mean()

最後にTRの移動平均線を計算すれば、ARTを求めることができます。

おわりに

この記事では、Pythonを使ってARTを計算し、グラフで視覚化する方法を解説しました。

ARTは、トレンドの方向性を示すものではなく、どれくらい価格が変動しているかを把握するための指標です。他のテクニカル指標と併せて用いることで、より精度の高いトレードに繋がるでしょう。

Pythonを活用すれば、ARTに限らず様々な指標を簡単に計算できます。この記事をきっかけに、ぜひ他のテクニカル指標にも挑戦してみてください。

]]>
【Python】yfinanceが使えなくなった時の対処方法を紹介 https://python-fin.tech/finance-error/ Thu, 06 Mar 2025 14:38:52 +0000 https://python-fin.tech/?p=1715

先日、yfinanceで株価を取得しようとしたところ、エラーで取得できなくなっていました。 結果的に次の2つをすることで使用できるようになりました。 今回は、yfinanceが使えなくなった時の対処方法を紹介します。 y ... ]]>

先日、yfinanceで株価を取得しようとしたところ、エラーで取得できなくなっていました。

結果的に次の2つをすることで使用できるようになりました。

  • yfinanceのアップデート
  • 株価を取得する記述の変更

今回は、yfinanceが使えなくなった時の対処方法を紹介します。

yfinanceが使えなくなった時の症状

yfinanceを使用した時に、次のようなエラーが発生しました。

TeX
Failed to get ticker '^N225' reason: Expecting value: line 1 column 1 (char 0)
[*********************100%***********************]  1 of 1 completed

1 Failed download:
['^N225']: YFTzMissingError('$%ticker%: possibly delisted; no timezone found')

YFTzMissingErrorというのは、タイムゾーンが見つからないというエラーのようです。

なぜこのようなエラーが発生するようになったのかは、はっきりわかりませんが、株価の参照元に何らかの仕様変更があったのかもしれません。

対処方法

結果的に次の2つをすることで、これまで通りに株価を取得できるようになりました。

yfinanceのアップデート

yfinanceをアップデートすることで、先程のYFTzMissingErrorが発生しなくなりました。記事執筆時点での最新バージョンは、0.2.54です。

Python
pip install -U yfinance

アップデートで株価は取得できるようになりましたが、取得したデータを使用したところ、次のエラーが発生しました。

TeX
ValueError: Data for column "Open" must be ALL float or int.

ValueErrorで、「Open」の列のデータはすべて float 型または int 型である必要があるということです。

デバックすると、float 型で問題ないように思います。

このエラーについて検索すると、株価を取得する記述の変更でエラーが出なくなるという記述がありました。

株価を取得する記述の変更

株価を取得する記述の変更することで、先程のValueErrorが発生しなくなりました。

これまでは、yf.downloadでエラーは発生していませんでしたが、具体的には次のように変更しました。

Python
ticker = yf.Ticker('^N225')
data = ticker.history(start='2024-01-01', end='2024-12-31')

ソース:https://stackoverflow.com/questions/79133206/mplfinance-error-data-for-column-open-must-be-all-float-or-int

なぜこの方法でエラーが発生しなくなるのかは詳しくわかりませんが、これでyfinanceが使用できるようになると思います。

まとめ

以上、yfinanceが使えなくなった時の対処方法を紹介でした。

yfinanceは使い勝手がいいので、この方法で使えるようになって良かったと思います。

過去の記事のソースコードも順次修正していきます。

]]>
カップウィズハンドルとは?Pythonでパターン検索する方法を紹介 https://python-fin.tech/cupwithhandle/ Tue, 04 Feb 2025 12:41:45 +0000 https://python-fin.tech/?p=1652

株式投資やFXなどのチャート分析において、「カップウィズハンドル(Cup with Handle)」は強力なトレンド転換パターンの一つです。特に、上昇トレンドの中で現れる「押し目買い」の絶好のポイントとして、多くのトレー ... ]]>

株式投資やFXなどのチャート分析において、「カップウィズハンドル(Cup with Handle)」は強力なトレンド転換パターンの一つです。
特に、上昇トレンドの中で現れる「押し目買い」の絶好のポイントとして、多くのトレーダーに活用されています。

本記事では、カップウィズハンドルの概要の解説とPythonでのパターン検索する方法について紹介します。

カップウィズハンドルとは

カップウィズハンドルとは、価格チャートが「カップ(カップ型の底)」と「ハンドル(小さな押し目)」の形を形成するチャートパターンです。
このパターンが完成すると、価格が上昇しやすい傾向があります。

アメリカ屈指の投資家であるウィリアム・J・オニール氏の著書「オニールの成長株発掘法」で、最も重要な株価パターンとして紹介されています。
この本は、CAN-SLIM投資法などの投資家にとって有益な情報がたくさん書かれているので一読の価値ありです。

カップウィズハンドルの形状

カップウィズハンドルは、カップを横からカップを横から見たような形状をしています。

カップウィズハンドルの形状には次のような特徴があります。

  • カップ部分:価格がゆるやかに下落し、底を形成した後、再び上昇してカップの右端まで戻る。
  • ハンドル部分:カップの右端付近で小さな調整(押し目)が発生する。
  • ブレイクアウト:ハンドルの高値を超えると強い上昇トレンドが発生することが多い。

カップウィズハンドルの条件

カップウィズハンドルの成立には次のような条件があります。

カップの部分の条件

カップの部分の条件として次のようなものがあります。

  1. カップの部分が形成される前に少なくとも30%以上の上昇トレンドである。
  2. カップの部分の形成期間が3~6ヶ月である。
  3. カップの深さは12〜33%である。
  4. カップの底は丸いU字型がよい。

取っ手の部分の条件

取っ手の部分の条件として次のようなものがあります。

  1. 取っ手の部分の形成期間は1~2周間以上である。
  2. 取っ手はカップの半分より上に形成される。
  3. 取っ手の下落幅は8〜12%以内である。

なぜカップウィズハンドルが形成されるのか

カップウィズハンドルが形成される理由として、個人投資家の心理や機関投資家の動向が関係していると言われています。

まず、株価が上昇トレンドで30%以上の値上がりをした後に値下がりすると、利益の確定売で投資家は株を手放していきます。

株価が12〜33%値下がりしたところで機関投資家が株を買い集めます。
3~6ヶ月かけて買い集めることで、握力の弱い投資家はふるい落とされ、カップの底は丸いU字となります。

機関投資家の買い集めが完了して、価格が上昇に転じ始めると、個人投資家も乗り遅れまいと参入をして価格の上昇が加速します。

しかし、直近の高値に近づくと、利益確定をする投資家が増えて価格は下落に転じます。
ここでカップウィズハンドルの取手の部分が形成されます。

株は機関投資家が買い集めているので、8〜12%下落すると利益確定をする投資家がいなくなり、再び上昇に転じます。

そして、直近の高値を更新すると、上昇トレンドが発生してると判断され、更に価格は上昇していきます。

よって、取っ手の高値を更新するタイミングが買いポイントになるのです。

Pythonでカップウィズハンドルのパターン検索する方法

続いてPythonでカップウィズハンドルのパターン検索する方法を紹介します。

カップウィズハンドルのパターン検索は、相関関数をもとにカップウィズハンドルを探します。

相関係数とは、2つのデータの間にある関係の強弱を測る指標です。
-1から1までの値を取り、相関係数が1に近いほど正の相関、-1に近いほど負の相関、0に近いほど相関がないことを意味します。

つまり、カップウィズハンドルの形状と株価の日足の形状を比較して、1に近いものを抽出します。

証券コードのリストの用意

まずは、証券コードのリストを用意します。

おすすめの方法は、SBI証券の銘柄スクリーニングでCSVをダウンロードする方法です。

今回は日経225の銘柄からチャート形状検索をしたいと思うので、採用指数の日経225にチェックをします。

そして、CSVダウンロードをクリックするとscreener_result.csvというファイル名のデータが手に入ります。

ダウンロードしたscreener_result.csvをPythonの作業ディレクトリに移動させておきます。

ライブラリのインストール

今回は、以下のライブラリを使用します。pipでインストールしておいてください。

  • numpy: 数値計算を効率的に行うためのライブラリ。
  • pandas: 時系列データを処理するためのライブラリ。
  • yfinance: 価格データを取得するためのライブラリ。
  • mplfinance: グラフの描画に使用します。
Bash
pip install numpy pandas yfinance mplfinance

チャート形状銘柄検索をするサンプルコード

Python
import numpy as np
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt

# 期間の設定 '3mo','6mo'から選択
period = '6mo'


# 株価を取得する関数
def get_data():
    df = pd.DataFrame(columns=['code'])
    csv_df = pd.read_csv('screener_result.csv', header=None, skiprows=1, usecols=[0, 1])
    df['code'] = csv_df[0]
    ticker_symbol_dr = []

    for i in range(len(df)):
        ticker_symbol_dr.append((str(df.iloc[i, 0])) + ".T")

    symbol_data = yf.download(ticker_symbol_dr, period=period, threads=False)
    df = pd.DataFrame(symbol_data['Close'])
    df = df.dropna(axis=1)

    return df


data = get_data()
term = len(data)

# 株価データの正規化
normalization_df = (data - data.min(axis=0)) / (data.max(axis=0) - data.min(axis=0))

# X軸の正規化
x = list(map(lambda v: v / float(term - 1), range(0, term)))

# 4次多項式でカップウィズハンドルの形状を再現
cup_with_handle = list(map(lambda v: (-39.50813 * (v / float(term - 1)) ** 4) + (86.90238 * (v / float(term - 1)) ** 3) -
                                     (59.7321 * (v / float(term - 1)) ** 2) + (13.13785 * (v / float(term - 1))), range(0, term)))

# 4次多項式を描写
plt.plot(x, cup_with_handle)
plt.show()

# 相関関数を計算してカップウィズハンドルのパターンを検索
for i in range(len(normalization_df.columns)):
    a = normalization_df.iloc[:, i].tolist()
    corr = np.corrcoef(a, cup_with_handle)[1, 0]

    if corr > 0.5:
        print(f"{normalization_df.columns[i]} 相関係数:{corr}")

これを実行すると、4次多項式で再現したカップウィズハンドルの形状のグラフと、相関関係が強い銘柄が出力されます。

上記のグラフの0の形状と日足の形状を比較します。

記事を執筆時の相関関係が高い銘柄は、次の3銘柄でした。

4507
7269
9434

おおむねカップウィズハンドルに似た形状を抽出できたと思います。

ポイントの解説

株価データの取得

Python
# 期間の設定 '3mo','6mo'から選択
period = '6mo'


# 株価を取得する関数
def get_data():
    df = pd.DataFrame(columns=['code'])
    csv_df = pd.read_csv('screener_result.csv', header=None, skiprows=1, usecols=[0, 1])
    df['code'] = csv_df[0]
    ticker_symbol_dr = []

    for i in range(len(df)):
        ticker_symbol_dr.append((str(df.iloc[i, 0])) + ".T")

    symbol_data = yf.download(ticker_symbol_dr, period=period)
    df = pd.DataFrame(symbol_data['Close'])
    df = df.dropna(axis=1)

    return df

まず、株価を取得する期間を設定します、3ヶ月、6ヶ月から選択します。

csv_df = pd.read_csv('screener_result.csv', header=None, skiprows=1, usecols=[0, 1])でSBI証券からダウンロードしたscreener_result.csvを読み込みます。

yfinanceで各銘柄の株価を取得する場合は、末尾に".T"が必要なので、ticker_symbol_dr.append((str(df.iloc[i, 0])) + ".T")".T"を付け加えながらticker_symbol_drに加えています。

symbol_data = yf.download(ticker_symbol_dr, period=period, threads=False)で株価を取得して、df = pd.DataFrame(symbol_data['Close'])で終値のみを使用するようにしています。

また、欠損値がある場合はdf = df.dropna(axis=1)で除外します。

正規化

Python
# 株価データの正規化
normalization_df = (data - data.min(axis=0)) / (data.max(axis=0) - data.min(axis=0))

# X軸の正規化
x = list(map(lambda v: v / float(term - 1), range(0, term)))

正規化とは、データを一定の規則に基づいて変形し、比較や分析を容易にする処理のことです。

今回の場合はMin-Max正規化という手法で、各銘柄の最小値が0、最大値が1になるように株価の値を正規化します。

また、ラムダ式を用いて、二次関数で使用するX軸の正規化もします。

4次多項式でカップウィズハンドルの形状を再現

Python
# 4次多項式でカップウィズハンドルの形状を再現
cup_with_handle = list(map(lambda v: (-39.50813 * (v / float(term - 1)) ** 4) + (86.90238 * (v / float(term - 1)) ** 3) -
                                     (59.7321 * (v / float(term - 1)) ** 2) + (13.13785 * (v / float(term - 1))), range(0, term)))

Desmosというサイトのグラフ計算機を用いて4次多項式でカップウィズハンドルの形状を再現します。
5箇所のオレンジ色の点を調整して、下記のようなグラフを作成しました。

このグラフの4次多項式は次のようになります。

この値をPythonで計算することで、カップウィズハンドルの形状を再現しました。

相関関数を計算してカップウィズハンドルのパターンを検索

Python
# 相関関数を計算してカップウィズハンドルのパターンを検索
for i in range(len(normalization_df.columns)):
    a = normalization_df.iloc[:, i].tolist()
    corr = np.corrcoef(a, cup_with_handle)[1, 0]

    if corr > 0.5:
        print(f"{normalization_df.columns[i]} 相関係数:{corr}")
        

NumPyの相関係数を求めるnp.corrcoef関数で相関係数を求めます。

corr = np.corrcoef(a, pattern)[1, 0]で株価の終値と4次多項式との相関係数を求めて、0.5以上の銘柄を出力します。

おわりに

以上、カップウィズハンドルの概要の解説とPythonでのパターン検索する方法について紹介しました。

カップウィズハンドルは、強い上昇トレンドのシグナルとなる重要なチャートパターンです。
大量にある銘柄からこのパターンを見つけるのは大変な作業ですが、Pythonを使うことで数分で候補の銘柄を検索することができます。

投資銘柄の選定に、ぜひ活用してみてください。

]]>
【初心者向け】Pythonのおすすめ学習方法3選を目的別に紹介! https://python-fin.tech/python_study/ Sat, 25 Jan 2025 14:59:04 +0000 https://python-fin.tech/?p=1580

「Pythonでプログラミングができるようになりたい。」 「Pythonの勉強方法がわからない。」 こういった悩みをお持ちではないでしょうか。 Pythonはシンプルなプログラミング言語であり、ポイントを押さえれば初心者 ... ]]>

「Pythonでプログラミングができるようになりたい。」

「Pythonの勉強方法がわからない。」

こういった悩みをお持ちではないでしょうか。

Pythonはシンプルなプログラミング言語であり、ポイントを押さえれば初心者でも比較的簡単に独学で習得できます。

私の場合は、書籍でプログラミングの学習をして挫折した経験があるので、学習サービスを利用して学習する方法をおすすめします。

この記事では、学習の目的を次の3つに分けて学習方法を紹介します。

  • 費用を抑えて学習→Udemy(ユーデミー)
  • 効率的に学習→PyQ(パイキュー)
  • フリーランスや副業を視野に入れて学習→デイトラ

ぜひPythonの学習の参考にしてみてください。

費用を抑えて学習する方法

費用を抑えて学習する方法は、オンライン学習プラットフォームの「Udemy」で学習する方法です。

多彩な講座から自分に合った講座を探そう!

Udemyは、22万件以上も講座のあるオンライン学習のプラットフォームです。講座は買い切りの動画となっており、自分のタイミングとペースで学習ができます。また、わからないことは講師に質問することができます。

普段は定価で販売されていますが、セールのタイミングでは1,500円から購入できるのでコスパ抜群です。また、30日以内の返金保証があるため、満足できない場合は返金可能です。

おすすめ講座は、現役シリコンバレーエンジニアの酒井潤さんが講師の「現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル」です。UdemyのPython講座の中でも人気の講座で評価も高く、Pythonの基礎から応用まで網羅的に解説されています。網羅的な分、コースの総時間は約29時間と長時間ですが、if文やfor文といった基礎編は約8時間なので、まずは基礎編を勉強して、必要性がでてきてから応用編も勉強すればいいと思います。

一方、Udemyで学習するデメリットは、Pythonの実行環境を自分で用意する必要があるところです。講座内で解説されていますが、初心者にとってはハードルが高いかもしれません。またUdemyでの学習はどうしても独学スタイルになるので、モチベーションを保つことが難しいです。自ら進んで学習ができる、自己管理ができる人におすすめです。

\30日間の返金保証!/

Udemyの公式サイトはこちら

効率的に学習する方法

効率的に学習する方法は、オンラインPython学習サービス「PyQ™(パイキュー)」で学習する方法です。

「PyQ™」は、プログラミング初心者にも優しく、また実務的なプログラミングを段階的に学べることを目指し、開発されたPythonに特化したオンライン学習サービスです。ブラウザからPythonの学習ができるので、プログラムをはじめて学びたい未経験者におすすめです。

「PyQ™」では、「教材を見る」「コードを書く」「実際に動かす」のサイクルを繰り返し、実力を高めていきます。24個のコースがあり、数個の問題からなる「クエスト」という単位で学習を進めます。 600クエスト・1500問以上が用意されており、ゲーム感覚で学習を進められるのでモチベーションを維持しやすいです。

以下は用意されているコースの一例です。

  • 7days Python チャレンジ
  • Pythonプログラミングをはじめよう
  • Python文法基礎を学ぼう
  • Python文法を実務レベルに深めよう
  • 実務で役立つPython
  • はじめてのデータベース
  • はじめてのWebアプリケーション
  • データ分析
  • 機械学習
  • 統計分析

「PyQ™」の料金プランは次のようになっています。

個人ライトプラン個人スタンダードプラン
月額料金(税込)3,040円8,130円
プログラミングの基本
Python入門〜中級
Webアプリ開発
データ分析
機械学習
統計入門
アルゴリズム
PyQに投稿された過去質問の閲覧
プロによる質問への回答

有料プランを契約すると、契約期間中はすべてのクエストを学習することができます。

ライトプランとスタンダードプランの違いは、学習サポートの有無です。スタンダードプランでは、現役エンジニアによるQ&A形式の「PyQ学習サポート」を利用できます。学習で困った時にプロに相談したい場合は、スタンダードプランを選択しましょう。

また「PyQ™」では、「7days Python Challenge 」というものがあり、無料でPythonのプログラミングを体験することができます。「7days Python Challenge 」では、7日間でプログラミングの初歩とPython基礎文法を学習することができます。はじめてのプログラミングを手助けするメールサポートもあるので、まずは無料で始めてみましょう。

\まずは無料でPythonの体験!/

フリーランスや副業を視野に入れて学習する方法

フリーランスや副業を視野に入れて学習する方法は、オンラインスクールのデイトラで学習する方法です。

デイトラは年間受講者数8,000人超の国内最大規模のオンラインプログラミングスクールです。完全オンライン形式なので自由なタイミングで学習ができます。Web制作、Webアプリ開発、Webデザインなどの多彩なコースを提供しており、Pythonも学ぶことができます。

Pythonコースは、日常的にPythonをビジネスに使っているプロが作成しています。プログラミング未経験者を想定したカリキュラムなので、ゼロからの学習スタートさせる場合でも安心です。株価予測アプリやYouTube分析アプリなど、実務で活用できるアプリケーション開発スキルを習得できます。

デイトラでは、Pythonについてわからないことや疑問があれば質問ができるサポートが1年間利用できるので、途中で挫折すること無くスキルを習得できます。また、定期的にアップデートされる教材が閲覧期間無制限で利用できるので、マイペースに学習が進められます。

Pythonコースの価格は、プログラミングスクール業界最安級の料金設定(89,800円)で提供されています。口コミで広告費を抑えられているので、他のスクールと比べて安価でコストパフォーマンスが高いです。

料金(税込)89,800円
メンター質問期間1年
教材ボリューム約90日分
教材閲覧期間無期限(アップデート有)

デイトラは未経験者でも挫折せずに、実践的なスキルを効率的に習得できるオンラインスクールとして評価されています。フリーランスや副業を視野に入れている方は検討してみてください。

\体験講座は無料で受講可能!/

デイトラの公式HPを確認する

まとめ

以上、Pythonのおすすめ学習方法3選について紹介しました。

特徴をまとめると、次の表のようになります。

UdemyPyQデイトラ
料金1,500円~3,040円89,800円
学習スタイル動画視聴クエスト形式動画やテキスト
サポート講師に質問できるスタンダードプランであり1年間のサポートあり
公式サイトUdemyPyQデイトラ

それぞれ一長一短があるので、まずはUdemyやPyQから始めてみるといいと思います。

プログラミングのスキルを活かして転職や副業に挑戦したい場合は、デイトラがおすすめです。

まずはPythonのプログラミングスキルを身に付けて、当ブログのテーマである株やFXの自動売買に挑戦してみてください。

]]>
【Pythonでテクニカル分析】ボリンジャーバンドを計算して視覚化する方法を解説 https://python-fin.tech/bolinger-band/ Tue, 07 Jan 2025 21:42:19 +0000 https://python-fin.tech/?p=1561

株式や為替、仮想通貨など、様々な金融市場でトレードを行う際に欠かせないのが、適切な分析ツールです。トレード分析において、ボリンジャーバンドは非常に人気のあるインジケーターの一つです。 トレンドの変化を視覚的に捉え、売買の ... ]]>

株式や為替、仮想通貨など、様々な金融市場でトレードを行う際に欠かせないのが、適切な分析ツールです。トレード分析において、ボリンジャーバンドは非常に人気のあるインジケーターの一つです。

トレンドの変化を視覚的に捉え、売買のタイミングを判断するために役立つので、初心者からベテランまで幅広く活用されています。

この記事では、Pythonを使ってボリンジャーバンドを計算し、視覚的に理解しやすいグラフで表示する方法を解説します。

データを分析してトレンドを見極めたい方や、自分でトレードの戦略を構築したい方にとって、基本的なテクニカル分析手法として押さえておきたい内容です。

ボリンジャーバンドとは

ボリンジャーバンドとは、米国の投資家ジョン・ボリンジャーが開発したトレンド系インジケーターです。移動平均線を中心にその上下に価格の変動範囲(バンド)を描きます。

価格の過熱感や反転の可能性を判断するのに役立ち、相場のトレンドや価格のばらつきを視覚的に確認できる優れたツールです。

まず、ボリンジャーバンドの基本的な構成要素について理解しておきましょう。ボリンジャーバンドは、以下の3つの線(バンド)で構成されます。

  • 中央の線(移動平均線):通常、20期間の単純移動平均線(SMA)を使います。
  • 上部バンド(+2σライン):中央の移動平均線に「標準偏差」を2倍加えたライン。
  • 下部バンド(-2σライン):中央の移動平均線から「標準偏差」を2倍引いたライン。

ボリンジャーバンドの使い方

バンドの幅は価格のボラティリティ(変動率)を反映します。幅が広がるとボラティリティが高く、狭まると低いことを示します。統計学的に、価格が±2σのバンド内に収まる確率は約95.4%です。

ボリンジャーバンドの形状によって、トレンドの変化や継続を予測することができます。主に4つの特徴的な形状があり、それぞれが異なる市場状況を示唆します。

  • スクイーズ:バンド幅が収束した状態で、ボラティリティが低く、もみ合い相場を示します。エクスパンションの前兆とも言えます。
  • エクスパンション:スクイーズからバンド幅が拡大していく状態で、ボラティリティが高まりトレンドが発生する可能性を示しますン。
  • ボージ:エクスパンション後、バンド幅が最大に拡大した状態で、トレンド反転の可能性が高まります。
  • バンドウォーク:トレンドが継続している状態で、上昇トレンドでは価格が+2σに沿って、下降トレンドでは-2σに沿って推移します。この状態が続く限り、トレンドの続伸が期待できます。

ボリンジャーバンドは一般的に逆張りのシグナルとして使用されますが、開発者であるジョン・ボリンジャーは順張りを推奨しています。

スクイーズからエクスパンションを狙う順張りトレード

スクイーズ(バンド幅が狭い状態)からエクスパンション(バンド幅が広がる状態)への移行を確認します。価格が±2σのラインを超えたら、その方向にエントリーします。

そこからバンドウォークが発生すると、より強いトレンドが発生していると判断できるので、ポジションを保有し続けることで利益の拡大に期待が持てます。

ポジション決済は、トレンド転換のサインであるボージが確認できたら行います。

スクイーズを利用した逆張りトレード

ボリンジャーバンドがスクイーズ状態になっているときは、レンジ相場であると言えます。

ボリンジャーバンドでは±2σバンド内に価格が収まる確率は統計学的に約95.4%と高いので、±2σバンド付近で価格が反発する可能性が高くなります。価格が±2σバンドにタッチしたときに逆張りでエントリーをします。

ポジション決済は、中央の移動平均線にタッチするか、反対の2σバンドタッチで行います。

ボリンジャーバンドの計算方法

ボリンジャーバンドの計算式は以下の通りです。一定期間(一般的には20期間の価格データ)をnとします。

  1. ミドルバンド(単純移動平均):
    \begin{eqnarray} SMA  =n SMA  \end{eqnarray}
  2. 標準偏差
    \begin{eqnarray} σ = \sqrt{\frac{1}{n-1} \sum_{i=1}^{n} (x_i – \mu)^2} \end{eqnarray}
    ここで、n はデータ数、xiは各データの終値、μはデータの平均値です。
  3. ±1σ
    単純移動平均±標準偏差
  4. ±2σ
     単純移動平均±標準偏差×2
  5. ±3σ
     単純移動平均±標準偏差×3

Pythonでボリンジャーバンドを計算するコード

ボリンジャーバンドを計算しグラフで表示するには、以下のライブラリを使用します。

  • pandas: 時系列データを処理するためのライブラリ。
  • yfinance: 価格データを取得するためのライブラリ。
  • mplfinance: グラフの描画に使用します。

以下のコードを使って、ボリンジャーバンドの計算とグラフの表示をします。使用するデータは、2024年の日経平均株価です。

Python
import pandas as pd
import yfinance as yf
import mplfinance as mpf

# 期間の設定
period = 20

# 株価データを取得(例:日経平均株価のデータを使用)
ticker = '^N225'
data = yf.download(ticker, start='2024-01-01', end='2024-12-31')

# ボリンジャーバンドの計算
sma = data['Close'].rolling(period).mean()  # 移動平均
std = data['Close'].rolling(period).std()  # 標準偏差
upper_band = sma + (std * 2)  # 上部バンド
lower_band = sma - (std * 2)  # 下部バンド

# ボリンジャーバンドを追加してプロット
apds = [
    mpf.make_addplot(sma, color='blue'),
    mpf.make_addplot(upper_band, color='orange'),
    mpf.make_addplot(lower_band, color='orange')
]

mpf.plot(
    data,
    type='candle',  # ローソク足チャート
    addplot=apds,
    style='yahoo',
    title='Stock Price with Bollinger Bands',
    ylabel='Price',
    volume=False
)

上記のコードを実行すると、以下のようにローソク足とボリンジャーバンドのグラフが出力されます。

ポイントの解説

Python
# 期間の設定
period = 20

periodでボリンジャーバンドの期間を設定します。通常は20期間ですが、変更したい場合はこの数値を変更してください。

Python
sma = data['Close'].rolling(period).mean()  # 移動平均
std = data['Close'].rolling(period).std()  # 標準偏差
upper_band = sma + (std * 2)  # 上部バンド
lower_band = sma - (std * 2)  # 下部バンド

ボリンジャーバンドの移動平均や標準偏差は、pandasの窓関数を使うと簡単に計算できます。

pandasで窓関数を適用するにはrolling()を使います。

移動平均を計算する場合は、sma = data['Close'].rolling(period).mean()のように「データ.rolling(期間).mean()」のように記述します。mean()で指定した期間の平均値を計算できます。

標準偏差も同様に、std()と記述することで指定した期間の標準偏差を計算できます。

あとは、移動平均と標準偏差を使用して±2σを計算します。

おわりに

この記事では、Pythonを使ってボリンジャーバンドを計算し、グラフで視覚化する方法を解説しました。

ボリンジャーバンドは、トレンドの勢いや変化を見る上で有効な指標です。更に、単独ではなく他のテクニカル指標と併せて用いることで、より精度の高いトレードに繋がるでしょう。

Pythonを活用すれば、ボリンジャーバンドに限らず様々な指標を簡単に計算できます。この記事をきっかけに、ぜひ他のテクニカル指標にも挑戦してみてください。

]]>