
最近、多くの取引所がデジタル通貨オプションデリバティブの取引を開始しています。従来のオプションと同様に、オプション取引と先物取引を組み合わせることで、さまざまな取引戦略と方法を作成できます。市場にはオープンソースの定量取引ツールが数多く存在しますが、これらのツールでは、基盤となるフレームワークを理解し、フレームワークの作成に使用されるプログラミング言語に精通しているか、複雑なデバッグ、構成、変更を手動で実行する必要があることがよくあります。プログラム取引や定量取引に慣れていない初心者にとってはあまり便利ではありません。取引戦略や取引アイデアに集中すべき多くの時間が、プログラムのデバッグやプログラミング言語の学習に費やされています。
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 を使用すると、わずか 2 つの文でこれを実現できます。
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 ライン チャートを簡単に描画できます。

探索して開発できる機能はまだまだたくさんあります!
上記のようなGo言語(またはPythonなど)を使用して実装すると、新しい学生はすぐにやる気を失う可能性があります>_< Deribit オプションのサンプル戦略については、https://www.fmz.com/strategy/179475 を参照してください。