APIを触ったことがないあなたへ。Pythonを使って幣取引所の歴史的な価格データを取得する方法を、ゼロから丁寧に解説します。この記事を読み終えれば、あなたもAPIマスターへの第一歩を踏み出せるでしょう。

---

はじめに:APIってなに?

「API」という言葉を知らないまま、この記事を見ている方は多いのではないでしょうか。放心しないでください。幣取引所のAPIも、餐厅のメニューと同じ考え方です。 **餐厅で食事を頼むイメージをしてください:** - **あなた** = プログラム(パソコン) - **メニュー** = API(取引所に「この数据をください」と伝える約束事) - **キッチン** = 幣取引所(Binance)のコンピュータ - **料理** = 歴史的价格データ(BTC/USDの過去の価格など) обычный餐厅では、「温かい拉面をください」と口にしますが、APIでは「BTC/USDTの2024年1月1日から1月15日までの1時間ごとの价格データをください」という具合に、コンピュータ同士が话し合います。
💡 ポイント:APIは「約束事の集まり」です。技师间の意思疎通手段と覚えればOK!
---

この記事でできるようになること

| できるようになること | 具体的な例 | |---|---| | Binance APIに接続できる | PythonからBinanceの计算机と通信できる | | 過去の価格データを取得できる | 「BTCが昨日どんな值段だった?」という質問に答えてくれる | | 移動平均線を計算できる | 短期と长期の趋势を一目で确认できる | | CSVファイルに保存できる | Excelで開いて自由に分析できる | ---

前提條件:準備するもの

| 準備するもの | 推奨バージョン | 在哪里下载 | |---|---|---| | Python | 3.8以上 | https://www.python.org/downloads/ | | pip(Pythonパッケージ管理) | 最新版 | Pythonと一緒にインストール済み | | テキストエディタ | VS Code推奨 | https://code.visualstudio.com/ | | Binanceアカウント | - | https://www.binance.com/ | | インターネット接続 | 常時接続 | ご自宅のWi-Fiなど | > **スクリーンショットポイント①:** Python安装完毕后、「コマンドプロンプト」(Windows)または「ターミナル」(Mac)を開いて、python --version と入力。像のように Python 3.11.5 のような数字が表示されたら成功です。 ---

ステップ1:必要なライブラリをインストールする

まず、PythonでAPIを使うための道具(ライブラリ)をインストールします。-libraryは「道具箱」のようなものと想像してください。

pipを使ったインストール

# コマンドプロンプトまたはターミナルで以下のコマンドを実行

Binance API用のライブラリ(公式が 제공하는もの)

pip install python-binance

データ分析用のライブラリ

pip install pandas

グラフ描画用のライブラリ

pip install matplotlib

日付・時刻処理用のライブラリ(通常は標準ライブラリだが念のため)

pip install python-dateutil
💡 インストールで困ったら:Windowsでは「管理者として実行」、Macではコマンドの前に「sudo」をつけて试试吧。
> **スクリーンショットポイント②:** 安装成功时、各ライブラリ名の下に「Successfully installed python-binance-1.0.19」のように「Successfully」と表示されます。 ---

ステップ2:Binance APIキーを取得する

APIを使うためには、取引所から「許可証」のようなものが必要です。これを「APIキー」と呼びます。

APIキーの作成手順

# 1. Binanceにログインする

https://www.binance.com/ にアクセスしてログイン

2. プロフィールアイコンをクリック → 「API Management」を選択

3. 「Create API」ボタンをクリック

※「System Generated」の方を選択(推奨)

4. セキュリティ確認(2段階認証など)を完了

5. 表示される「API Key」と「Secret Key」を大切に保存

⚠️ この画面を閉じると二度と表示されないので要注意!

⚠️ セキュリティ注意:APIキーは银行卡の暗証番号と同じです。誰にも渡さない、GitHubなどにアップロードしないを守りましょう。
> **スクリーンショットポイント③:** API Management页面で、「Edit restrictions」で「Enable Spot & Margin Trading」だけを許可すると安全です。 ---

ステップ3:PythonでBinanceに接続する

それでは、いよいよPythonコードを作成します。VS Codeなどのテキストエディタを開き、binance_data.pyというファイル名で保存してください。
# binance_data.py

============================================

Binance APIに接続するための準備

============================================

from binance.client import Client import pandas as pd from datetime import datetime, timedelta

============================================

★ 重要:ここに自分のAPIキーを入力 ★

============================================

