Công cụ giao dịch định lượng quyền chọn tiền kỹ thuật số mở hộp

Tác giả:Giấc mơ nhỏ, Tạo: 2019-12-27 17:35:30, Cập nhật: 2023-10-17 21:26:52

img

Công cụ giao dịch định lượng quyền chọn tiền kỹ thuật số mở hộp

Một, định lượng quyền chọn tiền kỹ thuật số, giao dịch theo quy trình

Trong thời gian gần đây, nhiều sàn giao dịch đã mở các chức năng giao dịch của tùy chọn tiền kỹ thuật số, tương tự như giao dịch tùy chọn truyền thống, giao dịch tùy chọn và giao dịch tương lai, kết hợp với nhiều chiến lược giao dịch, 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 đòi hỏi phải hiểu cơ sở của khuôn khổ, quen thuộc với ngôn ngữ lập trình của khuôn khổ hoặc cần phải tự thực hiện cài đặt, cấu hình, sửa đổi phức tạp.

Nhà phát minh định lượngFMZ.COMTrong thiết kế kiến trúc ban đầu, việc hỗ trợ các loại sản phẩm phái sinh tài chính theo định lượng, giao dịch theo quy trình đã được tính đến để có thể truy cập rất nhanh vào giao dịch tùy chọn. Giao dịch tùy chọn về cơ bản tương tự như giao dịch tương lai hoặc thậm chí đơn giản hơn. Và không thêm giao diện mới, người dùng quen thuộc với FMZ không tăng chi phí học tập khác, chỉ cần đặt hợp đồng tùy chọn giống như hợp đồng tương lai, bạn có thể mua, đặt hàng, rút tiền, truy vấn giữ cổ phiếu và các hoạt động khác trên hợp đồng tùy chọn.

2, truy cập trực tiếp sàn giao dịch Deribit bằng ngôn ngữ lập trình gốc

Chúng ta lấy một ví dụ về hợp đồng quyền chọn trên sàn giao dịch Deribit, ví dụ như chúng ta muốn lấy giá chỉ số của một hợp đồng quyền chọn hiện tại.

Có thể sử dụng ngôn ngữ 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

Bạn có thể thấy rằng chỉ để có được dữ liệu này, bạn đã viết nhiều mã hơn N.

3, sử dụng các giao diện bao bì sàn giao dịch định lượng của nhà phát minh

Chúng tôi đã giải quyết vấn đề bằng hai câu đơn giản của 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

Như bạn có thể thấy, chỉ cần một vài dòng mã, bạn có thể dễ dàng có được dữ liệu cần thiết.

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

Mỗi giao diện cũng phải xử lý một loạt các chữ ký, tham số và các hoạt động khác:

        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, nhu cầu, chức năng phức tạp hơn

Không chỉ vậy, nếu sử dụng để cần đồng bộ hóa, thu thập giao dịch không đồng bộ, đặt hàng, và xử lý kho dữ liệu không đồng bộ, bạn sẽ cần phải viết logic xử lý không đồng bộ phức tạp hơn, và một người không để lại có thể gây ra các vấn đề về thiết kế logic như khóa chết. Nếu cần thêm biểu đồ, sau đó phải học cách sử dụng một kho dữ liệu lớn, ngay cả một thương nhân định lượng có nền tảng lập trình cũng cần một thời gian để học.

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 được cung cấp trên nền tảng, "Thư viện lớp vẽ đường", bạn có thể thực hiện một cách đơn giản để vẽ biểu đồ đường K:img

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

5, ghi lại

Nếu thực hiện trực tiếp bằng ngôn ngữ go tương tự như trên (hoặc python, v.v.), có thể học sinh mới, ngay lập tức bị từ chối >_< Các chiến lược điển hình cho hoạt động tùy chọn Deribit:https://www.fmz.com/strategy/179475


Có liên quan

Thêm nữa