概要
tradingview-screenerは、TradingViewの公式APIを使用してカスタム株式スクリーナーを構築するPythonパッケージ。通常はWebブラウザでマウス操作で行うスクリーニング(銘柄抽出・テクニカル指標フィルタリング)をスクリプトで実装できる。SQLライクな条件指定により、定量的な銘柄選定ワークフローを構築可能。株式投資家やクオンツエンジニアに活用されている。
主な機能
- 3000以上のデータフィールド:OHLCデータ、テクニカル指標、ファンダメンタルズデータ(P/E、EPS等)を活用
- 複数市場対応:株式、暗号資産、外為、CFD、先物、債券等に対応
- 複数タイムフレーム対応:1m、5m、15m、30m、1h、2h、4h、1d、1w、1moのタイムフレームをサポート。各フィールドで自由にタイムフレームを混在可能
- SQLライクなフィルタリング:AND/OR論理を完全サポートした条件指定
クイックスタート
インストール手順
PyPiからインストール。
pip install tradingview-screener
基本的な使用例
最もシンプルなスクリーニング実行。
from tradingview_screener import Query
screener = Query().select(['symbol', 'close']).get_scanner_data()
print(screener)
フィルタ条件による絞り込み
スクリーニング条件を指定し、データを取得。
from tradingview_screener import Query
screener = Query().select(['symbol', 'close', 'volume']).where(
'close > 100 AND volume > 1000000'
).get_scanner_data()
# 結果はpandas DataFrameで取得
df = screener
print(df)
SQL形式の条件指定
複雑な条件をSQL形式で記述し、スクリーニング実行。
from tradingview_screener import Query
import pandas as pd
screener = Query().select([
'symbol', 'close', 'volume'
]).where(
'close > 100 AND volume > 1000000'
).get_scanner_data()
print(f'Found {len(screener)} symbols')
アーキテクチャ
以下はtradingview-screenerの処理フロー。ユーザー定義の検索条件がスクリーナーに入力され、TradingViewのAPI層を経由して銘柄データを取得、フィルタリング、結果を返す構造。
flowchart LR
A["ユーザー<br/>スクリーニング条件設定"] --> B["Query<br/>クラス初期化"]
B --> C["フィールド選択<br/>select()"]
C --> D["条件指定<br/>where()"]
D --> E["TradingView<br/>APIデータ取得"]
E --> F["結果フィルタリング"]
F --> G["pandas DataFrame<br/>として返却"]
G --> H["処理完了"]
実践的な使い方
ユースケース1:定期スクリーニング実行
スクリプトでスクリーニング実行をプログラム化、結果をpandas DataFrameで取得。
from tradingview_screener import Query
import pandas as pd
import datetime
def screening():
# 条件による抽出
screener = Query().select([
'symbol', 'close', 'volume'
]).where(
'close > 100 AND volume > 1000000'
).get_scanner_data()
# 結果を確認
print(f"Found {len(screener)} symbols matching criteria")
print(screener.head(20))
# DataFrameをCSVに保存する場合
screener.to_csv(f'scan_results_{datetime.date.today()}.csv', index=False)
if __name__ == '__main__':
screening()
ユースケース2:複数市場の同時スクリーニング
異なる市場からデータを取得し、結果を統合。
from tradingview_screener import Query
import pandas as pd
def multi_market_screening():
results = {}
# 米国株:価格基準
results['US'] = Query().select([
'symbol', 'close', 'volume'
]).where(
'close > 100 AND volume > 1000000'
).get_scanner_data()
# 暗号資産:別条件
results['CRYPTO'] = Query().select([
'symbol', 'close'
]).where(
'close > 10000'
).get_scanner_data()
# 結果を統合
all_results = []
for market, df in results.items():
df['market'] = market
all_results.append(df)
combined = pd.concat(all_results, ignore_index=True)
combined.to_csv('multi_market_scan.csv', index=False)
print(f"Total {len(combined)} symbols across {len(results)} markets")
multi_market_screening()
ユースケース3:スクリーニング条件の保存と再利用
よく使うスクリーニング条件をJSON設定ファイルに保存、複数回実行。
import json
from tradingview_screener import Query
# スクリーニング設定ファイル
config = {
"strategies": {
"high_volume": {
"fields": ["symbol", "close", "volume"],
"condition": "close > 100 AND volume > 1000000"
},
"price_range": {
"fields": ["symbol", "close"],
"condition": "close > 50 AND close < 200"
}
}
}
with open('screening_strategies.json', 'w') as f:
json.dump(config, f, indent=2)
# 保存された設定から実行
with open('screening_strategies.json', 'r') as f:
strategies = json.load(f)['strategies']
for strategy_name, strategy_config in strategies.items():
result = Query().select(
strategy_config['fields']
).where(
strategy_config['condition']
).get_scanner_data()
print(f"{strategy_name}: {len(result)} symbols found")
まとめ
対象ユーザー:プログラミング経験のある株式投資家・アルゴリズムトレーダー・データ分析エンジニア。カスタムスクリーナーの構築と自動化が必要なユーザーに適合。
推奨シーン:
- 定期的なスクリーニング自動実行
- 複数条件のフィルタリング
- スクリーニング結果の他システムとの連携
- 大量銘柄の一括処理
制限事項と注意点:TradingViewのAPI仕様変更により動作が影響を受ける可能性あり。認証情報はセキュアに管理が必須。リアルタイムデータではなく遅延データ(数分)を使用。商業利用の場合、TradingViewの利用規約確認が必要。