Nghiên cứu sơ bộ về Backtesting của chiến lược tùy chọn tiền kỹ thuật số
Gần đây, nền tảng FMZ đã nâng cấp hệ thống kiểm tra lại để hỗ trợ kiểm tra lại các tùy chọn tiền kỹ thuật số.
Tùy chọn Deribit được xác định trong hệ thống backtest là kiểu châu Âu, và giá trị của một hợp đồng là 1BTC. Mã hợp đồng tùy chọn là: BTC-7AUG20-12750-C.
Chủ đề | Ngày thực thi | Giá thực hành | (Call/Put) Tùy chọn |
---|---|---|---|
BTC | 7AUG20 | 12750 | C |
Bitcoin | Bài tập vào ngày 7 tháng 8 năm 2020 | Giá thực thi 12750 | Tùy chọn gọi |
BTC | 7AUG20 | 12750 | P |
Bitcoin | Bài tập vào ngày 7 tháng 8 năm 2020 | Giá thực thi 12750 | Tùy chọn đặt |
Các hoạt động như thiết lập hợp đồng và nhận vị trí giống như hợp đồng tương lai tiền kỹ thuật số.
Hợp đồng đặt: trao đổi.SetContractType ((
Giá của hợp đồng quyền chọn là tiền thưởng của hợp đồng quyền chọn, và người mua quyền chọn cần phải trả tiền thưởng quyền chọn cho người bán quyền chọn. Người mua có quyền thực hiện, và người bán có nghĩa vụ thực hiện. Trước khi hợp đồng quyền chọn được thực hiện, nó có thể được giao dịch (như thanh lý, thanh toán nghĩa vụ).
Bán một lựa chọn mua và mua một điểm.
/*backtest
start: 2020-07-27 00:00:00
end: 2020-08-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Deribit","currency":"BTC_USD"},{"eid":"OKEX","currency":"BTC_USDT","balance":100000}]
*/
function main() {
exchanges[0].SetContractType('BTC-7AUG20-12750-C');
var initSpotAcc = _C(exchanges[1].GetAccount)
var isFirst = true
while(true) {
var optionTicker = exchanges[0].GetTicker()
var spotTicker = exchanges[1].GetTicker()
if(isFirst) {
exchanges[0].SetDirection("sell")
exchanges[0].Sell(optionTicker.Buy, 1)
exchanges[1].Buy(spotTicker.Sell, 1)
isFirst = false
}
var optionPos = _C(exchanges[0].GetPosition)
var nowSpotAcc = _C(exchanges[1].GetAccount)
var diffStocks = (nowSpotAcc.Stocks - initSpotAcc.Stocks)
var diffBalance = (nowSpotAcc.Balance - initSpotAcc.Balance)
var spotProfit = diffBalance + diffStocks * spotTicker.Last
var optionProfit = optionPos[0].Profit * spotTicker.Last
LogProfit(spotProfit + optionProfit)
$.PlotLine("Spots", spotProfit)
$.PlotLine("Options", optionProfit)
Sleep(500)
}
}
Tùy chọn có thể cung cấp một mức độ bảo vệ bảo hiểm nhất định cho các tài sản được mua tại chỗ. Thông thường được sử dụng khi lạc quan về mặt tại chỗ và sẵn sàng giữ tại chỗ. Rủi ro nằm trong sự sụt giảm giá tại chỗ. Mặc dù đến một mức độ nhất định, tùy chọn có thể bù đắp cho một khoản lỗ tại chỗ nhất định, nhưng sau khi lỗ vượt quá phí bảo hiểm tùy chọn, sẽ có lỗ ròng.
Ngoài ra, thanh khoản của thị trường tùy chọn tiền kỹ thuật số là trung bình, và đôi khi không có đối tác nào được tìm thấy.
Tương tự, chúng ta có thể thay thế điểm với tương lai, mã là như sau:
/*backtest
start: 2020-07-27 00:00:00
end: 2020-08-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Deribit","currency":"BTC_USD"},{"eid":"Futures_OKCoin","currency":"BTC_USD"}]
*/
function main() {
exchanges[0].SetContractType('BTC-7AUG20-12750-C');
exchanges[1].SetContractType("quarter")
var isFirst = true
while(true) {
var optionTicker = exchanges[0].GetTicker()
var futuresTicker = exchanges[1].GetTicker()
if(isFirst) {
exchanges[0].SetDirection("sell")
exchanges[0].Sell(optionTicker.Buy, 1)
exchanges[1].SetDirection("buy")
exchanges[1].Buy(futuresTicker.Sell, _N(1 * futuresTicker.Sell / 100, 0))
isFirst = false
}
var optionPos = _C(exchanges[0].GetPosition)
var futuresPos = _C(exchanges[1].GetPosition)
var futuresProfit = futuresPos[0].Profit
var optionProfit = optionPos[0].Profit
LogProfit(futuresProfit + optionProfit)
$.PlotLine("Futures", futuresProfit)
$.PlotLine("Options", optionProfit)
Sleep(500)
}
}
Các hợp đồng tương lai có thể làm giảm vốn chiếm đóng so với mặt hàng, nhưng rủi ro cao hơn so với mặt hàng.
Ngoài ra còn có nhiều sự kết hợp giao dịch tùy chọn khác:
bull call spread
Bear Put Spread
Những người quan tâm có thể nghiên cứu nó trong hệ thống backtest.