
デジタル通貨先物取引所はすでに多数存在しますが、先物デリバティブであるデジタル通貨オプション取引については、市場に出回っている取引所は多くありません。オプション取引をサポートしている取引所としては、DeribitやBitMEXなどがあります。定量取引の分野では、検索された資料で言及されているオプション戦略など、オプション取引の戦略も数多くあります。
| タイプ | |||||
|---|---|---|---|---|---|
| 方向性戦略: | コールオプションの購入 | プットオプションの売却 | ブルコールスプレッド | ブル・プット・スプレッド | |
| – | プットオプションを買う | コールオプションの売り | ベアコールスプレッド | ベア・プット・スプレッド | |
| ボラティリティ戦略: | ストラドルを売る | ワイドストラドルを売る | ストラドルを購入 | ワイドストラドルを購入 | |
| ヘッジ戦略: | カバードコール | カバード・プット | 保護コール | プロテクティブ・プット | |
| – | ロングダブルリミット | ショートポジションのダブルリミット | – | – |
引用元接続する
オプション取引戦略を作成するには、まずしっかりとした基礎を築き、注文の発注、市場情報の取得、注文のキャンセル、ポジションの取得などの基本的な操作に精通している必要があります。 Inventor Quantitative Trading Platform は現在、デジタル通貨定量取引の分野で主に通貨間取引、契約取引、レバレッジ取引をサポートしていますが、戦略作成では引き続き Inventor Quantitative Trading Platform を使用しています。オプション取引に関する情報はあまりありません。以下では、「Deribit」取引所を例に、Inventor Quantitative Trading Platform を使用してデジタル通貨オプション取引を行う方法を紹介します。
API ドキュメント: https://docs.deribit.com/v2/?javascript#public-get_last_settlements_by_instrument シミュレーション ディスク: https://docs.deribit.com/v2/?javascript#public-get_last_settlements_by_instrument
シミュレーション プラットフォームの Web サイトでアカウントを登録し、API KEY を有効にして、API KEY を取得できます。 Inventor Quantitative Trading Platform での設定は、実際のアカウントの設定と同じです。

オプション取引には理解しておくべき 4 つの基本概念があります。

Deribit Exchange の API ドキュメントによると、Deribit の市場インターフェースは、先物またはオプションの市場情報にアクセスするためのデータのみを渡します。instrument_nameパラメータは異なります (instrument_name は関数 SetContractType によって設定されます) ので、基本的には市場情報を取得するためにインターフェイスを使用できます。GetTickerオプションの見積もりを取得します。
もちろん、Inventor Quantitative Trading Platform のデフォルト パッケージは、Deribit Exchange の実際の市場です。まずシミュレーション市場に切り替えて、次のコードを使用する必要があります。
exchange.IO("base", "https://test.deribit.com")
そして現在、オプション契約を設定していますBTC-27DEC19-7000-P:
これは、権利行使日が2019年12月27日、権利行使価格が7000のプットオプションです。
exchange.SetContractType("BTC-27DEC19-7000-P")
次に、それを取得します。一緒にコードを書き、実行し、このオプション契約の市場情報を取得するためにテストします。
function main () {
exchange.IO("base", "https://test.deribit.com")
exchange.SetContractType("BTC-27DEC19-7000-P")
var ticker = exchange.GetTicker()
Log(ticker)
}
デバッグ ツールを使用すると、次のテストに非常に便利です。
価格がシミュレーション ディスク上の価格と一致していることがわかります。

他のマーケットインターフェースの呼び出し方法も同じなので、ここでは繰り返しません。次の点に注意してください。
オプション取引はあまり活発ではありません。買い注文や売り注文がないこともあります。このとき、Inventor Quantitative Trading Platform の最下層は 0 の値を検出し、エラーを報告します。SetErrorFilter("Invalid ticker")このエラーを無視してGetRawJSONこの関数は市場の元の情報を取得し、データをカプセル化します。ここでは同様の機能を実現する例を記述します。
function init() {
SetErrorFilter("Invalid ticker")
}
$.GetTicker = function(e) {
var ticker = e.GetTicker()
if (!ticker) {
try {
var ret = JSON.parse(e.GetRawJSON())
return {
Info : ret,
High : ret.result.stats.high,
Low : ret.result.stats.low,
Buy : ret.result.best_bid_price,
Sell : ret.result.best_ask_price,
Last : ret.result.last_price,
Volume : ret.result.stats.volume,
OpenInterest : 0,
Time : new Date().getTime()
}
} catch (err) {
Log(err)
}
}
return ticker
}
電話するときは次のように書いてください:Log($.GetTicker(exchange))
注文操作は非常に簡単です。先物取引と比較すると、買いと売りの2つの方向しかありません。また使用するSell,Buy機能の順序。
function main () {
exchange.IO("base", "https://test.deribit.com")
exchange.SetContractType("BTC-27DEC19-7000-P")
var id = exchange.Buy(0.017, 1)
Log(exchange.GetOrder(id))
}

先ほど発注した注文は、シミュレーション取引ボードにも表示されます。

そしてexchange.GetOrder(id)注文情報を照会できます。
注文のキャンセルにも同じ方法が使用されます。CancelOrder先物取引で注文をキャンセルするのと同じような機能です。

口座内の利用可能な資産を取得する方法は、先物取引とまったく同じです。直接呼び出しGetAccount関数。
模擬交換ページに表示

コードを実行すると次のようになります:

ポジションを保持するには、パッケージ化されたGetPosition関数は、デフォルトでは Deribit 取引はオプション取引ではなく先物取引であり、先物ポジションを取得するにはこの関数のみを使用できるためです。
したがって、オプションポジションを取得する機能を独自にカプセル化する必要があります。
API ドキュメント内の位置を取得するための関数インターフェース:

$.GetPosition = function(e) {
// /private/get_positions
// currency , kind
var positions = []
var currency = e.GetCurrency()
var arr = currency.split("_")
var baseCurrency = arr[0]
try {
var ret = e.IO("api", "GET", "/api/v2/private/get_positions", "currency=" + baseCurrency + "&kind=option")
for (var i in ret.result) {
if (ret.result[i].size == 0 || ret.result[i].direction == "zero") {
continue
}
var pos = {
Info : ret.result[i],
Amount : ret.result[i].size,
FrozenAmount : 0,
Price : ret.result[i].average_price,
Profit : ret.result[i].floating_profit_loss,
MarginLevel : 0,
Margin : 0,
ContractType : ret.result[i].instrument_name,
Type : ret.result[i].direction == "buy" ? ORDER_TYPE_BUY : ORDER_TYPE_SELL,
}
positions.push(pos)
}
} catch (err) {
Log(err)
positions = null
}
return positions
}
電話Log($.GetPosition(exchange))位置情報を印刷できます。

このようにして、基本的な操作を実現でき、残りはオプション取引戦略を研究することです。