Alat perdagangan kuantitatif untuk opsi mata uang digital

Penulis:Lydia, Dibuat: 2022-12-23 22:12:54, Diperbarui: 2023-09-20 10:41:08

img

Alat perdagangan kuantitatif untuk opsi mata uang digital

1. Perdagangan kuantitatif dan program opsi mata uang digital

Baru-baru ini, banyak bursa telah secara berturut-turut membuka fungsi perdagangan opsi mata uang digital sebagai derivatif. Mirip dengan opsi tradisional, perdagangan opsi dan perdagangan berjangka dapat dikombinasikan untuk membentuk banyak strategi dan metode perdagangan. Meskipun ada banyak alat perdagangan kuantitatif open source di pasar, alat ini seringkali perlu memahami kerangka kerja yang mendasari, akrab dengan bahasa pemrograman untuk menulis kerangka kerja, atau secara manual melakukan debugging, konfigurasi, dan modifikasi yang kompleks. Ini tidak sangat nyaman untuk pemula perdagangan program dan perdagangan kuantitatif. Banyak waktu seharusnya dikhususkan untuk strategi perdagangan dan ide perdagangan telah diinvestasikan dalam debugging program dan pembelajaran bahasa pemrograman.

Dalam desain arsitektur awal, FMZ Quant (FMZ.COMPada awal tahun 2000, perusahaan ini telah mengembangkan sistem trading forex yang sangat canggih. (Financial derivatives quantification and program trading), dan dengan cepat mengakses perdagangan opsi. Perdagangan opsi pada dasarnya mirip dengan perdagangan berjangka, atau bahkan lebih sederhana. Selain itu, tidak ada antarmuka baru. Pengguna yang akrab dengan platform FMZ tidak akan meningkatkan biaya pembelajaran lainnya. Mereka hanya dapat mengatur kontrak opsi sebagai kontrak berjangka untuk mendapatkan informasi pasar, menempatkan pesanan, membatalkan pesanan, posisi kueri, dan sebagainya.

2. Akses Deribit Exchange langsung menggunakan bahasa pemrograman asli

Mari kita ambil kontrak opsi dari Deribit Exchange sebagai contoh. misalnya, kita perlu mendapatkan harga indeks dari kontrak opsi saat ini.

Diimplementasikan dalam bahasa Go:

package main 

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



func main() {
    // Get ticker, access interface: 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("This is just string data ticker:", ret)
    fmt.Println("Need to convert to JSON format") 

    type js struct {
        data interface{}
    }

    ticker := new(js)

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

    fmt.Println("ticker:", ticker) 
    fmt.Println("index_price, marked price data in ticker:", ticker.data.(map[string]interface{})["result"].(map[string]interface{})["index_price"])
}

3. Menggunakan antarmuka yang dikemas oleh platform FMZ Quant Trading

Kami menyelesaikannya dengan menggunakan platform FMZ dalam dua kalimat sederhana.

function main() {
    exchange.IO("base", "https://test.deribit.com")   # Switch to the demo offered by the exchange
    exchange.SetContractType("BTC-3JAN20-7250-P")     # Set up options contracts
    var ticker = exchange.GetTicker()                 # Get options ticker
    Log(ticker.Info.result.index_price)               # Print the required data and observe
}

img img

Seperti yang kita lihat, sangat sederhana untuk mendapatkan data yang diperlukan hanya dalam beberapa baris kode.

Ini hanya mengakses antarmuka API publik yang tidak ditandatangani dari pertukaran; mengakses antarmuka pribadi yang ditandatangani akan lebih rumit.

Setiap antarmuka harus melakukan banyak penandatanganan, pemrosesan parameter, dll.

        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. Persyaratan dan fungsi yang lebih kompleks

Tidak hanya itu, jika Anda perlu menggunakan akses serentak, asinkron ke pasar, operasi pesanan, dan perpustakaan kode untuk menangani asinkron, Anda perlu menulis logika pemrosesan asinkron yang lebih kompleks. Ketidakperhatian juga dapat menyebabkan masalah desain logika seperti penguncian. Jika Anda perlu menggunakan tampilan grafik lagi, maka Anda perlu belajar menggunakan banyak perpustakaan. Bahkan pedagang kuantitatif dengan dasar pemrograman membutuhkan beberapa waktu untuk belajar. Namun, jauh lebih mudah untuk menggunakan platform FMZ Quant, karena fungsi-fungsi ini telah dikemas, dan antarmuka panggilan yang dirancang sangat sederhana dan mudah digunakan. Anda dapat menggunakan kode yang sangat sedikit untuk menerapkan fungsi berbagai persyaratan.

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

Menggunakan perpustakaan template Plot Library yang disediakan oleh platform, mudah untuk menggambar bagan K-line:

img

Ada lebih banyak fungsi untuk dijelajahi dan dikembangkan!

5. Postcript

Jika diimplementasikan secara langsung dalam bahasa go (atau python, dll) seperti di atas, siswa baru dapat didorong langsung>_< Misalnya strategi operasi opsi Deribit, lihat:https://www.fmz.com/strategy/179475


Berkaitan

Lebih banyak