Kajian awal mengenai Backtesting Strategi Pilihan Mata Wang Digital

Penulis:Kebaikan, Dicipta: 2020-08-23 10:53:41, Dikemas kini: 2023-10-08 19:56:47

img

Kajian awal mengenai Backtesting Strategi Pilihan Mata Wang Digital

Baru-baru ini, FMZ Platform telah menaik taraf sistem backtesting untuk menyokong backtesting pilihan mata wang digital. kali ini, ia menyokong beberapa data pilihan bursa Deribit. jadi kita mempunyai alat yang lebih baik untuk pembelajaran perdagangan pilihan dan pengesahan strategi.

Deribit pilihan backtest

Pilihan Deribit yang ditakrifkan dalam sistem backtest adalah gaya Eropah, dan nilai satu kontrak adalah 1BTC. Kod kontrak opsyen adalah: BTC-7AUG20-12750-C.

Subjek Tarikh Pelaksanaan Harga Pelaksanaan (Call/Put) Pilihan
BTC 7AUG20 12750 C
Bitcoin Latihan pada 7 Ogos 2020 Harga pelaksanaan 12750 Pilihan panggilan
BTC 7AUG20 12750 P
Bitcoin Latihan pada 7 Ogos 2020 Harga pelaksanaan 12750 Put pilihan

Operasi seperti menetapkan kontrak dan mendapatkan kedudukan adalah sama dengan niaga hadapan mata wang digital. Set kontrak: pertukaran.SetContractType ((BTC-7AUG20-12750-C) Dapatkan kedudukan: var pos = pertukaran.GetPosition()

Harga kontrak opsyen adalah premium kontrak opsyen, dan pembeli opsyen perlu membayar premium opsyen kepada penjual opsyen. Pembeli mempunyai hak untuk melaksanakan, dan penjual mempunyai kewajipan untuk melaksanakan. Sebelum kontrak opsyen dilaksanakan, ia boleh didagangkan (seperti pembubaran, penyelesaian kewajipan).

Contoh gabungan perdagangan opsyen biasa

Jual pilihan beli dan beli satu tempat.

/*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

Pilihan boleh memberikan tahap perlindungan lindung nilai tertentu kepada aset yang dibeli di tempat. Secara amnya digunakan apabila optimis tentang tempat dan bersedia untuk memegang tempat. Risiko terletak pada penurunan harga tempat. Walaupun pada tahap tertentu, pilihan dapat menggantikan kerugian tempat tertentu, tetapi selepas kerugian melebihi premium pilihan, akan ada kerugian bersih.

Di samping itu, kecairan pasaran opsyen mata wang digital adalah purata, dan kadang-kadang tidak ada rakan kongsi yang dijumpai.

Begitu juga, kita boleh menggantikan spot dengan niaga hadapan, kod adalah seperti 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 boleh mengurangkan modal yang diduduki daripada spot, tetapi risikonya lebih tinggi daripada spot.

Di samping itu, terdapat banyak kombinasi perdagangan pilihan lain:

  • Spread opsyen panggilan bullbull call spread
  • Pilihan Bear Put SpreadBear Put Spread

Mereka yang berminat boleh mengkaji dalam sistem backtest.


Berkaitan

Lebih lanjut