1. はじめに|プライベートAPIで本格的な自動売買へ
Pythonを使った仮想通貨の自動売買にチャレンジしてみたいと思ったとき、最初に試すのは価格の取得など、**「見るだけの処理」**だった方も多いのではないでしょうか?
しかし、本格的な自動売買を実現するには、実際にビットコインを買ったり売ったりする処理が必要になりますよね。
ここで登場するのが「プライベートAPI」です。
仮想通貨取引所(この記事ではCoincheck)では、2種類のAPIが提供されています。
| 種類 | できること | 例 |
|---|---|---|
| 公開API | 価格の取得、板情報の確認など | 現在のビットコイン価格を取得する |
| プライベートAPI | 購入・売却・口座残高の取得など | 口座の日本円残高を確認、ビットコインを買う |
プライベートAPIを使えば、「この価格になったら買う」「一定額以上になったら売る」など、自分で決めたルールに沿って自動売買を行うことができます。しかも、毎回手動で取引所の画面を開かなくて済むので、自動化により時間や心理的負担も大幅に軽減されます。
ただし、プライベートAPIを使うということは、「あなたの口座をプログラムで操作する」ことになります。
つまり、セキュリティ対策がとても重要になります。
このパートでは、プライベートAPIを使って自動売買を行うための基礎知識や準備、考え方をしっかりと解説していきます。
2. プライベートAPIとは?|認証の仕組みをやさしく解説
プライベートAPIは、Coincheckにログインした状態でしかできないような操作(例:売買や残高の確認など)を、Pythonプログラムから実行できるようにするための特別な入り口です。
ただし、誰でもアクセスできてしまっては困りますよね。
そこで使われるのが「APIキー」と「シークレットキー」です。
🔑 APIキーとシークレットキーを取得しよう
まずはCoincheckのマイページにログインし、「APIキー」メニューから新しくキーを発行します。
すると、以下のような2つの文字列が表示されます。
- APIキー(Access-Key):ユーザーIDのようなもの
- シークレットキー(Secret-Key):パスワードのようなもの
この2つを使って、プログラムから安全にログイン・操作ができるようになります。
⚠️ シークレットキーは絶対に人に見せないでください! GitHubにアップしてしまうと、資産を失う危険もあります。
🔐 認証に必要な情報とは?
プライベートAPIを使うときは、HTTPリクエストのヘッダーに以下の3つをセットする必要があります。
| 名前 | 役割 |
|---|---|
ACCESS-KEY | あなたのAPIキー |
ACCESS-NONCE | 毎回変わる使い捨て番号(通常は現在のUnixタイム) |
ACCESS-SIGNATURE | 署名付きの暗号(HMAC-SHA256) |
特に重要なのが「署名(ACCESS-SIGNATURE)」です。
これは、以下の3つの要素を「秘密のキー」で暗号化して作ります。
signature = HMAC-SHA256(secret_key, nonce + request_url + request_body)
これにより、Coincheck側は「このリクエストは本当に本人が送ったものか?」を検証できるんです。
🛡 configファイルで安全に管理しよう
APIキーやシークレットキーをPythonファイルに直接書くのはNGです!
その代わりに、config.iniという設定ファイルを使うのがおすすめです。
[coincheck]
api_key = あなたのAPIキー
secret_key = あなたのシークレットキー
Pythonからは次のように読み込みます:
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
api_key = config['coincheck']['api_key']
secret_key = config['coincheck']['secret_key']
こうすることで、キーの管理がしやすくなり、GitHubにもアップしにくくなって安全性がアップします。

