Sumber daya yang dimuat... Pemuatan...

Alat perdagangan kuantitatif opsi mata uang digital yang tersedia di luar kotak

Penulis:Penemu Kuantitas - Mimpi Kecil, Dibuat: 2019-12-27 17:35:30, Diperbarui: 2023-10-17 21:26:52

开箱即用的数字货币期权量化交易工具

Alat perdagangan kuantitatif opsi mata uang digital yang tersedia di luar kotak

1, Kuantitas opsi mata uang digital, transaksi terprogram

Baru-baru ini, banyak pertukaran telah membuka fungsi perdagangan derivatif opsi mata uang digital ini, yang mirip dengan opsi tradisional, perdagangan opsi dan perdagangan berjangka, yang dapat dikombinasikan dengan berbagai strategi perdagangan, metode perdagangan. Meskipun ada banyak alat perdagangan kuantitatif sumber terbuka di pasar, namun alat-alat ini membutuhkan pengetahuan tentang dasar-dasar kerangka kerja, akrab dengan bahasa pemrograman kerangka kerja, atau memerlukan debugging, konfigurasi, dan modifikasi yang rumit secara manual.

发明者量化(FMZ.COM)在早期架构设计时,就考虑了各种金融衍生品量化、程序化交易的支持,非常快捷的接入了期权交易。期权交易基本上和期货交易类似,甚至更加简单。并且没有增加新接口,熟悉使用FMZ的用户不会增加其它学习成本,只用把期权合约当做期货合约一样设置,就可以对期权合约进行行情获取,下单、撤单、查询持仓等操作。

2, Mengakses Deribit secara langsung menggunakan bahasa pemrograman asli

Kita akan menggunakan kontrak opsi dari Deribit sebagai contoh, misalnya kita ingin mendapatkan harga indeks dari kontrak opsi tertentu saat ini.

Bahasa Go:

package main 

import "net/http"
import "io/ioutil"
import "fmt"
import "encoding/json"



func main() {
    // 获取行情, 访问接口:https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-27DEC19-7250-P

    resp, err := http.Get("https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-27DEC19-7250-P")
    if err != nil {
        panic(err)
    }

    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }

    ret := string(body)
    fmt.Println("这只是字符串数据ticker:", ret)
    fmt.Println("需要转换为JSON格式") 

    type js struct {
        data interface{}
    }

    ticker := new(js)

    json.Unmarshal([]byte(ret), &ticker.data)

    fmt.Println("ticker:", ticker) 
    fmt.Println("ticker 中的标记价格数据index_price:", ticker.data.(map[string]interface{})["result"].(map[string]interface{})["index_price"])
}

开箱即用的数字货币期权量化交易工具

Anda dapat melihat bahwa hanya untuk mendapatkan data ini, Anda harus menulis lebih dari N set kode.

3. Menggunakan Inventor untuk Mengkuantifikasi Platform Perdagangan

Kami berhasil dengan menggunakan dua kalimat sederhana FMZ.

function main() {
    exchange.IO("base", "https://test.deribit.com")   # 切换为 交易所提供的模拟盘
    exchange.SetContractType("BTC-3JAN20-7250-P")     # 设置期权合约
    var ticker = exchange.GetTicker()                 # 获取期权行情
    Log(ticker.Info.result.index_price)               # 打印需要的数据,观察
}

开箱即用的数字货币期权量化交易工具

Seperti yang Anda lihat, hanya dengan beberapa baris kode, data yang Anda butuhkan dapat diperoleh dengan mudah.

Ini hanya mengakses antarmuka API publik yang tidak ditandatangani dari bursa, yang akan lebih rumit jika mengakses antarmuka pribadi yang ditandatangani.

Setiap antarmuka juga memiliki banyak tanda tangan, parameter, dan lain-lain yang harus diproses:

        strBody := ""
	strQuery := ""
	ts := toString(time.Now().UnixNano() / 1e6)
	nonce := toString(time.Now().UnixNano() / 1e6)
	uri := resource
	if httpMethod == "GET" {
		strQuery = encodeParams(params, false)
		uri = fmt.Sprintf("%s?%s", resource, strQuery)
	} else if httpMethod == "POST" {
		if len(raw) > 0 && len(raw[0]) > 0 {
			strBody = raw[0]
		} else {
			strBody = json_encode(params)
		}
	}

	strRequestDate := fmt.Sprintf("%s\n%s\n%s\n", httpMethod, uri, strBody)
	strToSign := fmt.Sprintf("%s\n%s\n%s", ts, nonce, strRequestDate)
	h := hmac.New(sha256.New, []byte(p.secretKey))
	h.Write([]byte(strToSign))
	strSign := hex.EncodeToString(h.Sum(nil))

	req := Request{
		Method:  httpMethod,
		Uri:     fmt.Sprintf("%s%s", p.apiBase, uri),
		Timeout: p.timeout,
		Body:    strBody,
	}

4. Kebutuhan dan fungsi yang lebih kompleks

Tidak hanya itu, jika digunakan untuk keperluan paralel, asynchronous acquisition, ordering operasi, dan untuk menangani database kode asynchronous, perlu menulis logika pengolahan asynchronous yang lebih kompleks, yang tidak bisa ditinggalkan juga dapat menyebabkan masalah desain logika seperti lock dead. Jika digunakan lagi untuk menunjukkan grafik, kemudian untuk mempelajari penggunaan sebuah database yang besar, bahkan seorang pedagang kuantitatif berbasis pemrograman, juga membutuhkan waktu untuk belajar.

function main(){
    exchange.IO("base", "https://test.deribit.com")
    exchange.SetContractType("BTC-27DEC19-7250-P")
    while(1){
        var records = exchange.GetRecords()
        Log(records)
        $.PlotRecords(records, "K")
        Sleep(1000)
    }
}

Dengan menggunakan perpustakaan template yang disediakan oleh platform, "Draw Line Library", Anda dapat dengan mudah membuat grafik K-line:开箱即用的数字货币期权量化交易工具

Ada banyak lagi fitur yang dapat dijelajahi dan dikembangkan!

5, catatan di belakang

Jika implementasi langsung dengan bahasa go seperti di atas (atau python, dll), mungkin teman baru, langsung didorong keluar >_< Untuk contoh strategi operasi opsi Deribit, lihat:https://www.fmz.com/strategy/179475


Artikel terkait

Informasi lebih lanjut