
이미 많은 디지털 통화 선물 거래소가 있지만, 선물 파생상품으로서 디지털 통화 옵션 거래는 시장에 거래소가 많지 않습니다. 옵션 거래를 지원하는 거래소로는 Deribit과 BitMEX가 있습니다. 양적 거래 분야에서도 옵션 거래 전략은 많이 있는데, 일부 검색 자료에 언급된 옵션 전략은 다음과 같습니다.
| 유형 | |||||
|---|---|---|---|---|---|
| 방향 전략: | 콜 옵션 구매 | 풋 옵션 판매 | 불 콜 스프레드 | 불 풋 스프레드 | |
| – | 풋 옵션 구매 | 콜 옵션 판매 | 베어 콜 스프레드 | 베어 풋 스프레드 | |
| 변동성 전략: | 스트래들 판매 | 와이드 스트래들 매도 | 스트래들 구매 | 와이드 스트래들 구매 | |
| 헤지 전략: | 커버드 콜 | 커버드 풋 | 보호 호출 | 보호용 풋 | |
| – | 롱 더블 리미트 | 숏포지션 더블리미트 | – | – |
인용됨연결하다
옵션 거래 전략을 작성하려면 먼저 튼튼한 기초를 다지고 주문하기, 시장 정보 얻기, 주문 취소하기, 포지션 얻기 등의 기본 작업에 익숙해져야 합니다. 전략 문서 작성에서는 여전히 Inventor Quantitative Trading Platform을 사용하고 있지만, Inventor Quantitative Trading Platform은 현재 주로 통화 대 통화 거래, 계약 거래, 디지털 통화 양적 거래 분야의 레버리지 거래를 지원합니다. 옵션 거래와 관련된 정보는 많지 않습니다. 아래에서는 “Deribit” 거래소를 예로 들어 Inventor Quantitative Trading Platform을 사용하여 디지털 통화 옵션 거래를 하는 방법을 소개합니다.
API 문서: https://docs.deribit.com/v2/?javascript#public-get_last_settlements_by_instrument 시뮬레이션 디스크: https://docs.deribit.com/v2/?javascript#public-get_last_settlements_by_instrument
시뮬레이션 플랫폼 웹사이트에 계정을 등록하고, API KEY를 활성화하여 API KEY를 얻을 수 있습니다. Inventor 양적 거래 플랫폼을 구성하는 것은 실제 계정을 구성하는 것과 동일합니다.

옵션 거래를 위해 이해해야 할 기본 개념은 4가지가 있습니다.

Deribit 거래소의 API 설명서에 따르면, Deribit의 시장 인터페이스는 선물이나 옵션 시장 정보에 접근하는 데 필요한 데이터만 전달합니다.instrument_name매개변수가 다르고(instrument_name은 SetContractType 함수에 의해 설정됨) 기본적으로 이 인터페이스를 사용하여 시장 정보를 얻을 수 있습니다.GetTicker옵션에 대한 견적을 받으세요.
물론, Inventor Quantitative Trading Platform의 기본 패키지는 Deribit Exchange의 실제 시장입니다. 먼저 시뮬레이션 시장으로 전환하고 다음 코드를 사용해야 합니다.
exchange.IO("base", "https://test.deribit.com")
그럼 현재 우리는 옵션 계약을 맺고 있습니다BTC-27DEC19-7000-P:
이것은 행사일: 27DEC19, 행사가격: 7000인 풋 옵션입니다.
exchange.SetContractType("BTC-27DEC19-7000-P")
그럼 가져옵니다. 우리는 함께 작성하고, 코드를 실행하고, 이 옵션 계약의 시장 정보를 얻기 위해 테스트합니다.
function main () {
exchange.IO("base", "https://test.deribit.com")
exchange.SetContractType("BTC-27DEC19-7000-P")
var ticker = exchange.GetTicker()
Log(ticker)
}
디버깅 도구를 사용하면 테스트하기가 매우 편리할 수 있습니다.
가격이 시뮬레이션 디스크와 일치하는 것을 볼 수 있습니다.