ここまでで、プライベートAPIを使うための準備と認証の仕組みがわかりましたね!
3. APIキーを安全に管理する方法
プライベートAPIを使った自動売買では、APIキーとシークレットキーの漏洩=口座の乗っ取りにつながります。
だからこそ、キーの安全な管理方法は超重要なんです。
このセクションでは、初心者の方でも実践できる「安全なAPIキーの管理術」をわかりやすく解説します!
🧾 config.iniで管理するのが基本
Pythonファイルに直接こう書いてしまうのは…
api_key = 'abc123...'
secret_key = 'def456...'
これは絶対NG!!
もしうっかりGitHubにアップしてしまうと、誰かに不正アクセスされるリスクがあります。
おすすめは、APIキーを別ファイル(config.iniなど)に分けて管理する方法です。
📁 config.iniの作り方
[coincheck]
api_key = あなたのAPIキー
secret_key = あなたのシークレットキー
このファイルはPythonスクリプトと同じフォルダに置きます。
🐍 Pythonで読み込む方法
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
api_key = config['coincheck']['api_key']
secret_key = config['coincheck']['secret_key']
このようにすることで、Pythonコードにはキー情報を一切書かずに済みます。
🚫 Gitにアップしないようにするには?
config.iniを作っても、そのままGitHubにアップしてしまったら意味がありません!
そこで必要なのが「.gitignore」の設定です。
.gitignoreに追加すべき内容
# APIキーを含むファイルはGitから除外
config.ini
これをリポジトリのルートに置いておけば、Gitはconfig.iniを無視してくれます。
念のため、一度git rm --cached config.iniで削除しておくと確実です。
🛡 さらにセキュリティを高めるには?
- 定期的にAPIキーを更新する
- キーには必要最小限の権限のみ付与する(読み取り専用など)
- 秘密鍵の管理には環境変数やキーチェーンの利用も検討
- 実運用前に、仮想環境やテスト用アカウントで試す
セキュリティ対策は「やりすぎ」くらいでちょうどいいです。
自分の資産を守るためにも、しっかり管理しておきましょう。

次は、いよいよAPIを使って「口座残高の取得」をしてみます。
プライベートAPIの最初の一歩、一緒にやってみましょう!
4. プライベートAPIを使った口座残高の取得
ここからはいよいよ、実際にCoincheckのプライベートAPIを使って、自分の口座の残高をPythonで取得する方法を解説します!
APIキーと認証処理の準備ができていれば、意外と簡単ですよ。
🎯 目的:残高を取得するには?
Coincheckでは、以下のエンドポイントで残高情報を取得できます。
GET https://coincheck.com/api/accounts/balance
このリクエストには、認証ヘッダーが必要です。
それでは、コードを順に見ていきましょう。
🧪 必要なライブラリをインポート
import time
import hmac
import hashlib
import requests
import configparser
🔐 APIキーを読み込む
config = configparser.ConfigParser()
config.read('config.ini')
api_key = config['coincheck']['api_key']
secret_key = config['coincheck']['secret_key']
🔁 ノンス(nonce)と署名(signature)を作成
url = 'https://coincheck.com/api/accounts/balance'
nonce = str(int(time.time() * 1000)) # 現在時刻(ミリ秒)
message = nonce + url
signature = hmac.new(
secret_key.encode('utf-8'),
message.encode('utf-8'),
hashlib.sha256
).hexdigest()
📡 認証付きリクエストを送信
headers = {
'ACCESS-KEY': api_key,
'ACCESS-NONCE': nonce,
'ACCESS-SIGNATURE': signature
}
response = requests.get(url, headers=headers)
balance_data = response.json()
# 残高情報の一部を表示
print("日本円残高:", balance_data.get('jpy'))
print("ビットコイン残高:", balance_data.get('btc'))
✅ 実行結果の例
日本円残高: 15235.0
ビットコイン残高: 0.0032
これで、あなたのCoincheck口座の最新の残高がPythonから取得できました!
まるで取引所にログインして見ているかのように、自動で確認できますね。
🛠 トラブルシューティング
| エラー内容 | 原因と対策 |
|---|---|
| 403 Forbidden | APIキーが無効/署名が間違っている |
| 401 Unauthorized | シークレットキーが違う、またはノンスが重複 |
| 空のレスポンス | ネットワークエラーや一時的なAPI停止の可能性あり |

