
Đã có nhiều sàn giao dịch tương lai tiền kỹ thuật số, nhưng với tư cách là một sản phẩm phái sinh tương lai, giao dịch quyền chọn tiền kỹ thuật số, không có nhiều sàn giao dịch trên thị trường. Các sàn giao dịch hỗ trợ giao dịch quyền chọn bao gồm Deribit và BitMEX. Trong lĩnh vực giao dịch định lượng, cũng có nhiều chiến lược giao dịch quyền chọn, chẳng hạn như các chiến lược quyền chọn được đề cập trong một số tài liệu tìm kiếm:
| kiểu | |||||
|---|---|---|---|---|---|
| Chiến lược định hướng: | Mua quyền chọn mua | Bán quyền chọn bán | Bull Call Spread | Bull Put Spread | |
| – | Mua quyền chọn bán | Bán quyền chọn mua | Bear Call Spread | Bear Put Spread | |
| Chiến lược biến động: | Bán Straddle | Bán Wide Straddle | Mua Straddle | Mua Wide Straddle | |
| Chiến lược phòng ngừa rủi ro: | Cuộc gọi được bảo hiểm | Covered Put | Cuộc gọi bảo vệ | Bảo vệ Đặt | |
| – | Giới hạn dài gấp đôi | Giới hạn gấp đôi vị thế bán khống | – | – |
Trích dẫn từkết nối
Để viết một chiến lược giao dịch quyền chọn, trước tiên bạn vẫn cần phải đặt nền tảng vững chắc và quen thuộc với các hoạt động cơ bản như đặt lệnh, thu thập thông tin thị trường, hủy lệnh và nắm giữ vị thế. Việc viết chiến lược vẫn sử dụng Nền tảng giao dịch định lượng Inventor, mặc dù Nền tảng giao dịch định lượng Inventor hiện nay chủ yếu hỗ trợ giao dịch tiền tệ sang tiền tệ, giao dịch hợp đồng và giao dịch đòn bẩy trong lĩnh vực giao dịch định lượng tiền kỹ thuật số. Không có nhiều thông tin liên quan đến giao dịch quyền chọn. Dưới đây, chúng tôi sẽ lấy sàn giao dịch “Deribit” làm ví dụ để giới thiệu cách sử dụng Nền tảng giao dịch định lượng Inventor để chơi giao dịch quyền chọn tiền kỹ thuật số.
Tài liệu API: https://docs.deribit.com/v2/?javascript#public-get_last_settlements_by_instrument Đĩa mô phỏng: https://docs.deribit.com/v2/?javascript#public-get_last_settlements_by_instrument
Bạn có thể đăng ký tài khoản trên trang web nền tảng mô phỏng, kích hoạt API KEY và lấy API KEY. Cấu hình trên Nền tảng giao dịch định lượng Inventor cũng giống như cấu hình tài khoản thực.

Có 4 khái niệm cơ bản bạn cần hiểu khi giao dịch quyền chọn:

Theo tài liệu API của Deribit Exchange, giao diện thị trường của Deribit chỉ truyền dữ liệu để truy cập thông tin thị trường tương lai hoặc quyền chọn.instrument_nameCác tham số khác nhau (instrument_name được thiết lập bởi hàm SetContractType), do đó về cơ bản bạn có thể sử dụng giao diện để lấy thông tin thị trường.GetTickerNhận báo giá cho các lựa chọn.
Tất nhiên, gói mặc định của Inventor Quantitative Trading Platform là thị trường thực tế của Deribit Exchange. Trước tiên, chúng ta phải chuyển sang thị trường mô phỏng và sử dụng mã sau:
exchange.IO("base", "https://test.deribit.com")
Sau đó, chúng tôi hiện đang thiết lập một hợp đồng tùy chọnBTC-27DEC19-7000-P:
Đây là quyền chọn bán có ngày thực hiện: 27/12/19 và giá thực hiện: 7000
exchange.SetContractType("BTC-27DEC19-7000-P")
Sau đó lấy nó. Chúng tôi cùng nhau viết nó, chạy mã và thử nghiệm để lấy thông tin thị trường của hợp đồng quyền chọn này.
function main () {
exchange.IO("base", "https://test.deribit.com")
exchange.SetContractType("BTC-27DEC19-7000-P")
var ticker = exchange.GetTicker()
Log(ticker)
}
Sử dụng các công cụ gỡ lỗi có thể rất tiện lợi để kiểm tra:
Bạn có thể thấy giá cả phù hợp với giá trên đĩa mô phỏng.

Các phương pháp gọi của các giao diện thị trường khác đều giống nhau và sẽ không được nhắc lại ở đây. Cần lưu ý rằng:
Giao dịch quyền chọn không thực sự sôi động. Đôi khi sẽ không có lệnh mua hoặc lệnh bán nào trên thị trường. Lúc này, lớp dưới cùng của Nền tảng giao dịch định lượng Inventor sẽ phát hiện giá trị 0 và báo lỗi. Bạn có thể sử dụngSetErrorFilter("Invalid ticker")Bỏ qua lỗi này và sử dụngGetRawJSONHàm này lấy thông tin gốc của thị trường và đóng gói dữ liệu. Sau đây tôi viết một ví dụ để đạt được các hàm tương tự:
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
}
Khi gọi hãy viết:Log($.GetTicker(exchange))
Hoạt động đặt lệnh rất đơn giản. So với giao dịch tương lai, chỉ có hai hướng: mua và bán. Cũng sử dụngSell,BuyTrình tự chức năng.
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))
}

Lệnh vừa đặt cũng xuất hiện trên bảng giao dịch mô phỏng.

Vàexchange.GetOrder(id)Bạn có thể truy vấn thông tin đơn hàng.
Phương pháp tương tự được sử dụng để hủy đơn hàng.CancelOrderChức năng này giống như chức năng hủy lệnh trong giao dịch tương lai.

Việc có được các tài sản có sẵn trong một tài khoản cũng giống hệt như trong giao dịch tương lai. Gọi trực tiếpGetAccountChức năng.
Hiển thị trên trang trao đổi mô phỏng

Chạy mã để nhận được:

Đối với các vị trí giữ, bạn không thể trực tiếp sử dụng góiGetPositionchức năng này, vì theo mặc định, các giao dịch Deribit là giao dịch tương lai, không phải giao dịch quyền chọn và chỉ có chức năng này mới có thể được sử dụng để có được vị thế tương lai.
Do đó, chúng ta phải đóng gói chức năng tự mình có được vị thế quyền chọn.
Giao diện chức năng để lấy vị trí trong tài liệu 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
}
GọiLog($.GetPosition(exchange))Bạn có thể in thông tin vị trí.

Bằng cách này, các hoạt động cơ bản có thể được thực hiện và phần còn lại là nghiên cứu các chiến lược giao dịch quyền chọn.