前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。
今回は「レバレッジ機能を利用した積み増しBot(プロトタイプ)」の作成です。
積み増しBotとは
このBotは、レバレッジ(借り入れ)を活用してビットコインのポジションを増やし、ビットコインの価格上昇から利益を得ることを狙います。
まずは、この戦略がどのように機能するかを簡単にまとめます。
ここではBTCとUSDTを例に挙げて説明します。
- 1. 初期資金としてUSDTを用意する
まず、トレーディングに使う初期資金として、USDT(Tether)というステーブルコインを用意します。(USDTは1USDT=1USDの価値が保たれるように設計されているステーブルコイン) - 2. BTC/USDT市場でビットコインを購入
利用可能なUSDTを使って、BTC/USDT市場でビットコインを購入する。このステップでは、手持ちのUSDT全てを使ってビットコインを買う。 - 3. 購入したビットコインを担保にしてUSDTを借りる
次に、購入したビットコインを担保として使用し、追加のUSDTを借りる。この借入れにはレバレッジが適用される。レバレッジを使うと、保有資産よりも大きな取引が可能になり、利益機会を増やすことができるが、リスクも増大する。 - 4. 借りたUSDTでさらにビットコインを購入
借り入れたUSDTを使って、さらにビットコインを購入する。これにより、ビットコインのポジションが増え、価格上昇からの利益機会が拡大する。 - 5. ビットコイン価格の上昇に応じてレバレッジを増やす
ビットコインの価格が上昇すると、保有しているビットコインの価値も上昇する。この価値の上昇に応じて、さらにUSDTを借り入れ、そのUSDTでビットコインを購入することができる。 - 6. ループ
ビットコインの価格が上昇し続ける限り、このプロセスを繰り返す。つまり、価格上昇に応じてレバレッジを利用してUSDTを借り、そのUSDTでビットコインを購入し、さらなる価格上昇から利益を目指す。 - 7. 利益確定の戦略
あらかじめ設定した価格目標に到達したら、ビットコインの購入を停止し、保有ビットコインに対して売り注文を出しておきく。これにより、価格が更に上昇した場合でも利益を確定させることができる。
利益を出す仕組み
ビットコインの価格が上昇すると、初めに購入したビットコインと、その後レバレッジを利用して購入したビットコインの価値が増加します。この価格上昇による資産の増加が利益となる。しかし、この戦略は価格が下落した場合には大きな損失を被る可能性があるため、その点のリスク管理が非常に重要。
注意点
レバレッジを使用するため、想定されるリスクを入念に見積もっておく必要がある。
- 1. レバレッジによるリスク増大
レバレッジを使用すると、少ない資金で大きな取引が可能になるが、これは損失のリスクも同様に増大する。ビットコインの価格が予想と反対方向に動くと、レバレッジをかけた分だけ損失も大きくなる。 - 2. 市場のボラティリティ
ビットコインを含む仮想通貨市場は非常にボラティリティ(価格変動の激しさ)が高い。急激な価格の変動は、レバレッジを利用している場合、大きな損失につながりやすい。特に、予期せぬニュースやイベントが市場に影響を及ぼす場合、価格は短時間で大きく変動することがある。 - 3. マージンコールとポジションの強制清算
レバレッジを使って取引を行う場合、証拠金(マージン)を担保としてポジションを保持する。市場が不利な方向に動き、証拠金が維持証拠金レベルを下回ると、マージンコールが発生する。これに応じて追加の資金を提供できない場合、ポジションは損失を最小限に抑えるために強制的に清算されることがある。これにより、大きな損失を被る可能性がある。 - 4. 資金流出のリスク
価格が下落し続け、ポジションを維持するための追加資金が必要になった場合、十分な資金を確保できなければポジションを失うことになる。特に、市場が急落する時には、追加資金を用意する時間がないこともある。 - 5. 金利リスク
借り入れた資金には金利がかかる。この金利は市場条件によって変動することがあるため、長期にわたってポジションを保有する場合、想定外の高金利が適用されるリスクがある。金利が上昇すると、利益を得るためにビットコインの価格が上昇する必要がある閾値も高くなる。 - 6. 流動性のリスク
市場の流動性が低い場合、大量のビットコインを購入または売却しようとすると、価格に大きな影響を与える可能性がある。特に、急激な価格変動時には、望む価格で取引ができないことがあり、想定外の損失を被る可能性がある。 - 7. システム・運用リスク
取引所や貸付プラットフォームのシステム障害や運用上の問題により、取引が遅延したり、注文が正しく処理されない場合がある。また、セキュリティ違反による資産の損失リスクも考慮する必要がある。
積み増しbot(プロトタイプ)
以下のコードはプロトタイプなので、実際の運用には修正が必要です。
import ccxt import time # BybitのAPIキーとシークレットを設定 api_key = 'YOUR_API_KEY' api_secret = 'YOUR_API_SECRET' bybit = ccxt.bybit({ 'apiKey': api_key, 'secret': api_secret, 'enableRateLimit': True, }) # リスク管理パラメータ MAX_LEVERAGE = 5 # 最大レバレッジ STOP_LOSS_RATIO = 0.1 # ストップロスの比率 TAKE_PROFIT_RATIO = 0.2 # 利益確定の比率 BALANCE_TO_RISK = 0.02 # トータルバランスに対するリスクの割合 # 初期資金を取得 balance = bybit.fetch_balance()['USDT']['free'] # 初期ポジションを開く initial_usdt = balance * BALANCE_TO_RISK btc_price = bybit.fetch_ticker('BTC/USDT')['last'] initial_btc_amount = initial_usdt / btc_price # BTC購入 order = bybit.create_market_buy_order('BTC/USDT', initial_btc_amount) # レバレッジの設定 bybit.private_post_position_leverage({'symbol': 'BTCUSDT', 'leverage': MAX_LEVERAGE}) # メインループ while True: btc_price = bybit.fetch_ticker('BTC/USDT')['last'] position = bybit.fetch_positions(symbols=['BTC/USDT'])[0] # 仮定のメソッド、実際のメソッドはAPIにより異なる # ストップロスと利益確定の価格を計算 stop_loss_price = btc_price * (1 - STOP_LOSS_RATIO) take_profit_price = btc_price * (1 + TAKE_PROFIT_RATIO) # ストップロスと利益確定のオーダーを設定 # 注意: 実際のAPI呼び出しには対応するメソッドを使用する。 stop_loss_order = bybit.create_order( symbol='BTC/USDT', type='stop', side='sell', amount=initial_btc_amount, price=stop_loss_price, params={"stop_px": stop_loss_price, "base_price": btc_price, "trigger_by": 'LastPrice'} ) take_profit_order = bybit.create_order( symbol='BTC/USDT', type='limit', side='sell', amount=initial_btc_amount, price=take_profit_price, params={"reduce_only": True} ) # 1分ごとにループ time.sleep(60)
まとめ
プロトタイプのコードを書くことで、実際の戦略執行に必要なモジュールやbotの構造を理解することができました。
プロトタイプに修正を加える過程で現実的に必要な技術や知識が明確になるので、プロトタイプをどんどん作っていきます。
多分、プロトタイプをどんどん作った方が良いフェーズに入った。Botの出来は雑でも取り敢えず動けば、そこから得た情報を元に本当に必要なことを獲得するきっかけにもなる。余分なことはバッサリ捨てて、現場から得られる情報を増やして、改良&改良。
— よだか(夜鷹/yodaka) (@yodakablog) March 4, 2024
【宿題】
- 積み増しBotを実際に稼働させる取引所や先駆者の書いたコードに合わせて改良する
- 積み増しBotのシミュレーションコードを書く