このように残高取得ができれば、資金の状況を見ながら「買い注文・売り注文」の判断材料にもできます。
次はいよいよ、実際にビットコインを売買するコードの実装に入っていきましょう!
5. 自動でビットコインを売買してみよう!
ここからは、プライベートAPIを使って**実際にビットコインを「買う」「売る」**という操作を自動化してみましょう!
ビットコインの売買にはいくつかの方法がありますが、今回はCoincheckが提供する以下の4つの注文タイプを紹介します。
💡 注文タイプの種類と使い分け
| 注文タイプ | 特徴 | 使い方の例 |
|---|---|---|
| 指値買い(buy) | 指定した価格で買う | 「300万円まで下がったら買いたい」 |
| 指値売り(sell) | 指定した価格で売る | 「320万円になったら売りたい」 |
| 成行買い(market_buy) | 今の市場価格で即購入 | すぐに購入したいとき |
| 成行売り(market_sell) | 今の市場価格で即売却 | すぐに売却したいとき |
🧾 指値注文のコード例(買い注文)
url = 'https://coincheck.com/api/exchange/orders'
nonce = str(int(time.time() * 1000))
body = {
'pair': 'btc_jpy',
'order_type': 'buy',
'rate': 3000000, # 買いたい価格(例:300万円)
'amount': 0.005 # 注文する数量(BTC)
}
body_str = '&'.join(f'{key}={value}' for key, value in body.items())
message = nonce + url + body_str
signature = hmac.new(secret_key.encode('utf-8'), message.encode('utf-8'), hashlib.sha256).hexdigest()
headers = {
'ACCESS-KEY': api_key,
'ACCESS-NONCE': nonce,
'ACCESS-SIGNATURE': signature
}
response = requests.post(url, data=body, headers=headers)
print(response.json())
⚡ 成行注文のコード例(即時購入)
body = {
'pair': 'btc_jpy',
'order_type': 'market_buy',
'market_buy_amount': 10000 # 円で指定(例:1万円分のBTCを購入)
}
成行売りの場合はこのように:
body = {
'pair': 'btc_jpy',
'order_type': 'market_sell',
'amount': 0.005 # 売却するBTCの量
}
これらも上の「署名の作成」や「POSTリクエスト」のコードに組み込めばOKです。
🚧 注意点とよくあるエラー
| エラー | 原因と対処 |
|---|---|
"amount is too small" | 最小注文数量(0.005 BTCなど)を満たしていない |
"Insufficient balance" | 日本円やBTCの残高が不足している |
"signature is invalid" | 署名の生成ミス。bodyの並び順にも注意 |
🧠 ワンポイント:POSTメソッドを使う理由
売買のようにサーバー側の状態を変更する操作には、HTTPのPOSTメソッドを使うのがルールです。
価格の取得(GET)とは目的が違うので、メソッドの使い分けにも注意しましょう。
🔒 実際の運用前にテストしよう
仮想通貨の売買は一度注文を出すとキャンセルが間に合わないこともあるので、最初は以下の方法で動作確認をおすすめします。
- 少額(最低単位)でのテスト注文
sandbox環境(Coincheckが提供していれば)- 実際の売買を行わず、署名とレスポンスだけ確認する「ドライラン」
6. リスク管理と安全な設計のポイント
ビットコインの自動売買はとても便利ですが、うまく動かないと思わぬ損失を出してしまうこともあります。
そこで大切なのが、リスク管理の仕組みを組み込むことです。
このパートでは、安全に自動売買を運用するために意識しておきたいポイントを解説していきます。
🔻 ストップロス(損切り)で最悪の事態を防ぐ
たとえば、ビットコインを300万円で買ったあと、急に270万円まで下がったら……つらいですよね。
そこで活用したいのが「ストップロス」という考え方です。
CoincheckのAPIにはストップロス注文が直接は用意されていないため、次のようにPython側で実装する必要があります。
ストップロスの実装例(簡易)
現在価格 = get_current_price() # 価格取得関数(前回記事参照)
購入価格 = 3000000
if 現在価格 < 購入価格 * 0.95:
sell_btc_now() # 5%下落で成行売り関数を呼び出す
このように、条件分岐による売却処理を入れることで、リスクを減らせます。
🧪 ロット数を少なくしてテストする
いきなり全額を使って自動売買を実行するのは危険です。
最初は以下のような方針がおすすめです。
- 注文量を0.005 BTC(最小単位)に設定
- 日本円も1万円など、損失リスクを限定
- 一度に複数回注文を出さないように制御
🔁 リクエスト間の間隔も大事!
CoincheckのAPIには、短時間での連続アクセスを制限する仕組みがあります。
間隔を空けずに連続リクエストすると、429 Too Many Requestsエラーになります。
対策コード例
import time
# 5秒おきに価格確認と売買判断
while True:
check_price_and_trade()
time.sleep(5)
🧯 エラー処理も忘れずに!
API通信ではエラーがつきもの。失敗時にプログラムが止まらないように、try-exceptで囲っておきましょう。
try:
response = requests.post(url, data=body, headers=headers)
data = response.json()
except Exception as e:
print("エラーが発生しました:", e)
ログファイルに書き出すようにしておけば、後から原因分析もできます。
🛡 リアル運用のチェックリスト
- ✅ APIキーに不要な権限を付けない
- ✅ GitHubにキー情報をアップしない
- ✅ 少額でテストしながら進める
- ✅ 自動売買ロジックに「損切り」条件を入れる
- ✅ ログを取って挙動を確認する

