Studi awal tentang Backtesting Strategi Opsi Mata Uang Digital

Penulis:Kebaikan, Dibuat: 2020-08-23 10:53:41, Diperbarui: 2023-10-08 19:56:47

img

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.

Deribit opsi backtest

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 ((BTC-7AUG20-12750-C) Dapatkan posisi: var pos = pertukaran.GetPosition()

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).

Contoh kombinasi perdagangan opsi umum

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)
    }
}

img

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)
    }
}

img

Futures dapat mengurangi modal yang diduduki daripada spot, tetapi risikonya lebih tinggi daripada spot.

Selain itu, ada banyak kombinasi perdagangan opsi lainnya:

  • Spread opsi bull callbull call spread
  • Opsi Bear Put SpreadBear Put Spread

Mereka yang tertarik dapat mempelajarinya di sistem backtest.


Berkaitan

Lebih banyak