0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【技術解説】【完全ガイド】Pythonによる仮想通貨自動取引 システム構築:RSIとMACDを駆使した手法

0
Posted at

Pythonによる仮想通貨自動取引システム構築:RSIとMACDを駆使した手法

本記事では、Pythonを利用してRSI(相対力指数)とMACD(移動平均収束拡散法)を組み合わせた仮想通貨自動取引システムの構築方法を解説します。使用するライブラリとしては、yfinanceccxtpandasmatplotlibがあります。

RSIとMACDの基本理解

RSI(相対力指数)

RSIは、特定の期間における価格の上昇と下降の強さを測定する指標です。一般的に、RSIが70を超えると「過買い」、30未満になると「過売り」と見なされます。

MACD(移動平均収束拡散法)

MACDは、2つの異なる期間のEMA(指数移動平均)の差を計算し、シグナルラインとのクロスを利用して売買シグナルを生成します。通常、MACDがシグナルラインを上に抜けると買い、下に抜けると売りと判断されます。

Python環境の準備

自動取引システムを構築するために、必要なライブラリをインストールします。

pip install yfinance ccxt pandas matplotlib

データの取得

yfinanceライブラリを使用してビットコインの価格データを取得します。

import yfinance as yf
import pandas as pd

# ビットコインの価格データを取得
def get_data(symbol, start, end):
    data = yf.download(symbol, start=start, end=end)
    return data

bitcoin_data = get_data('BTC-USD', '2022-01-01', '2023-01-01')
print(bitcoin_data.head())

RSIの計算

RSIを計算するための関数を定義します。

def calculate_rsi(data, period=14):
    delta = data['Close'].diff()  # 価格の変化を計算
    gain = (delta.where(delta > 0, 0)).rolling(window=period).mean()  # 上昇幅の平均
    loss = (-delta.where(delta < 0, 0)).rolling(window=period).mean()  # 下落幅の平均

    rs = gain / loss  # 相対強度を計算
    rsi = 100 - (100 / (1 + rs))  # RSIを計算

    return rsi

bitcoin_data['RSI'] = calculate_rsi(bitcoin_data)

MACDの計算

次に、MACDを計算する関数を定義します。

def calculate_macd(data, short_window=12, long_window=26):
    data['EMA_short'] = data['Close'].ewm(span=short_window, adjust=False).mean()  # 短期EMA
    data['EMA_long'] = data['Close'].ewm(span=long_window, adjust=False).mean()  # 長期EMA
    data['MACD'] = data['EMA_short'] - data['EMA_long']  # MACDを計算
    data['Signal'] = data['MACD'].ewm(span=9, adjust=False).mean()  # シグナルラインを計算

    return data

bitcoin_data = calculate_macd(bitcoin_data)

取引戦略の実装

RSIとMACDのシグナルに基づいて取引の売買サインを生成します。

def generate_signals(data):
    signals = []
    for i in range(len(data)):
        if data['RSI'][i] < 30 and data['MACD'][i] > data['Signal'][i]:
            signals.append("Buy")  # 買いシグナル
        elif data['RSI'][i] > 70 and data['MACD'][i] < data['Signal'][i]:
            signals.append("Sell")  # 売りシグナル
        else:
            signals.append("Hold")  # 保持
    return signals

bitcoin_data['Signals'] = generate_signals(bitcoin_data)

トレーディングロジックの実装

生成したシグナルに基づいて仮想通貨取引を実行するロジックを実装します。

import ccxt

def trade(symbol, signals):
    exchange = ccxt.binance()  # 利用する取引所(例: Binance)

    for i in range(len(signals)):
        if signals[i] == "Buy":
            print(f"Buying {symbol} at {bitcoin_data['Close'][i]} USD")
            # exchange.create_market_order(symbol, 'buy', amount)
        elif signals[i] == "Sell":
            print(f"Selling {symbol} at {bitcoin_data['Close'][i]} USD")
            # exchange.create_market_order(symbol, 'sell', amount)

trade('BTC/USDT', bitcoin_data['Signals'])

結果の視覚化

取引シグナルと価格データを視覚化することで、戦略の効果を確認します。

import matplotlib.pyplot as plt

plt.figure(figsize=(14, 7))
plt.plot(bitcoin_data['Close'], label='BTC Price', alpha=0.5)
plt.plot(bitcoin_data['RSI'], label='RSI', alpha=0.5)
plt.plot(bitcoin_data['MACD'], label='MACD', alpha=0.5)
plt.plot(bitcoin_data['Signal'], label='Signal', alpha=0.5)
plt.scatter(bitcoin_data.index[bitcoin_data['Signals'] == "Buy"], 
            bitcoin_data['Close'][bitcoin_data['Signals'] == "Buy"], 
            marker='^', color='g', label='Buy Signal', s=100)
plt.scatter(bitcoin_data.index[bitcoin_data['Signals'] == "Sell"], 
            bitcoin_data['Close'][bitcoin_data['Signals'] == "Sell"], 
            marker='v', color='r', label='Sell Signal', s=100)

plt.title('BTC Price with RSI and MACD Signals')
plt.xlabel('Date')
plt.ylabel('Price USD')
plt.legend()
plt.show()

最適化と改善

取引の結果を評価し、パフォーマンスを向上させるための検討を行う必要があります。バックテストを行うことで、異なるパラメータや他のテクニカル指標の組み合わせを試し、最良の結果を導き出すことが可能です。また、取引のリスク管理や資金管理の手法を導入することで、より慎重に投資を行うことが推奨されます。

まとめ

本ガイドでは、RSIとMACDを組み合わせた仮想通貨自動取引システムをPythonで実装する方法を紹介しました。マーケットの変動に適応する柔軟な戦略を構築することが成功の鍵です。自分の手法を磨きながら、実践してみてください。


【お知らせ】
システム全体のインフラ構成や、より詳細な統計検証データについては、プロフィール欄に記載のリンク先(技術メディア)にて随時公開しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?