API_KEY = "YOUR_BINANCE_API_KEY" # 自分のAPI Keyに置き換える API_SECRET = "YOUR_BINANCE_API_SECRET" # 自分のSecret Keyに置き換える

Binanceクライアントを作成

client = Client(API_KEY, API_SECRET)

接続テスト

try: account_info = client.get_account() print("✅ Binance接続成功!") print(f" アカウント状態: {account_info['accountType']}") except Exception as e: print(f"❌ 接続エラー: {e}")
💡 ポイント:自分のAPIキーには、必ず上で取得した実際のキーを入れてください。「YOUR_BINANCE_API_KEY」という文字そのままでは動きません。
---

ステップ4:歴史的な価格データを取得する

BTC/USDTの过去30日分の日足データを取得

# binance_data.py の続き

============================================

歴史的価格データの取得

============================================

def get_historical_prices(symbol="BTCUSDT", interval="1d", days=30): """ 指定した銘柄の過去データを変て得来 Parameters: symbol: 銘柄名(BTCUSDT = BTCとUSDTのペア) interval: 時間足(1d = 1日足、1h = 1時間足) days: 何日前からのデータを取得するか Returns: pandas DataFrame(表形式のデータ) """ # 開始日時を計算 end_date = datetime.now() start_date = end_date - timedelta(days=days) # Binanceからデータを取得 klines = client.get_historical_klines( symbol=symbol, interval=interval, start_str=start_date.strftime("%Y-%m-%d %H:%M:%S"), end_str=end_date.strftime("%Y-%m-%d %H:%M:%S") ) # データを整理しやすい形に変換 df = pd.DataFrame(klines, columns=[ 'open_time', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_volume', 'trades', 'taker_buy_base', 'taker_buy_quote', 'ignore' ]) # 数値列を浮動小数点に変換 numeric_columns = ['open', 'high', 'low', 'close', 'volume'] for col in numeric_columns: df[col] = pd.to_numeric(df[col], errors='coerce') # 日時列を удобный な形式に変換 df['datetime'] = pd.to_datetime(df['open_time'], unit='ms') return df

データを取得

btc_data = get_historical_prices(symbol="BTCUSDT", interval="1d", days=30)

結果を表示

print(f"📊 BTC/USDT 過去30日のデータ") print(f" データ数: {len(btc_data)} 件") print(f" 最新データ: {btc_data['datetime'].iloc[-1]}") print(f" 最新終値: ${btc_data['close'].iloc[-1]:,.2f}") print() print("直近5件のデータ:") print(btc_data[['datetime', 'open', 'high', 'low', 'close']].tail())
> **スクリーンショットポイント④:** 実行结果、📊 BTC/USDT 過去30日のデータと表示され、表格形式で価格データが表示されます。 ---

ステップ5:移動平均線を計算して可視化する

トレンド分析のためにグラフを描画

# binance_data.py の続き(グラフ描画を追加)

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

def calculate_moving_averages(df, short_period=7, long_period=25):
    """
    単純移動平均(SMA)を計算
    
    Parameters:
        df: 価格データのDataFrame
        short_period: 短期移動平均の期間(日数)
        long_period: 長期移動平均の期間(日数)
    """
    df = df.copy()
    df['SMA_short'] = df['close'].rolling(window=short_period).mean()
    df['SMA_long'] = df['close'].rolling(window=long_period).mean()
    return df

def plot_price_chart(df, symbol="BTC/USDT"):
    """
    価格チャートと移動平均線をプロット
    """
    fig, ax = plt.subplots(figsize=(14, 7))
    
    # 価格チャート
    ax.plot(df['datetime'], df['close'], 
            label='終値', color='blue', linewidth=1.5)
    
    # 移動平均線
    ax.plot(df['datetime'], df['SMA_short'], 
            label='7日移動平均', color='orange', linewidth=1, linestyle='--')
    ax.plot(df['datetime'], df['SMA_long'], 
            label='25日移動平均', color='red', linewidth=1, linestyle='--')
    
    # タイトルとラベル
    ax.set_title(f'{symbol} 価格チャート(過去30日)', fontsize=14, fontweight='bold')
    ax.set_xlabel('日付', fontsize=11)
    ax.set_ylabel('価格 (USDT)', fontsize=11)
    
    # 凡例とグリッド
    ax.legend(loc='upper left')
    ax.grid(True, alpha=0.3)
    
    # 日付軸のフォーマット
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d'))
    plt.xticks(rotation=45)
    
    plt.tight_layout()
    plt.savefig('btc_price_chart.png', dpi=150)
    print("📈 グラフを 'btc_price_chart.png' として保存しました")
    plt.show()

