Skip to content

Overview

dj edited this page Jun 14, 2021 · 30 revisions

PassivBotの概要

PassivBotは、レバレッジありの無期限先物契約(※1)のポジションにおける「CHOP(※2)」や優柔不断さを取引するために設計された、オープンソースのグリッド・トレーディング・ユーティリティです。レバレッジのかかった先物契約は、リスクの高いデリバティブであり、特にボットが開発中であることから、細心の注意を払って取り組む必要があります。この記事では、ボットの概要と、ボットの構成がどのように機能するかについて、わかりやすく説明します。

(※1)無期限先物契約とは、BybitでいうところのBTCUSDなどを指します。逆に無期限ではないものは、BTCUSD0924などのように、決済日が契約名に付属しています。

(※2)CHOPとは、不規則な乱高下の大きさのこと


グリッドトレーディング

PassivBotでは、優待的な売買グリッドを使用して、優柔不断なプライスアクションをスキャルピング(※1)します。グリッドとは、買いと売りの注文を並べたもので、ポジションを取り、価格が逆に動くと倍にして売るというものです。

これはマーチンゲール戦略(※2)として知られており、PassivBotの基本戦略の重要な要素となっています。ドルコスト平均法でポジションを持つと、損益分岐点の価格がマーク価格(※3)に近づきます。市場が反発したり引いたりしたときには、指値の「縮小」注文を使って、テイクプロフィットの範囲内の平均マーク価格でゆっくりとポジションを解消します。

グリッドトレーディングは基本的に、一定のリスク許容度、マージンバランス(※4)、アグレッション係数(※5)で設定された任意の範囲でボラティリティを取引します。そのため、1秒に1回の注文変更を実行したり、時には注文をより早く満たすなど、かなり高速に動作することができます。

(※1)スキャルピングとは、数秒や数分単位で売買を繰り返し、小さな利益を積み重ねていくFXの手法の1つ

(※2)マーチンゲール戦略とは、「ギャンブルをする人は負けの後毎回かけ金を2倍にし、そこから最初の勝ちがそれまでの負けを取り戻し、プラス元の賭け金と同額の利益を得る」というもの

(※3)マーク価格とはインデックス価格(他取引所の現物価格)に資金調達料を加えたもの

(※4)マージンバランスとは、レバレッジの大きさのこと

(※5)プレイヤーがベットかレイズをする回数と、彼がコールする回数の間にある割合のこと

従来のグリッド取引では、レンジのリスクを適切に重み付けするために高いステップ係数が必要となり、エントリーごとの平均購入額が減少するため、時間がかかります。従来のグリッド取引では、固定値で非常に広い範囲の価格履歴に対して売買グリッドを作成することがよくあります。

流動化(※1)の可能性に直面したくないトレーダーは、先物残高の一部を使った取引に追いやられ、急激な価格変動によって取引が失敗したり、利益が失われたりしないように、ある程度定期的にポジションを監視しなければなりません。その結果、従来のグリッドトレーダーは、数百から数千のエントリーオーダーと、それと同じ数のエグジットオーダーを持つことになります。

これにより、ダブルダウンルール(※2)で清算価格が狂うのを防ぐことができますが、特に小額で取引する場合、短期的なP/Lにはマイナスの影響があります。このような保守的なアルゴリズムを、他のリスクの少ない投資、例えば金利口座などと比較してみると、グリッドトレーディングのレイアウトを使っても、単に銀行にお金を預けておくよりも、ほとんどメリットがなく、むしろリスクが高くなってしまいます。

(※1)流動性リスクとは、市場の流動性が低い場合に希望する金融商品の売買が成立しなかったり、スプレッドコストが上昇したりするリスクのこと

(※2)ダブルダウンとは、(ブラックジャックにおいて)最初に配られた2枚のカードから、あと1枚だけ引くことを条件に、賭け金を2倍に増やせるルール

優先的グリッド・トレーディング

Preferential Grid Tradingは、グリッドトレーディングの基本を踏襲した上で、相対的な値動きに基づいてエントリーとエグジットを行うDCAを行うだけでなく、外部データを用いて主要なトレンドを予測したり、それに乗ったりするアルゴリズムを形成しようとするものです。インディケーターと取引所のデータ(例:ボラティリティー・インディケーター+出来高)を併用することで、プログラムは与えられたポジション(ロングまたはショート)に好みの値を加え、次の再エントリーに影響を与えることができます。

使用する指標は、明確なルールがあれば何でも構いません。要するに、指数移動平均を追加しても、ボットがEMAを解釈するためのルールセットを持っていなければ意味がありません。PassivBotの旧バージョンではこのようにインジケーターを利用していますが、新バージョン(v3+)ではこのロジックを置き換えています。

新しいロジックでは、ボラティリティの両サイドで利益を得ようとするヘッジされたポジションを使用し、合理的または収益性の高い出口ポイントがあるまで、負けたポジションを保持します。

PassivBotの実装

PassivBotは、無期限先物契約を中心に設計された前述のグリッドトレーディングフレームワークをPython 3で実装したものです。PassivBotは、グリッドトレーディングを行うためのフレームワークとして設計されており、期待されるフォーマットを定義するための設定例が用意されていますが、特に決まった設定はありません。PassivBotの動作は3つのセクションに分かれています。

  • 設定と API キー - API キーを使用して取引所を PassivBot に接続し、設定ファイルを理解します。
  • 設定のバックテスト - 与えられた設定を過去の価格履歴でテストし、反復ループを使用して望ましい/収益性の高い設定を見つけることができます。
  • ライブ使用 - ライブアカウントでのボットの使用、期待される動作、典型的な癖、リスク、トラブルシューティング。

ボットの設定や使用に関するバージョン固有の情報については、お使いのバージョンのドキュメントを参照してください。

