※本記事のコードや情報は執筆時点の仕様に基づいています。投資は自己責任であり、必ずデモ環境や少額資金でテストした上で運用してください。
Pythonで株価データを取得し、テクニカル指標を計算できるようになった段階にいる方は多いはずです。
そのスキルは、自分の投資判断を磨くだけでなく、副業として収益を生む「商品」にもなります。
しかし「コードは書けるけど、どう仕事に変えるのか分からない」という壁にぶつかる人が大半です。
原因は明確で、技術力と「収益化の導線設計」はまったく別のスキルだからです。
本記事では、Python×株分析スキルを副業収入に変える3つの現実的なルートと、それぞれの始め方・単価感・必要な準備を具体的に解説します。
さらに、ポートフォリオとして使えるサンプルコードも掲載するので、すぐに行動に移してください。
Python株分析スキルの市場価値
需要が伸びている背景
個人投資家の増加とデータドリブン投資の普及により、「Pythonで株分析ができる人材」の需要は年々拡大しています。
クラウドソーシング大手のランサーズやクラウドワークスで「Python 株」「Python 投資」と検索すると、常時数十件の案件が掲載されています。
従来は証券会社や機関投資家の内製チームが担っていた分析業務が、フリーランスや副業人材に外注される流れが加速しています。
スキルの希少性が生む優位性
Pythonを書けるエンジニアは多くても、金融ドメイン知識を併せ持つ人材は限られています。
テクニカル指標の意味を理解した上でコードに落とし込める能力は、単なるプログラミングスキルとは明確に差別化されます。
この「技術×ドメイン知識」の掛け合わせが、副業単価を押し上げる最大の要因です。
収益化ルート1:受託開発・データ分析代行
案件の種類と単価感
受託開発(Freelance Development)は、最も即金性の高いルートです。
具体的な案件カテゴリは以下のとおりです。
* スクリーニングツール開発:特定条件で銘柄を自動抽出するスクリプトの作成で、1件あたり3万〜10万円が相場です
* バックテスト環境構築:売買戦略の検証システム構築で、5万〜20万円の案件が多いです
* データ可視化ダッシュボード:StreamlitやDashを使ったWebアプリ形式で、10万〜30万円の価格帯です
案件獲得の具体的ステップ
最初はクラウドソーシングで実績を積むのが現実的です。
ランサーズ、クラウドワークス、ココナラの3プラットフォームに同時登録してください。
プロフィールには「Python歴○年」だけでなく、「移動平均・ボリンジャーバンド・RSI等のテクニカル指標実装経験あり」と具体的な技術名を列挙するのが効果的です。
最初の3件は相場の50〜70%の価格で受注し、高評価レビューの獲得を最優先にしてください。
実績が5件を超えると、指名依頼や直接契約のオファーが入り始めます。
収益化ルート2:ツール販売・サブスクリプション
売れるツールの条件
自作ツールの販売は、労働時間に比例しない「ストック型収入」を生むルートです。
売れるツールには共通する3つの条件があります。
* 明確なペイン解決:「毎朝の銘柄チェックに30分かかる」等の具体的な課題を解消するものです
* 非エンジニア向けUI:コマンドラインではなく、GUI(Graphical User Interface:グラフィカルユーザーインターフェース)やWebアプリとして提供してください
* 継続利用の動機:日次・週次で使う設計にすることで、サブスクリプション(Subscription:定額課金)モデルが成立します
販売プラットフォームの選定
販売先は目的によって使い分けてください。
* note・Brain:解説記事+コード配布のセット販売に向いており、1本1,000〜5,000円で販売できます
* Gumroad:海外ユーザーも含めたグローバル販売が可能で、ダウンロード販売に適しています
* 自前Webアプリ(Streamlit Cloud等):月額課金モデルで、月500〜2,000円のサブスク設計が現実的です
月額1,000円のツールを50人に提供すれば、月5万円の継続収入になります。
【コピペOK】ポートフォリオ用サンプルコード
受託案件の提案時やツール販売ページに掲載する「実力証明」として使えるサンプルコードを用意しました。
複数銘柄のスクリーニングとレポート自動生成を行うスクリプトです。
pip install yfinance pandas ta
import datetime
from typing import Final
import pandas as pd
import ta
import yfinance as yf
# ==============================
# 設定エリア
# ==============================
TICKERS: Final[list[str]] = ["7203.T", "9984.T", "6758.T", "8306.T", "9432.T"]
PERIOD: Final[str] = "6mo"
RSI_THRESHOLD_LOWER: Final[float] = 30.0
RSI_THRESHOLD_UPPER: Final[float] = 70.0
BB_PERIOD: Final[int] = 20
RSI_PERIOD: Final[int] = 14
OUTPUT_FILE: Final[str] = "screening_report.csv"
# ==============================
# データ取得
# ==============================
def fetch_stock_data(ticker: str, period: str) -> pd.DataFrame:
'ticker指定で株価データを取得する'
df: pd.DataFrame = yf.download(ticker, period=period, progress=False)
df = df.droplevel("Ticker", axis=1) if isinstance(df.columns, pd.MultiIndex) else df
return df
# ==============================
# テクニカル指標の計算
# ==============================
def add_technical_indicators(df: pd.DataFrame) -> pd.DataFrame:
'RSIとボリンジャーバンドを追加する'
close: pd.Series = df["Close"]
df["RSI"] = ta.momentum.RSIIndicator(close=close, window=RSI_PERIOD).rsi()
bb = ta.volatility.BollingerBands(close=close, window=BB_PERIOD)
df["BB_Upper"] = bb.bollinger_hband()
df["BB_Lower"] = bb.bollinger_lband()
return df
# ==============================
# シグナル判定
# ==============================
def evaluate_signal(df: pd.DataFrame) -> str:
'最新行のデータからシグナルを判定する'
if df.empty or df["RSI"].dropna().empty:
return "データ不足"
latest = df.iloc[-1]
rsi_val: float = latest["RSI"]
close_val: float = latest["Close"]
if rsi_val < RSI_THRESHOLD_LOWER and close_val <= latest["BB_Lower"]:
return "買いシグナル(売られすぎ)"
if rsi_val > RSI_THRESHOLD_UPPER and close_val >= latest["BB_Upper"]:
return "売りシグナル(買われすぎ)"
return "中立"
# ==============================
# レポート生成
# ==============================
def generate_report(tickers: list[str], period: str) -> pd.DataFrame:
'全銘柄をスクリーニングしてDataFrameで返す'
results: list[dict] = []
for ticker in tickers:
df = fetch_stock_data(ticker, period)
if df.empty:
continue
df = add_technical_indicators(df)
signal = evaluate_signal(df)
latest = df.iloc[-1]
results.append({
"銘柄コード": ticker,
"終値": round(float(latest["Close"]), 1),
"RSI": round(float(latest["RSI"]), 2),
"BB上限": round(float(latest["BB_Upper"]), 1),
"BB下限": round(float(latest["BB_Lower"]), 1),
"判定": signal,
})
return pd.DataFrame(results)
# ==============================
# メイン処理
# ==============================
if __name__ == "__main__":
print(f"スクリーニング開始: {datetime.datetime.now():%Y-%m-%d %H:%M}")
report_df = generate_report(TICKERS, PERIOD)
print(report_df.to_string(index=False))
report_df.to_csv(OUTPUT_FILE, index=False, encoding="utf-8-sig")
print(f"nレポート保存完了: {OUTPUT_FILE}")
コードの処理フロー解説
上記のコードは、以下の5ステップで構成されています。
* ステップ1 設定読み込み:銘柄リスト・期間・閾値を定数として定義し、ハードコードを排除しています
* ステップ2 データ取得:yfinanceで各銘柄の過去6か月分のOHLCVデータをダウンロードします
* ステップ3 指標計算:taライブラリでRSI(Relative Strength Index:相対力指数)とボリンジャーバンド(Bollinger Bands)を算出します
* ステップ4 シグナル判定:RSIの閾値とバンドの位置関係から、買い・売り・中立の3分類を返します
* ステップ5 レポート出力:結果をコンソール表示し、CSV(Comma-Separated Values)ファイルとして保存します
TICKERSリストを書き換えるだけで、任意の銘柄群に適用できます。
収益化ルート3:技術ブログ・情報発信
技術ブログ運営は、広告収入とブランディングを同時に獲得できるルートです。
「Python 株 スクリーニング」「Python バックテスト やり方」など、検索ボリュームのあるキーワードで記事を積み上げてください。
収益源は主に3つあります。
* Google AdSense:月間1万PVで月3,000〜8,000円程度が目安です
* アフィリエイト:証券口座開設やVPS契約の紹介で、1件1,000〜10,000円の成果報酬が得られます
* 自社商品への導線:前述のツール販売やコンサルティングへの集客装置として機能します
月間3万PVを超えると、ブログ単体で月1〜3万円、自社商品と組み合わせて月5〜10万円の副業収入は現実的な数字です。
ただし、成果が出るまでに最低3〜6か月は必要です。即金性は低いので、ルート1やルート2と並行して進めてください。
よくあるエラーと対処法
「案件に応募しても全く返信がない」
プロフィールとポートフォリオの不足が最大の原因です。
発注者は「この人に頼んで大丈夫か」を5秒で判断します。
以下を試してください。
* GitHubに前述のサンプルコードを公開し、プロフィールにリンクを記載してください
* 提案文には「類似の○○を開発した経験があります」と具体的な実績を入れてください
* 最初の3件は利益度外視の価格設定で、レビュー獲得を最優先にしてください
「自作ツールを公開したが全く売れない」
技術的な完成度とは無関係に、販売ページの訴求力が不足しているケースがほとんどです。
以下を試してください。
* 「このツールで何が解決するか」を1行で書けるレベルまで価値提案を研ぎ澄ませてください
* スクリーンショットやGIF動画を最低3枚掲載し、動作イメージを視覚的に伝えてください
* 無料版(機能制限付き)を先に配布し、信頼を獲得してから有料版に誘導してください
「投資助言にあたらないか法的に不安」
金融商品取引法(Financial Instruments and Exchange Act)において、投資助言業(Investment Advisory)には登録が必要です。
特定銘柄の売買を推奨する行為は投資助言に該当する危険があります。
以下の線引きを厳守してください。
* ツールや記事には「投資判断は自己責任で行ってください」の免責文を必ず記載してください
* 「この銘柄を買え」ではなく「このロジックで抽出された銘柄一覧」という情報提供の形式にしてください
* 不安がある場合は弁護士や金融庁の相談窓口に事前確認を取ってください。自己判断で進めるのは危険です
まとめ
この記事では、Python株分析スキルを副業収入に変える3つのルートと、それぞれの具体的な始め方を解説しました。
要点を整理します。
* 受託開発:即金性が高く、クラウドソーシング経由で月3〜20万円が現実的な価格帯です
* ツール販売:ストック型収入を目指せるルートで、サブスク月額1,000円×50人で月5万円が一つの目標です
* 技術ブログ:広告とアフィリエイトに加え、自社商品への集客装置として長期的に機能します
* ポートフォリオの公開:GitHubに実力を証明するコードを置くだけで、案件獲得率は大きく変わります
* 法的リスクの管理:投資助言業への抵触を避けるため、免責文の記載と情報提供形式の徹底が不可欠です
次のステップとして、まずは本記事のサンプルコードをGitHubに公開し、クラウドソーシング3サイトへの登録を済ませてください。最初の1件を受注することで、「スキルがお金に変わる」実感を得られます。
その実感が、継続的な学習とスキルアップの最大のモチベーションになります。
