Công cụ giao dịch định lượng sẵn dùng cho các tùy chọn tiền kỹ thuật số

Tác giả:Lydia., Tạo: 2022-12-23 22:12:54, Cập nhật: 2023-09-20 10:41:08

img

Công cụ giao dịch định lượng sẵn dùng cho các tùy chọn tiền kỹ thuật số

1. Thương mại định lượng và chương trình các tùy chọn tiền kỹ thuật số

Gần đây, nhiều sàn giao dịch đã mở chức năng giao dịch của các tùy chọn tiền kỹ thuật số như một phái sinh. Tương tự như các tùy chọn truyền thống, giao dịch tùy chọn và giao dịch tương lai có thể được kết hợp để hình thành nhiều chiến lược và phương pháp giao dịch. Mặc dù có nhiều công cụ giao dịch định lượng nguồn mở trên thị trường, nhưng các công cụ này thường cần phải hiểu khung cơ bản, quen thuộc với ngôn ngữ lập trình để viết khung hoặc tự thực hiện gỡ lỗi, cấu hình và sửa đổi phức tạp. Nó không thuận tiện cho người mới bắt đầu giao dịch chương trình và giao dịch định lượng. Rất nhiều thời gian nên được dành cho các chiến lược giao dịch và ý tưởng giao dịch đã được đầu tư vào gỡ lỗi chương trình và học ngôn ngữ lập trình.

Trong thiết kế kiến trúc ban đầu, FMZ Quant (FMZ.COMNgoài ra, không có giao diện mới. Người dùng quen thuộc với nền tảng FMZ sẽ không làm tăng chi phí học tập khác. Họ chỉ có thể đặt hợp đồng tùy chọn như một hợp đồng tương lai để có được thông tin thị trường, đặt đơn đặt hàng, hủy đơn đặt hàng, truy vấn vị trí, v.v.

2. Truy cập Deribit Exchange trực tiếp bằng ngôn ngữ lập trình bản địa

Hãy lấy hợp đồng quyền chọn của Deribit Exchange làm ví dụ. ví dụ, chúng ta cần có được giá chỉ số của một hợp đồng quyền chọn hiện tại.

Thực hiện trong ngôn ngữ 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. Sử dụng giao diện được đóng gói bởi nền tảng FMZ Quant Trading

Chúng tôi hoàn thành nó bằng cách sử dụng nền tảng FMZ trong hai câu đơn giản.

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

Như chúng ta có thể thấy, nó rất đơn giản để có được dữ liệu cần thiết chỉ trong một vài dòng mã.

Đây chỉ là truy cập vào giao diện API công khai không được ký của sàn giao dịch; truy cập vào giao diện riêng được ký sẽ phức tạp hơn.

Mỗi giao diện phải thực hiện rất nhiều chữ ký, xử lý tham số, vv

        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. Các yêu cầu và chức năng phức tạp hơn

Không chỉ vậy, nếu bạn cần sử dụng truy cập đồng thời, không đồng bộ vào thị trường, các hoạt động đặt hàng và thư viện mã để xử lý không đồng bộ, bạn cần phải viết logic xử lý không đồng bộ phức tạp hơn. Sự thiếu chú ý cũng có thể gây ra các vấn đề thiết kế logic như khóa. Nếu bạn cần sử dụng màn hình biểu đồ một lần nữa, thì bạn cần phải học cách sử dụng rất nhiều thư viện. Ngay cả một nhà giao dịch định lượng có nền tảng lập trình cũng cần một chút thời gian để học. Tuy nhiên, việc sử dụng nền tảng FMZ Quant dễ dàng hơn nhiều, bởi vì các chức năng này đã được đóng gói và giao diện gọi được thiết kế rất đơn giản và dễ sử dụng. Bạn có thể sử dụng rất ít mã để thực hiện các chức năng của các yêu cầu khác nhau.

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

Sử dụng thư viện mẫu Plot Library được cung cấp bởi nền tảng, rất dễ dàng để vẽ biểu đồ đường K:

img

Có nhiều chức năng khác để khám phá và phát triển!

5. Sau khi viết

Nếu nó được thực hiện trực tiếp trong ngôn ngữ go (hoặc python, v.v.) như trên, các sinh viên mới có thể bị từ chối trực tiếp>_< Ví dụ các chiến lược hoạt động tùy chọn Deribit, xem:https://www.fmz.com/strategy/179475


Có liên quan

Thêm nữa