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.
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 ((
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).
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)
}
}
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)
}
}
Futures boleh mengurangkan modal yang diduduki daripada spot, tetapi risikonya lebih tinggi daripada spot.
Di samping itu, terdapat banyak kombinasi perdagangan pilihan lain:
bull call spread
Bear Put Spread
Mereka yang berminat boleh mengkaji dalam sistem backtest.