【初心者挑戦】仮想通貨自動売買Bot構築〜ロジックの作成と実行方法〜

投稿ページ_仮想通貨自動売買Bot③

◆ はじめに

こんにちは、すーやんです。
前回「【初心者挑戦】仮想通貨自動売買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の精度と安定性を向上させる方法について考えていきます。


この記事が役に立ったら
▼応援クリックしていただけると嬉しいです!

ブログランキング・にほんブログ村へ


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です