O recurso está a ser carregado... Carregamento...

Ferramenta de negociação quantitativa de opções de moeda digital de caixa aberto

Autora:Inventor quantificado - sonho pequeno, Criado: 2019-12-27 17:35:30, Atualizado: 2023-10-17 21:26:52

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

Ferramenta de negociação quantitativa de opções de moeda digital de caixa aberto

1, Quantificação de opções de moeda digital, transações processadas

Recentemente, muitas bolsas abriram o recurso de negociação de derivativos de opções digitais, que são semelhantes às opções tradicionais, como negociação de opções e negociação de futuros. Embora existam muitas ferramentas de negociação quantitativa de código aberto no mercado, essas ferramentas exigem um conhecimento básico do framework, familiaridade com a linguagem de programação do framework ou precisam realizar manualmente um teste, configuração e modificação complexos.

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

2o, acessar diretamente a Deribit usando a linguagem de programação nativa

Tomemos como exemplo um contrato de opções da Deribit, por exemplo, se quisermos obter o preço indicado de um contrato de opções atual.

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

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

O que você pode ver é que você escreveu N mais códigos apenas para obter esses dados.

3. Interfaces de embalagem de plataformas de negociação quantitativas usadas por inventores

O FMZ é um canal de televisão de rádio, que é um canal de televisão de televisão.

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

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

Como você pode ver, com apenas algumas linhas de código, é muito fácil obter os dados que você precisa.

Isso é apenas uma interface API pública sem assinatura para acessar o exchange, o que é mais complicado se você acessar uma interface privada com assinatura.

Cada interface também tem que lidar com uma série de assinaturas, parâmetros, etc.:

        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, necessidades e funções mais complexas

Além disso, se for usado para processar um banco de código que precisa de concomitância, aquisição assíncrona de transações, subordinação de operações e para processar um banco de código assíncrono, é necessário escrever uma lógica de processamento assíncrona mais complexa, um que não deixa de ser usado pode causar problemas de design de lógica, como bloqueio morto. Se for usado para mostrar gráficos, então é preciso aprender a usar um grande banco de dados, mesmo um comerciante de quantificação com base em programação. Mas o uso de inventor quantificação é muito simples, pois esses recursos já estão instalados e os interfaces de chamada projetados são muito simples de usar.

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

Usando a biblioteca de modelos oferecida pela plataforma, "Draw Line Library", é muito simples criar gráficos de K-lines:开箱即用的数字货币期权量化交易工具

E há mais recursos para explorar e desenvolver!

5 e nota posterior

Se for implementado diretamente com uma linguagem similar à go (ou python, etc.), os novos alunos podem ser imediatamente expulsos. Para mais informações sobre a estratégia de exemplo de operação de opções da Deribit:https://www.fmz.com/strategy/179475


Relacionado

Mais informações