다른 마켓 인터페이스의 호출 방법은 동일하며 여기서는 반복하지 않습니다. 다음 사항에 유의해야 합니다.
옵션 거래는 활발하지 않습니다. 때로는 매수 주문이나 매도 주문이 없을 수 있습니다. 이때 Inventor Quantitative Trading Platform의 하단 계층은 0 값을 감지하고 오류를 보고합니다. 다음을 사용할 수 있습니다.SetErrorFilter("Invalid ticker")이 오류를 무시하고 사용하세요GetRawJSON이 함수는 시장의 원래 정보를 얻고 데이터를 캡슐화합니다. 여기서 비슷한 기능을 달성하기 위한 예를 작성합니다.
function init() {
SetErrorFilter("Invalid ticker")
}
$.GetTicker = function(e) {
var ticker = e.GetTicker()
if (!ticker) {
try {
var ret = JSON.parse(e.GetRawJSON())
return {
Info : ret,
High : ret.result.stats.high,
Low : ret.result.stats.low,
Buy : ret.result.best_bid_price,
Sell : ret.result.best_ask_price,
Last : ret.result.last_price,
Volume : ret.result.stats.volume,
OpenInterest : 0,
Time : new Date().getTime()
}
} catch (err) {
Log(err)
}
}
return ticker
}
write를 호출할 때:Log($.GetTicker(exchange))
주문 배치 작업은 매우 간단합니다. 선물 거래와 비교하면 매수와 매도의 두 가지 방향만 있습니다. 또한 사용Sell,Buy함수 순서.
function main () {
exchange.IO("base", "https://test.deribit.com")
exchange.SetContractType("BTC-27DEC19-7000-P")
var id = exchange.Buy(0.017, 1)
Log(exchange.GetOrder(id))
}

방금 내린 주문은 시뮬레이션 거래판에 표시됩니다.

그리고exchange.GetOrder(id)주문 정보를 조회할 수 있습니다.
주문 취소에도 동일한 방법이 사용됩니다.CancelOrder선물 거래에서 주문을 취소하는 것과 같은 기능입니다.

계정에서 사용 가능한 자산을 얻는 것은 선물 거래와 정확히 동일합니다. 직접 전화하세요.GetAccount기능.
시뮬레이션된 교환 페이지에 표시

코드를 실행하면 다음을 얻습니다.

포지션을 유지하기 위해서는 패키지된 것을 직접 사용할 수 없습니다.GetPosition기능은 기본적으로 Deribit 거래는 옵션 거래가 아닌 선물 거래이고, 이 기능만이 선물 포지션을 얻는 데 사용될 수 있기 때문입니다.
그러므로 우리는 옵션 포지션을 얻는 기능을 우리 스스로 구현해야 합니다.
API 문서에서 위치를 얻기 위한 함수 인터페이스:

$.GetPosition = function(e) {
// /private/get_positions
// currency , kind
var positions = []
var currency = e.GetCurrency()
var arr = currency.split("_")
var baseCurrency = arr[0]
try {
var ret = e.IO("api", "GET", "/api/v2/private/get_positions", "currency=" + baseCurrency + "&kind=option")
for (var i in ret.result) {
if (ret.result[i].size == 0 || ret.result[i].direction == "zero") {
continue
}
var pos = {
Info : ret.result[i],
Amount : ret.result[i].size,
FrozenAmount : 0,
Price : ret.result[i].average_price,
Profit : ret.result[i].floating_profit_loss,
MarginLevel : 0,
Margin : 0,
ContractType : ret.result[i].instrument_name,
Type : ret.result[i].direction == "buy" ? ORDER_TYPE_BUY : ORDER_TYPE_SELL,
}
positions.push(pos)
}
} catch (err) {
Log(err)
positions = null
}
return positions
}
부르다Log($.GetPosition(exchange))위치 정보를 인쇄할 수 있습니다.

이런 식으로 기본적인 작업을 수행할 수 있고 나머지는 옵션 거래 전략을 연구하는 것입니다.