ビットコイン自動売買システム開発ガイド

目次

  • 1. 開発環境の構築
  • 2. 取引所の選択とAPI設定
  • 3. チャートデータ収集
  • 4. トレーディング戦略の開発
  • 4-1. テクニカル指標の実装
  • 4-2. 売買シグナル生成ロジック
  • 5. リスク管理システム
  • 6. 注文実行モジュール
  • 7. バックテスティングシステム
  • 8. モニタリング & ロギングシステム
  • 9. メイン関数
  • 10. セキュリティ強化対策
  • 10-1. APIキー管理
  • 10-2.トラフィック暗号化
  • 11. デプロイ例
この投稿は、クパンパートナーズの活動の一環として、一定額の手数料を受け取ります。

ビットコイン自動売買システム開発ガイド

KissCuseMe
2025-03-02
3

1. 開発環境の構築

<br/>

# 必要なライブラリをインストール
pip install ccxt pandas numpy talib TA-Lib python-dotenv schedule websockets flask
  • 主なツール:
    • CCXT: 100以上の取引所統合API
    • Pandas: データ分析
    • TA-Lib: テクニカル指標の計算
    • Websockets: リアルタイムデータ受信
    • Flask: ダッシュボード構築

2. 取引所の選択とAPI設定

<br/>

# .envファイルにAPIキーを保存
API_KEY = "your_api_key" # 取引所から発行されたAPIキー
API_SECRET = "your_api_secret" # 取引所から発行されたAPIシークレット
  • おすすめ取引所:
    • Binance: 高い流動性、REST/Websocketサポート
    • Bybit: 先物取引特化
    • Upbit: 韓国国内法人としての安定性

3. チャートデータ収集

import ccxt

<br/>

# Binance APIを初期化
binance = ccxt.binance({
    'apiKey': API_KEY,  # APIキーを設定
    'secret': API_SECRET,  # APIシークレットを設定
    'enableRateLimit': True  # APIリクエスト制限を有効化
})

<br/>

# リアルタイムOHLCVデータを受信 (Websocket)
async def fetch_btc_data():
    async with websockets.connect('wss://fstream.binance.com/ws/btcusdt@kline_1m') as ws:
        while True:
            data = await ws.recv()  # リアルタイムデータを受信
            print(json.loads(data))  # データを出力

4. トレーディング戦略の開発


4-1. テクニカル指標の実装

import talib

<br/>

# テクニカル指標を計算する関数
def calculate_indicators(df):
    # 20日単純移動平均 (SMA) を計算
    df['MA20'] = talib.SMA(df['close'], timeperiod=20)
    # 14日相対力指数 (RSI) を計算
    df['RSI'] = talib.RSI(df['close'], timeperiod=14)
    # MACD (移動平均収束拡散) を計算
    df['MACD'], _, _ = talib.MACD(df['close'])
    return df

4-2. 売買シグナル生成ロジック

<br/>

# 売買シグナルを生成する関数
def generate_signal(df):
    latest = df.iloc[-1]  # 最新データを取得
    
    # デュアルSMA戦略
    if latest['MA20'] > latest['MA50'] and df['MA20'].iloc[-2] <= df['MA50'].iloc[-2]:
        return 'BUY'  # 買いシグナル
    elif latest['MA20'] < latest['MA50'] and df['MA20'].iloc[-2] >= df['MA50'].iloc[-2]:
        return 'SELL'  # 売りシグナル
    else:
        return 'HOLD'  # ホールドシグナル

5. リスク管理システム

<br/>

# ポジションサイズを計算する関数
def calculate_position_size(balance, risk_per_trade=0.02):
    # 総資本と1トレードあたりのリスク率に基づいてポジションサイズを計算
    return balance * risk_per_trade

<br/>

# ストップロスを設定する関数
def set_stop_loss(entry_price, atr, multiplier=1.5):
    # ATR (アベレージ・トゥルー・レンジ) に基づいてストップロスを計算
    return entry_price - (atr * multiplier)

6. 注文実行モジュール

<br/>

# 注文を実行する関数
def execute_order(side, amount, symbol='BTC/USDT'):
    try:
        if side == 'BUY':
            # 成り行き買い注文を実行
            order = binance.create_market_buy_order(symbol, amount)
        elif side == 'SELL':
            # 成り行き売り注文を実行
            order = binance.create_market_sell_order(symbol, amount)
        print(f"注文が実行されました: {order}")  # 注文実行ログを出力
        return order
    except Exception as e:
        print(f"注文に失敗しました: {e}")  # 注文に失敗した場合、エラーメッセージを出力
        return None

7. バックテスティングシステム

<br/>

# バックテスト関数
def backtest_strategy(df, initial_balance=10000):
    balance = initial_balance  # 初期資本を設定
    position = 0  # ポジションを初期化
    
    for i in range(1, len(df)):
        signal = df['signal'].iloc[i]  # 売買シグナルを取得
        price = df['close'].iloc[i]  # 終値を取得
        
        if signal == 'BUY' and position == 0:
            # 買いシグナルを受信したらポジションを設定
            position = balance / price
            balance = 0
        elif signal == 'SELL' and position > 0:
            # 売りシグナルを受信したらポジションを清算
            balance = position * price
            position = 0
            
    return balance  # 最終残高を返す

8. モニタリング & ロギングシステム

import logging

<br/>

# ロギング設定
logging.basicConfig(filename='trading.log', level=logging.INFO)

<br/>

# トランザクションロギング関数
def log_transaction(order):
    logging.info(f"""
    [トランザクション詳細]
    時間: {datetime.now()}
    種類: {order['side']}
    量: {order['amount']}
    価格: {order['price']}
    ステータス: {order['status']}
    """)

9. メイン関数

<br/>

# メイン実行ループ
def main():
    while True:
        try:
            df = fetch_realtime_data()  # リアルタイムデータを取得
            df = calculate_indicators(df)  # テクニカル指標を計算
            signal = generate_signal(df)  # 売買シグナルを生成
            
            if signal != 'HOLD':
                # 売買シグナルがある場合は注文を実行
                amount = calculate_position_size(get_balance())
                execute_order(signal, amount)
                
            time.sleep(60)  # 1分間隔で実行
        except KeyboardInterrupt:
            break  # ユーザーによる中断でループを終了

10. セキュリティ強化対策


10-1. APIキー管理

  • バージョン管理システムに絶対にコミットしないでください
  • AWS Secrets ManagerまたはHashicorp Vaultを使用してください。

10-2.トラフィック暗号化

binance = ccxt.binance({
    'options': {'adjustForTimeDifference': True},  # 時間差補正
    'proxies': {'https': 'http://10.10.1.10:3128'}  # プロキシ設定
})

11. デプロイ例

<br/>

# システムサービス登録 (Linux)
[Unit]
Description=Crypto Trading Bot
After=network.target

[Service]
ExecStart=/usr/bin/python3 /path/to/bot.py
Restart=always

[Install]
WantedBy=multi-user.target

📌 重要な注意事項

  • 初期資本の1%未満でリスクを制限
  • 取引所APIレート制限を必ず遵守
  • 週末/祝日の市場変動に注意
  • 定期的に戦略のパフォーマンスを再評価
  • 実際の資金投入前に必ず仮想環境で2週間以上テスト
  • 実際のAPIアドレスを発行して適用しないと実行できません
ビットコイン
自動売買
Python
ガイド

0


利用規約個人情報取扱方針サポート
© 2025
もっと早く知っていればよかった
All rights reserved.