리소스 로딩... 로딩...

디지털 화폐 옵션 양적 거래 도구

저자:발명가들의 수량화 - 작은 꿈, 2019-12-27 17:35:30, 업데이트: 2023-10-17 21:26:52

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

디지털 화폐 옵션 양적 거래 도구

1, 디지털 화폐 옵션 정량화, 절차적 거래

최근에는 많은 거래소가 디지털 화폐 옵션의 파생물 거래 기능을 연속적으로 열고 있으며, 전통적인 옵션과 유사한 옵션 거래와 선물 거래 등이 결합되어 많은 거래 전략, 거래 방법을 결합 할 수 있습니다. 시장에 많은 오픈 소스 양적 거래 도구가 있지만, 이러한 도구는 프레임워크의 기초를 이해하고 프레임워크의 프로그래밍 언어를 익숙하게 작성하거나 복잡한 설정을 수동으로 수행해야합니다.

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

2., 데리빗 거래소를 직접 네이티브 프로그래밍 언어로 액세스

예를 들어, 우리가 현재 어떤 옵션 계약의 지수 가격을 얻고자 하는 데리빗 거래소 옵션 계약을 예로 들 수 있습니다.

이 프로젝트의 목표는

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

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

이 자료를 얻기 위해 N개의 코드들이 쓰여졌다는 것을 알 수 있습니다.

3., 발명자의 양적 거래 플랫폼 포장을 사용하는 인터페이스

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

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

이 자료는 몇 줄의 코드만으로 필요한 데이터를 쉽게 얻을 수 있습니다.

이것은 단지 거래소의 비서명 공개 API 인터페이스에 접근하는 것인데, 사적인 인터페이스에 접근하면 서명보다 더 복잡할 수 있다.

각 인터페이스는 서명, 매개 변수 등을 처리합니다.

        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. 더 복잡한 요구, 기능

뿐만 아니라, 동시화, 비동시적 취득, 하부 명령 작업, 그리고 비동시적인 코드베이스 처리를 필요로 하는 경우, 더 복잡한 비동시 처리 논리를 작성해야 하며, 단 한 번은 로크 데드 등의 논리 설계 문제를 야기할 수 있다. 그래프 표시를 다시 사용할 필요가 있다면, 큰 데이터베이스 사용에 대해 배우는 것은 심지어 프로그래밍 기반의 정량 트레이더도 학습하는 데 약간의 시간이 필요합니다. 그러나 발명자 수치를 사용하는 것은 간단합니다.

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

K선 그래프를 그리는 것은 플랫폼에서 제공하는 템플릿 라이브러리 "Draw Line Class Library"를 사용하여 간단하게 가능합니다.开箱即用的数字货币期权量化交易工具

그리고 더 많은 기능들을 개발할 수 있습니다!

5 후기 기록

만약 바로 위와 같은 go 언어 (또는 python 등) 로 구현한다면, 아마도 새로운 동료들은 곧바로 >_<로 회피될 것입니다. 더리빗 옵션 운영에 대한 예시 전략은 다음과 같습니다.https://www.fmz.com/strategy/179475


관련 내용

더 많은 내용