設定とAPIキー

PassivBotは、自動化されたHFTを促進するための単なるフレームワークであるため、ユーザーは、ボットが注文を出す方法を知るために、いくつかのパラメータを指定する必要があります。これらのパラメータはやや複雑なので、詳細な使用方法については、バージョンごとのドキュメントを参照してください。

また、ボットは、取引所から価格データを取得し、お客様のアカウントを使用して注文を出す必要があります。これには、取引所のAPIエンドポイントへの接続が必要です。セットアップ時には、取引所のアカウントを使用してAPIキーのペアを作成する必要があります。その後、バージョンごとのドキュメントに記載されている指示に従って、APIキーをボットに追加します。

バックテストの構成

次に、設定を指定する必要があります。一般的に、手動で変数を設定すると、時間の経過とともにボットがおかしくなる可能性があるため、手作りの設定を使用する場合は注意が必要です。

PassivBotにはバックテスターが付属しており、お客様のユースケースに最適な設定を見つけるためのスクリプトが用意されています。

新しい設定を考えるには、バックテスターを利用するのが一番ですが、設定ファイルの基本的な理解が必要です。バックテスターの仕事は、コインペアの価格履歴(ETH/USDTの過去30日分など)を見て、設定した条件(レバレッジ、パーセンテージバランス、グリッド間隔など)を調べ、選択したタイムフレームでそれらの設定をテストします。

ボットは、あたかもライブで行っているかのように、すべてのトレードを繰り返し行い、最も良い結果をユーザーに返します。これらの設定(利益が出ていれば)は再利用され、最も利益の出そうな設定に基づいて新しい設定を生成します。

このプロセスは、ユーザーが選択した回数だけ繰り返され、終了時には、その時間枠内で最も収益性の高い設定がボットに返されます。各バージョンのボットには、デフォルトのバックテスト設定がありますので、それを確認し、希望の結果に合わせてテストパラメータを設定してください。

設定ファイルには2つの異なる種類があることに注意してください。バックテスト用の設定ファイルのフォーマットは、ライブ用の設定ファイルのフォーマットとは必ずしも同じではありません。テンプレートの設定ファイルは、お使いのバージョンのフォーマットの参考として常に保持してください。

アップデートによってバージョンが古くなった場合、すぐにアップデートしないのであれば、フォーマットの参考資料が必要となります。いくつかのパラメータには、それに従わなければならない特定のフォーマットがあります。各値の設定についての詳細な情報は、バージョンごとのドキュメントを参照してください。

バックテストを実行すると、取引所から必要な価格データのダウンロードが開始され、いくつかの出力が表示されます(先に提供したAPIキーを使用)。価格データはマシン上にキャッシュされ、バックテスト間で再利用することができます。このため、処理を中断または終了しても、価格データのダウンロードは継続して行われます。

新しいバージョンのボットには、日付を指定して価格データを迅速に取得できるダウンローダーがパッケージされており、バックテストユニットとは独立して動作します。必要な価格データがダウンロードされると、バックテスターは最初の候補から始めて、価格の履歴と比較してテストし、各変数の範囲を繰り返し検討します。ある資産の履歴がダウンロードされると、追加の価格履歴をキャッシュの最後に追加するだけで(自動的に行われる)、テスト時間を短縮することができます。

バックテストの処理はCPUで計算されるため、最適化されていてもテスト期間によっては時間がかかる場合があります。テストを開始する際にはこの点を考慮してください。

新しい収益性の高い設定を見つけるためには、バックテスタを頻繁に使用し、設定と範囲に慣れることが重要です。レンジを調整することで、PassivBotが良い設定を探すために必要な「領域」を狭め、テスト時間を短縮すると同時に、より多くの、あるいはより少ない利益をもたらす設定を検索範囲から除外することができます。

ライブ使用

自己責任でご利用ください 経験則では、"理解できない場合は、実行しないこと!"です。私たちは、あなたのボットがどのように動作するかについて責任を負いません。

これまでに依存パッケージをインストールしていない場合は、次の手順でインストールします。

pip install -r requirements.txt

バックテストを実行し、「best.json」構成をEthereumを取引するライブアカウントにデプロイするとします。まだバックテストを実行していないが、ボットをテストしたい場合は、コミュニティに貢献した設定のリポジトリをここで利用できます。

API KeyFileに移動し、実行するアカウントのキーペアの名前を変更するか、複製して名前を変更します。キーペアと設定ファイルの名前は同じにしてください。例えば、バックテストから「best.json」出力を「live_settings」ディレクトリにコピーし、「ETH-J1.json」と名前を変更した場合、APIキーペア・オブジェクトにも「ETH-J1」と名前を付ける必要があります。これがあなたのユーザー名です。ファイルを保存してください。

ターミナルを開き、PassivBotのルートフォルダに移動してください。

cd Passivbot_futures

そして、以下のコマンドを実行してください。

python3 start_bot.py {exchange} {username}

ここで、{exchange}は「bybit」または「binance」のいずれかで、お客様の{username}はapi-keys.json内のAPI Keypairオブジェクトの名前です。

Example: python3 start_bot.py binance ETH-J1

なお、ユーザー名にファイル拡張子「.json」を付ける必要はありません。ボットは、コンソールに設定ファイルを表示し、取引所に接続して取引を開始します。ボットはコンソールを開いている間だけ動作しますので、取引を停止するまではコンソールを閉じないでください。

ボットは注文をキューに入れているので、取引所の取引インターフェースを通じて、すべての未決済の注文やポジションをキャンセルするか、監視するようにしてください。不意にボットを終了させた場合、ボットは注文をクローズせず、口座には未決済のポジションや数十件の未決済の注文が残ったままとなってしまいます。