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

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

img

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.

Penemu KuantitasFMZ.COMDalam desain arsitektur awal, dukungan untuk kuantitas, perdagangan terprogram, dan berbagai jenis derivatif keuangan dipertimbangkan untuk mengakses perdagangan opsi dengan sangat cepat. Perdagangan opsi pada dasarnya mirip dengan perdagangan futures, bahkan lebih sederhana. Dan tanpa menambahkan antarmuka baru, pengguna yang terbiasa menggunakan FMZ tidak menambah biaya belajar lainnya, hanya dengan mengatur kontrak opsi seperti kontrak futures, Anda dapat melakukan transaksi untuk mendapatkan, memesan, menarik, meminta kepemilikan saham, dll.

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

img

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)               # 打印需要的数据,观察
}

img

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:img

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


Berkaitan

Lebih banyak