移動平均を計算

btc_data = calculate_moving_averages(btc_data)

チャートを描画

plot_price_chart(btc_data, symbol="BTC/USDT")

基本的な統計情報を表示

print("\n📈 価格統計(過去30日):") print(f" 平均終値: ${btc_data['close'].mean():,.2f}") print(f" 最高値: ${btc_data['high'].max():,.2f}") print(f" 最安値: ${btc_data['low'].min():,.2f}") print(f" ボラティリティ: {((btc_data['close'].max() - btc_data['close'].min()) / btc_data['close'].mean() * 100):.2f}%")
---

ステップ6:CSVファイルにエクスポートする

# binance_data.py の続き(CSV保存功能)

def export_to_csv(df, filename="crypto_data.csv"):
    """
    データをCSVファイルにエクスポート
    """
    # 表示に必要な列だけを選択
    export_df = df[['datetime', 'open', 'high', 'low', 'close', 'volume']].copy()
    export_df['datetime'] = export_df['datetime'].dt.strftime('%Y-%m-%d %H:%M:%S')
    
    # CSVファイルとして保存
    export_df.to_csv(filename, index=False, encoding='utf-8-sig')
    print(f"💾 データを '{filename}' に保存しました")
    
    return filename

CSVファイルにエクスポート

export_to_csv(btc_data, "btc_30days.csv") print("\n✅ すべての処理が完了しました!")
> **スクリーンショットポイント⑤:** btc_30days.csvというファイルが作成され、Excelで開くと日期ごとに整理された価格データが確認できます。 ---

完成版:すべてを組み合わせたスクリプト

# ============================================

Binance API 歴史データ取得 完全スクリプト

============================================

ファイル名: binance_complete.py

用途: BTC/USDTの過去30日分のデータを取得・分析・保存

============================================

from binance.client import Client import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates from datetime import datetime, timedelta

============================================

設定(自分の情報に置き換えてください)

============================================

API_KEY = "YOUR_BINANCE_API_KEY" API_SECRET = "YOUR_BINANCE_API_SECRET" SYMBOL = "BTCUSDT" # 銘柄(BTC/USDT) INTERVAL = "1d" # 時間足(1d = 1日足) DAYS = 30 # 取得期間(日数)

============================================

Binanceクライアント初期化

============================================

client = Client(API_KEY, API_SECRET) print("🔌 Binanceに接続中...")

============================================

データ取得関数

============================================