自動売買は便利なツールですが、「予期せぬ動き」に備えておくことで、より安心して使えるようになります。
7. まとめ|安全第一で自動売買を楽しもう
ここまで読んでいただき、ありがとうございました!
この記事では、CoincheckのプライベートAPIを使って、自動でビットコインの売買を行う方法をステップバイステップで解説してきました。
📌 おさらいポイント
- プライベートAPIを使えば、自分の口座にアクセスして売買や残高の取得ができる
- APIキーとシークレットキーはconfig.iniで安全に管理しよう
- 認証には**ノンス、署名(HMAC-SHA256)**が必要
- 売買には「指値注文」と「成行注文」があり、目的に応じて使い分ける
- 注文はPOSTリクエストで送信し、最小注文量などの制約に注意
- ストップロスやロット管理、エラー処理など、リスクを考えた設計が大切
自動売買は、最初は難しそうに見えますが、一つひとつ丁寧にコードを書いていけば、ちゃんと動く自分だけの取引システムが作れます。
しかも、今回の方法はレバレッジを使わない現物取引なので、比較的安全に試すことができます。
よくある質問(Q&A)
- QAPIキーはどこで取得できますか?
- A
Coincheckにログイン後、「APIキー」の管理ページから新規作成できます。キーは1つ1つに権限が設定できるので、「注文」「残高の取得」などに必要な最小限の権限だけを付与しましょう。
- QプライベートAPIのリクエストでエラーになります。何が原因ですか?
- A
よくある原因としては以下のようなものがあります:
ACCESS-NONCEが前回より小さい(ミリ秒で現在時刻を指定しましょう)ACCESS-SIGNATUREの生成に失敗(bodyの文字列化順序に注意)- APIキーやシークレットキーが間違っている
- 残高不足や最小注文量未満によるエラー
- Q注文のテストはできますか?
- A
Coincheckには公式のsandbox(テスト環境)APIは現時点では公開されていません(2025年6月時点)。そのため、実際の資金を使って少額で試すのが現実的なテスト方法です。最初は0.005 BTCなどの最小単位で試しましょう。








※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。