◆ はじめに
こんにちは、すーやんです。
前回「【初心者挑戦】仮想通貨自動売買Bot構築〜環境構築と設計方針を固める〜」に引き続き、
今回は、自動売買Botのロジックの作成と実行方法について紹介いたします。
この記事を読むと、仮想通貨自動売買Botの開発に必要な環境構築と設計方針を固めることができます。
◆ 仮想通貨を自動売買bot作成
自動売買Botを作成するためには、まずプログラムの基盤となるプロジェクトを作成する必要があります。
プロジェクトは、Botを開発・実行するための環境を整える大事な部分です。
このプロジェクト内で、必要なライブラリやコードを作成・実行していくことになります。
プロジェクト作成手順
ターミナルまたはコマンドプロンプトを開き、下記コマンドを実行する。
mkdir crypto-bot
cd crypto-bot
プログラムの作成
プログラムはシンプルで、113行程度のコードで構成されています。
理解しやすさを重視して、コードの記述は可能な限りシンプルにしてあります。
Botが動作するための基本的な流れを理解することが目標です。
import time
import pandas as pd
import ccxt
import talib as ta
from datetime import datetime
import hmac
import requests
import hashlib
import json
exchange = ccxt.coincheck()
exchange.apiKey = ‘あなたのAPIキー’
exchange.secret = ‘あなたのシークレットキー’
apiKey = ‘あなたのAPIキー’
secret = ‘あなたのシークレットキー’
crypto = ‘BTC’ # 取引する仮想通貨
currency = ‘JPY’ # 日本円建て
interval = 60*15 # チャート足(60*15なら 15分足)
duration = 20 # 移動平均のサイズ
tradeAmountBtc = 0.001 # 取引量 0.001BTC
symbol = crypto + ‘/’ + currency
position = 0 # 自動売買中に持っているポジション
last_rate = 0 # 最後に約定したレート(単位=currency)
endPoint = ‘https://coincheck.com’
path = ‘/api/exchange/orders’
url = endPoint + path
df = pd.DataFrame()
while True:
time.sleep(interval)
ticker_info = exchange.fetch_ticker(symbol)
df = pd.concat([df, pd.DataFrame({‘price’: [ticker_info[‘last’]]})], ignore_index=True)
if len(df) < duration:
continue
df['upper'], df['middle'], df['lower'] = ta.BBANDS(df['price'], timeperiod=duration, nbdevup=2, nbdevdn=2, matype=0)
if position:
if df['price'].iloc[-1] > df[‘upper’].iloc[-1] and last_rate < df['price'].iloc[-1]:
body = {
'order_type': 'market_sell', # 'market_buy' または 'market_sell'
'pair': 'btc_jpy', # 取引ペア(例: 'btc_jpy')
'amount': position # 注文金額
}
# 現在の日時を取得
now = datetime.now()
# リクエストのヘッダー作成
timestamp = f'{int(now.timestamp() * 1000)}'
text = timestamp + endPoint + path + json.dumps(body)
sign = hmac.new(bytes(secret.encode('ascii')), bytes(text.encode('ascii')), hashlib.sha256).hexdigest()
headers = {
"ACCESS-KEY": apiKey,
"ACCESS-NONCE": timestamp,
"ACCESS-SIGNATURE": sign,
"Content-Type": 'application/json'
}
# APIリクエストを送信
response = requests.post(url, headers=headers, data=json.dumps(body))
# 結果を表示
if response.status_code == 200:
print('注文が正常に実行されました:', response.json())
else:
print('エラーが発生しました:', response.json())
print('【売却注文成功】 売却数量:' + str(tradeAmountBtc) + crypto + '売却レート:' + str(ticker_info['last']))
position = 0
last_rate = 0
else:
ticker_balance = exchange.fetch_balance()
if float(ticker_balance[currency]['free']) > tradeAmountBtc * ticker_info[‘last’] and df[‘price’].iloc[-1] < df['lower'].iloc[-1]:
amount = tradeAmountBtc * ticker_info['last']
body = {
'order_type': 'market_buy', # 'market_buy' または 'market_sell'
'pair': 'btc_jpy', # 取引ペア(例: 'btc_jpy')
'market_buy_amount': amount # 注文金額(0.001)
}
# 現在の日時を取得
now = datetime.now()
# リクエストのヘッダー作成
timestamp = f'{int(now.timestamp() * 1000)}'
text = timestamp + endPoint + path + json.dumps(body)
sign = hmac.new(bytes(secret.encode('ascii')), bytes(text.encode('ascii')), hashlib.sha256).hexdigest()
headers = {
"ACCESS-KEY": apiKey,
"ACCESS-NONCE": timestamp,
"ACCESS-SIGNATURE": sign,
"Content-Type": 'application/json'
}
# APIリクエストを送信
response = requests.post(url, headers=headers, data=json.dumps(body))
# 結果を表示
if response.status_code == 200:
print('注文が正常に実行されました:', response.json())
else:
print('エラーが発生しました:', response.json())
print('【購入注文成功】購入数量:' + str(tradeAmountBtc) + crypto + '購入レート:' + str(ticker_info['last']))
position = amount
last_rate = ticker_info['last']
df = df.iloc[1:, :]
上記プログラムをcryptoBot.pyへ貼り付け保存します。
◆ 仮想通貨の自動売買bot実行
・ライブラリのインポート
Pythonの「ライブラリ」とは、特定の機能を簡単に使えるようにまとめられたコードのセットです。
言い換えれば、便利な機能が詰まったツール箱のようなものです。
今回、インポートするライブラリは下記4つです。
- pandas
pandasは、テクニカル分析に必要な時系列データ(例えば、ローソク足など)を扱うためのライブラリです。
これにより、価格データを効率的に取り込み、整形し、DataFrameという形式で操作することができます。
DataFrameを使うことで、データのフィルタリングや集計が簡単に行えます。
- ccxt
ccxtライブラリは、仮想通貨取引所のAPIを統一的なインターフェースで操作するために使用されます。
これを使うことで、異なる取引所のAPIを簡単に扱うことができ、仮想通貨の注文や価格取得などがスムーズに行えます。
- talib
talibは、テクニカル分析指標を計算するためのライブラリです。
ボリンジャーバンドや移動平均、RSI(相対力指数)などの指標を素早く計算でき、売買のシグナルを生成する際に役立ちます。
これにより、Botが市場の動向を解析して、売買タイミングを決定することができます。
- requests
requestsは、HTTP通信を簡単に行うためのPythonライブラリです。
APIとのデータ送受信に使われ、GETやPOSTなどのメソッドでリクエストを送信し、レスポンスを簡単に扱えます。
ライブラリのインポート手順
pip install pandas ccxt TA-Lib requests
※ライブラリのインポートは初回のみ
プログラムの実行
コマンドプロンプトを開く。(Ctrl + Shift + c)
下記コマンドを実行する。
Python3 cryptoBot.py
◆ 仮想通貨の自動売買botが設計方針に適合しているかどうかの検証
前回の記事で仮想通貨自動売買システムの設計方針を確定しましたが、今回作成した自動売買Botがその設計方針に適合しているかを検証します。
この検証は、システムが意図通りに機能するかどうかを確認するための重要なステップです。
カテゴリー | 項目 | 内容 | 適合度 |
取引戦略 | 使用指標 | ボリンジャーバンド | 〇 |
取引戦略 | 売買ルール | 買い:-2σを下回ったとき 売り:+2σを上回ったとき | 〇 |
取引戦略 | 取引ペア | BTC/JPY | 〇 |
リスク管理 | 最小取引単位 | 0.001 BTC | 〇 |
リスク管理 | ストップロス | 設定なし | – |
リスク管理 | テイクプロフィット | +2σに到達した時点で利益確定 | 〇 |
取引の実行方法 | 注文方式 | 成行注文 | 〇 |
取引の実行方法 | 監視 | 24時間稼働 | × |
取引の実行方法 | 判断基準 | 15分足チャート | 〇 |
監視とログ | ログ出力 | 要所に記録 | × |
監視とログ | エラー処理 | 異常時も継続動作 | × |
通知機能 | 取引実行時に即時通知 | – | × |
通知機能 | 通知内容:取引結果(利益・損失) | – | × |
◆ チェックリスト:今回やったこと
ここまでで、自動売買Botを動かすための準備が一通り整いました。
以下のチェックリストを見ながら、やり残しがないか確認してみましょう。
- プロジェクトフォルダ
crypto-bot
の作成
- 自動売買BotのPythonプログラム(113行程度)を作成
- Coincheck APIを使った売買処理の記述
- pandasを使った価格データの取得・保存
- TA-Libでボリンジャーバンドの計算を実装
- 買い・売り条件の判定ロジックを作成
- HMAC-SHA256でAPI認証ヘッダーを作成
- requestsライブラリで注文を送信
- プログラムを
cryptoBot.py
として保存
- プログラムの実行方法を確認
すべてクリアできていれば準備完了です!
まだの部分があれば、ゆっくり確実に仕上げていきましょう。
◆ 次回予告
自動売買Botは、設計方針に基づいて開発されていますが、いくつかの機能において改善が必要です。
特に、リスク管理や取引通知、エラー処理の部分は今後改善していくべき重要なポイントです。
次回は、これらの課題に対する解決策を検討し、Botの精度と安定性を向上させる方法について考えていきます。
この記事が役に立ったら
▼応援クリックしていただけると嬉しいです!
コメントを残す