В последнее время многие биржи последовательно открывают торговые функции, аналогичные традиционным опционам, которые позволяют комбинировать множество торговых стратегий и методов. Хотя на рынке есть множество инструментов для количественной торговли с открытым исходным кодом, эти инструменты требуют понимания основных принципов, знания языков программирования или требуют ручной работы над сложными настройками, конфигурацией и модификациями.
Изобретатель количественный (((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"])
}
Вы можете видеть, что для получения этих данных было написано N множества кодов.
Мы сделали это с помощью двух простых фраз 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,
}
Не только это, если использовать для того, чтобы обрабатывать несинхронные базы кода, необходимо писать более сложную логику синхронного обработки, а неотложение может также привести к проблемам логического дизайна. Если использовать графики, то необходимо изучить использование большого количества баз, даже для программируемого количественного трейдера, требуется определенное время для изучения.
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-линейного графика:
И еще больше возможностей для изучения и разработки!
Если реализовать прямо с помощью языка Go (или Python и т. д.), возможно, новые ученики, сразу же будут отклонены >_< Для более подробной информации о стратегии примерных операций с опционами Deribit:https://www.fmz.com/strategy/179475