
최근 많은 거래소에서 디지털 통화 옵션 파생상품 거래를 시작했습니다. 전통적인 옵션과 마찬가지로 옵션 거래와 선물 거래를 결합하면 다양한 거래 전략과 방법을 만들 수 있습니다. 시중에는 오픈소스 양적 거래 도구가 많이 있지만, 이러한 도구를 사용하려면 기본 프레임워크를 이해하고 프레임워크를 작성하는 데 사용된 프로그래밍 언어에 익숙해야 하거나 복잡한 디버깅, 구성, 수정을 수동으로 수행해야 하는 경우가 많습니다. 프로그래밍 방식 거래와 양적 거래를 처음 접하는 초보자에게는 그다지 편리하지 않습니다. 거래 전략과 거래 아이디어에 집중해야 할 시간의 상당 부분이 프로그램 디버깅과 프로그래밍 언어 학습에 소모되었습니다.
FMZ.COM은 초기 아키텍처를 설계할 때 다양한 금융 파생상품의 양적 거래와 프로그램 거래에 대한 지원을 고려했으며, 옵션 거래에 빠르게 연결했습니다. 옵션 거래는 기본적으로 선물 거래와 비슷하거나, 심지어 더 간단합니다. 그리고 새로운 인터페이스는 추가되지 않습니다. FMZ 사용에 익숙한 사용자는 추가 학습 비용이 발생하지 않습니다. 그들은 시장 정보를 얻고, 주문을 하고, 주문을 취소하고, 포지션을 확인하고, 다른 작업을 수행하기 위해 옵션 계약을 선물 계약으로 설정하기만 하면 됩니다. 옵션 계약에 대한 거래.
Deribit 거래소 옵션 계약을 예로 들어보겠습니다. 예를 들어, 현재 옵션 계약의 지수 가격을 얻고 싶습니다.
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"])
}

이 데이터를 얻기 위해서만 많은 코드가 작성되었다는 것을 알 수 있습니다.
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,
}
뿐만 아니라, 시장 정보를 얻고 동시에 비동기적으로 주문을 해야 하며 비동기 작업을 처리하는 코드 라이브러리를 사용해야 하는 경우 더 복잡한 비동기 처리 논리를 작성해야 하며, 이로 인해 교착 상태와 같은 논리적 설계 문제가 발생할 수 있습니다. 조심하지 않음. 차트 디스플레이를 다시 사용해야 한다면 많은 라이브러리를 사용하는 법을 배워야 할 것입니다. 프로그래밍에 대한 기본 지식이 있는 양적 트레이더라도 배우는 데 시간이 걸릴 것입니다. 하지만 Inventor Quantization을 사용하는 것이 훨씬 간단합니다. 이러한 기능이 캡슐화되어 있고 설계된 호출 인터페이스가 매우 간단하고 사용하기 쉽기 때문입니다. 매우 적은 코드만으로 필요한 다양한 기능을 구현할 수 있습니다.
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)
}
}
플랫폼에서 제공하는 템플릿 라이브러리 “Drawing Line Library”를 사용하면 K-line 차트를 매우 쉽게 그릴 수 있습니다.

탐험하고 개발할 수 있는 기능이 아직 많이 있습니다!
위와 같이 Go 언어(또는 Python 등)를 사용하여 구현하는 경우 신규 학생은 바로 낙담할 수 있습니다. >_< Deribit 옵션에 대한 샘플 전략은 https://www.fmz.com/strategy/179475에서 확인하세요.