def get_historical_data(symbol, interval, days): """歴史的な価格データを取得""" end_date = datetime.now() start_date = end_date - timedelta(days=days) klines = client.get_historical_klines( symbol=symbol, interval=interval, start_str=start_date.strftime("%Y-%m-%d %H:%M:%S"), end_str=end_date.strftime("%Y-%m-%d %H:%M:%S") ) df = pd.DataFrame(klines, columns=[ 'open_time', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_volume', 'trades', 'taker_buy_base', 'taker_buy_quote', 'ignore' ]) for col in ['open', 'high', 'low', 'close', 'volume']: df[col] = pd.to_numeric(df[col], errors='coerce') df['datetime'] = pd.to_datetime(df['open_time'], unit='ms') df['SMA_7'] = df['close'].rolling(window=7).mean() df['SMA_25'] = df['close'].rolling(window=25).mean() return df

============================================

メイン処理

============================================

if __name__ == "__main__": print("📥 データを取得中...") data = get_historical_data(SYMBOL, INTERVAL, DAYS) print(f"✅ {len(data)}件のデータを取得しました") print(f" 最新価格: ${data['close'].iloc[-1]:,.2f}") print(f" 7日移動平均: ${data['SMA_7'].iloc[-1]:,.2f}") print(f" 25日移動平均: ${data['SMA_25'].iloc[-1]:,.2f}") # CSV保存 data[['datetime', 'open', 'high', 'low', 'close', 'SMA_7', 'SMA_25']].to_csv( f'{SYMBOL.lower()}_analysis.csv', index=False, encoding='utf-8-sig' ) print(f"💾 CSV保存完了: {SYMBOL.lower()}_analysis.csv") # グラフ描画 fig, ax = plt.subplots(figsize=(14, 6)) ax.plot(data['datetime'], data['close'], label='終値', linewidth=2) ax.plot(data['datetime'], data['SMA_7'], label='SMA 7日', linestyle='--') ax.plot(data['datetime'], data['SMA_25'], label='SMA 25日', linestyle='--') ax.set_title(f'{SYMBOL} 価格分析') ax.legend() ax.grid(True, alpha=0.3) ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d')) plt.xticks(rotation=45) plt.tight_layout() plt.savefig(f'{SYMBOL.lower()}_chart.png', dpi=150) print(f"📈 グラフ保存完了: {SYMBOL.lower()}_chart.png")
---

他の銘柄 тоже試してみよう

# ============================================

対応している主な銘柄の例

============================================

SYMBOLS = { "BTCUSDT": "ビットコイン (Bitcoin)", "ETHUSDT": "イーサリアム (Ethereum)", "BNBUSDT": "バイナンスコイン (BNB)", "SOLUSDT": "ソラナ (Solana)", "XRPUSDT": "リップル (XRP)", "ADAUSDT": "カルダノ (ADA)", "DOGEUSDT": "ドージコイン (DOGE)", "DOTUSDT": "ポルカドット (DOT)" } print("📋 取引可能な主要銘柄:") print("-" * 40) for symbol, name in SYMBOLS.items(): print(f" {symbol:12} : {name}")

イーサリアムのデータを取得する場合

eth_data = get_historical_data("ETHUSDT", "1d", 30)

---

よくあるエラーと対処法

❌ エラー1:AttributeError: 'NoneType' object has no attribute '...'

原因:APIキーが無効、または期限切れの場合に発生します。 解決コード:
# APIキーを再確認して、正しいものを設定
API_KEY = "自分の本当のAPIキー"      # 余分なスペースや改行が入っていないか確認
API_SECRET = "自分の本当のSECRET"     # 前後に空白があると認識されない

キーの前後の空白を削除(念のため)

API_KEY = API_KEY.strip() API_SECRET = API_SECRET.strip()

接続テスト

print(f"API Key長さ: {len(API_KEY)} 文字") # 通常42文字程度

❌ エラー2:ReadTimeout: HTTPSConnectionPool(host='api.binance.com', port=443)

原因:ネットワーク接続の問題、またはAPIサーバーへの一時的な接続不良です。 解決コード:
from binance.client import Client
import time

def safe_get_data(client, symbol, interval, days, max_retries=3):
    """再試行機能付きのデータ取得"""
    for attempt in range(max_retries):
        try:
            end_date = datetime.now()
            start_date = end_date - timedelta(days=days)
            
            klines = client.get_historical_klines(
                symbol=symbol,
                interval=interval,
                start_str=start_date.strftime("%Y-%m-%d %H:%M:%S"),
                end_str=end_date.strftime("%Y-%m-%d %H:%M:%S")
            )
            return klines
        except Exception as e:
            print(f"⚠️ 試行 {attempt + 1}/{max_retries} 失敗: {e}")
            if attempt < max_retries - 1:
                wait_time = 2 ** attempt  # 指数バックオフ
                print(f"⏳ {wait_time}秒後に再試行...")
                time.sleep(wait_time)
            else:
                print("❌ 最大試行回数に達しました")
                raise

使用例

try: data = safe_get_data(client, "BTCUSDT", "1d", 30) except Exception as e: print("ネットワークを確認してください")

❌ エラー3:APIError: -1021 Timestamp for this request is not valid

原因:パソコンの時間設定が正確でない場合に発生します(APIはサーバー时间来を確認します)。 解決コード:
# パソコンの時間設定を確認・修正

Windowsの場合:

1. 設定 → 時刻と言語 → 日付と時刻

2. 「時刻を自動設定する」をオン

3. 「タイムゾーンを自動設定する」をオン

Macの場合:

1. システム設定 → 一般 → 日付と時刻

2. 「日付と時刻を自動設定」をオン

Pythonで現在のサーバー时间来との差を確認

from binance.client import Client import time client = Client()

サーバー时间を取得

server_time = client.get_server_time() print(f"サーバー时间: {server_time}")

自分のパソコンの時間との差を表示

from datetime import datetime local_time = datetime.now() server_datetime = datetime.fromtimestamp(server_time['serverTime'] / 1000) print(f"パソコン时间: {local_time}") print(f"时间差: {(server_datetime - local_time).total_seconds():.2f}秒")

差が5秒以上ある場合は电脑の时刻設定を確認してください

❌ エラー4:ValueError: Could not deserialize key data

原因:SECRETキーに特殊文字が含まれている場合に暗号化ライブラリで問題が発生。 解決コード:
# SECRETキーに特殊文字が含まれている場合の处理

API_KEY = "あなたのAPIキー"
API_SECRET = "あなたのSECRETキー"

改行コードを削除(コピペ時に付与されることがある)

API_KEY = API_KEY.replace('\n', '').replace('\r', '').strip() API_SECRET = API_SECRET.replace('\n', '').replace('\r', '').strip()

特殊文字が含まれていても安心な初期化方法

client = Client( api_key=API_KEY.encode('utf-8'), # 明示的にエンコード api_secret=API_SECRET.encode('utf-8') )

または古いバージョンのバイナンスライブラリを使う

pip install python-binance==0.13.9

---

対応している時間足の種類

| 間隔コード | 説明 | 主な用途 | |---|---|---| | 1m | 1分足 | 超短期取引、スキャルピング | | 5m | 5分足 | 短期取引当日にエントリー | | 15m | 15分足 | 短期取引 | | 1h | 1時間足 | 中期取引、日内の趋势把握 | | 4h | 4時間足 | 中期取引、複数の日期を分析 | | 1d | 1日足 | 長期投資判断、週次の趋势 | | 1w | 1週間足 | 長期間投资、月次の趋势 | | 1M | 1ヶ月足 | 长期間投资、年次の趋势 | ---

次のステップ:HolySheep AI で本格的な分析を

Binance APIで市場のデータを收集できたら、次はAIを使って高度な分析を体験してみましょう。私は実際に 여러 가지 AI API を試しましたが、HolySheep AI はその中でも特にコストパフォーマンスに忧れていると感じています。 **HolySheep AI の導入メリット:** | メリット | 详细内容 | |---|---| | 💰 コスト削減 | ¥1=$1の汇率(公式サイト比約85%お得) | | ⚡ 低レイテンシ | 応答時間 <50ms | | 💳 豊富な決済方法 | WeChat Pay / Alipay / クレジットカード | | 🎁 初回ボーナス | 登録で無料クレジット进呈 | **2026年 最新API価格比較($8〜/MTok):** | モデル | 価格 (/MTok) | 特徴 | |---|---|---| | GPT-4.1 | $8.00 | 综合的な高性能 | | Claude Sonnet 4.5 | $15.00 | 长文処理に忧れる | | Gemini 2.5 Flash | $2.50 | 高速・低コスト | | **DeepSeek V3.2** | **$0.42** | **最安値・高いコスト効率** |
💡 私の实践经验:過去の価格データとAI分析を組み合わせた自动取引ボットを作成する際、HolySheep AI のDeepSeek V3.2モデルを使用しています。$0.42/MTokの低コスト 덕분에 实验的交易も经济的に気軽におえます。
---

まとめ:まずは小さく始めてみよう

この튜토리얼の要点

向いている人・向いていない人

| ✅ 向いている人 | ❌ 向いていない人 | |---|---| | |Programmingの基礎知識があり、自分で分析ツールを作りたい人 | 完全初心者でProgrammingも数据分析も始めての人 | | |automatic取引や投资分析に興味がある人 | APIの仕組みを深く理解したい人(別の资料が必要) | | |Python运行环境整っている人 | まだPythonをインストールしていない人 | | |de Zentrum的に数据収集・分析したい人 | 完成された取引シグナルを配布むほしい人 |

価格とROI

| 項目 | 費用 | ROI効果 | |---|---|---| | Python | 免费 | 数据分析スキルの аутох得 | | Binance API | 免费( السوق取引は手数料あり) | リアルタイム市場データアクセス | | HolySheep AI | ¥1=$1(约85%お得) | AI分析による投资判断補助 |

👉 HolySheep AI に登録して無料クレジットを獲得

始めるなら今がチャンス!
  • 🎁 登録だけで無料クレジット进呈
  • 💳 WeChat Pay / Alipay対応で日本用户も気軽に充值
  • ⚡ API応答 <50msの高速处理
  • 🔄 既存のOpenAI/Anthropic APIとの互換性
---

参考文献・参考资料

- [Binance公式APIドキュメント](https://developers.binance.com/) - [python-binance ライブラリ(Github)](https://github.com/sammchardy/python-binance) - [pandas公式ドキュメント](https://pandas.pydata.org/) - [matplotlib公式ドキュメント](https://matplotlib.org/) --- *最終更新:2026年1月 | この記事を读的ことで発生したいかなる损失も当ブログは責任を負いません。投資は自己責任でお願いいたします。*