Studi awal tentang Backtesting Strategi Opsi Mata Uang Digital
Baru-baru ini, FMZ Platform telah memperbarui sistem backtesting untuk mendukung backtesting opsi mata uang digital. kali ini, ia mendukung beberapa data opsi dari bursa Deribit. jadi kita memiliki alat yang lebih baik untuk pembelajaran perdagangan opsi dan verifikasi strategi.
Opsi Deribit yang didefinisikan dalam sistem backtest adalah gaya Eropa, dan nilai satu kontrak adalah 1BTC.
Subyek | Tanggal Pelaksanaan | Harga Pelaksanaan | (Call/Put) Opsi |
---|---|---|---|
BTC | 7AUG20 | 12750 | C |
Bitcoin | Latihan pada tanggal 7 Agustus 2020 | Harga pelaksanaan 12750 | Opsi panggilan |
BTC | 7AUG20 | 12750 | P |
Bitcoin | Latihan pada tanggal 7 Agustus 2020 | Harga pelaksanaan 12750 | Put Opsi |
Operasi seperti menetapkan kontrak dan mendapatkan posisi sama dengan berjangka mata uang digital.
Set kontrak: exchange.SetContractType ((
Harga kontrak opsi adalah premi kontrak opsi, dan pembeli opsi perlu membayar premi opsi kepada penjual opsi. pembeli memiliki hak untuk menggunakan, dan penjual memiliki kewajiban untuk menggunakan. sebelum kontrak opsi dieksekusi, itu dapat diperdagangkan (seperti likuidasi, penyelesaian kewajiban).
Jual opsi beli dan beli satu titik.
/*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)
}
}
Opsi dapat memberikan tingkat perlindungan lindung nilai tertentu untuk aset yang dibeli di spot. Umumnya digunakan ketika optimis tentang spot dan bersedia untuk memegang spot. Risiko terletak pada penurunan harga spot. Meskipun sampai batas tertentu, opsi dapat menebus kerugian spot tertentu, tetapi setelah kerugian melebihi premi opsi, akan ada kerugian bersih.
Selain itu, likuiditas pasar opsi mata uang digital adalah rata-rata, dan kadang-kadang tidak ada lawan yang ditemukan.
Demikian juga, kita dapat mengganti spot dengan futures, kode adalah sebagai berikut:
/*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)
}
}
Futures dapat mengurangi modal yang diduduki daripada spot, tetapi risikonya lebih tinggi daripada spot.
Selain itu, ada banyak kombinasi perdagangan opsi lainnya:
bull call spread
Bear Put Spread
Mereka yang tertarik dapat mempelajarinya di sistem backtest.