開箱式デジタル通貨オプション量化取引ツール

作者: リン・ハーン小さな夢, 作成日:2019年12月27日 17:35:30 更新日:2023年10月17日 21:26:52

img

開箱式デジタル通貨オプション量化取引ツール

1. デジタル通貨のオプションの量化,手順化取引

近年,多くの取引所がデジタル通貨オプションの衍生品の取引機能を順次開設し,従来のオプションと類似したオプション取引と先物取引などの組み合わせにより,多くの取引戦略,取引方法を組み合わせることができます. 市場には多くのオープンソースの量化取引ツールがありますが,これらのツールには,フレームワークの底部を理解し,フレームワークのプログラミング言語を熟知し,または手動で複雑なデビュー,配置,修正を行う必要があります. プログラム化取引,量化取引への入門は,非常に便利ではありません. 取引戦略に焦点を当て,取引アイデアの時間がプログラム調整に投入され,プログラミング言語を学びました.

発明者 量化FMZ.COM) 初期アーキテクチャ設計では,様々な金融衍生品の量化や程序化取引のサポートを考慮し,オプション取引に非常に迅速にアクセスした.オプション取引は基本的にフューチャー取引に類似し,さらにシンプルである.また,新しいインターフェースを追加せず,FMZを熟悉したユーザーは他の学習コストを増加させず,オプション契約をフューチャー契約のように設定することで,オプション契約の取引取得,下注,撤回,リクエスト保有などの操作を行うことができます.

2 直接ネイティブプログラミング言語を使ってDeribit取引所にアクセスする

例えば,Derit取引所のオプション契約を例に挙げると,当面あるオプション契約の指数値価格を得たいとします.

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

このデータを得るためだけに N 以上のコードが書き込まれていることがわかります.

3 発明者による量化取引プラットフォームのパッケージのインターフェース

簡単な2つの単語で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

簡単なコードで必要なデータを簡単に入手できます.

これは,取引所の非署名公開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)
    }
}

プラットフォームで提供されているテンプレートリビューリー"Draw Line Class Library"を使用して,K線グラフを描くことは簡単です.img

開発の探索にもっと多くの機能があります!

5 後記

直接上記のようなgo言語 (or pythonなど) で実行すると,新しい同級生が直接退学する可能性があります. Deribitのオプション操作の例策については,以下のように説明します.https://www.fmz.com/strategy/179475


関連性

もっと