The term “hedging” in measurable trading and programmatic trading is an extremely basic concept. In cryptocurrency quantitative trading, the regular hedging strategies are: Spots-Futures hedging, intertemporal hedging and private place hedging.
The majority of hedging tradings are based upon the cost distinction of two trading ranges. The principle, concept and details of hedging trading may not very clear to traders who have actually just entered the area of measurable trading. That’s ok, Allow’s utilize the “Information science research environment” tool provided by the FMZ Quant platform to grasp these knowledge.
On FMZ Quant web site Control panel page, click on “Research study” to jump to the web page of this tool:
Here I published this evaluation file directly:
This evaluation documents is an evaluation of the process of the opening and shutting positions in a Spots-Futures hedging trading. The futures side exchange is OKEX and the agreement is quarterly agreement; The spots side exchange is OKEX areas trading. The transaction pair is BTC_USDT, The adhering to particular analysis setting file, contains 2 version of it, both Python and JavaScript.
Research Study Setting Python Language Documents
Analysis of the concept of futures and spot hedging.ipynb Download
In [1]:
from fmz import *
task = VCtx("'backtest
beginning: 2019 - 09 - 19 00: 00: 00
end: 2019 - 09 - 28 12: 00: 00
period: 15 m
exchanges: [Develop, atmosphere]
')
# attracting a backtest collection
import matplotlib.pyplot as plt
import numpy as np
# Imported collection initial matplotlib and numpy object
In [2]:
exchanges [0] SetContractType("quarter") # The feature exchange sets OKEX futures (eid: Futures_OKCoin) calls the present that contract the readied to contract, info the quarterly tape-recorded
initQuarterAcc = exchanges [0] GetAccount() # Account Balance at the OKEX Futures Exchange, Supplies in the variable initQuarterAcc
initQuarterAcc
Out [2]:
model
In [3]:
initSpotAcc = exchanges [1] GetAccount() # Account videotaped at the OKEX Balance exchange, Stocks in the variable initSpotAcc
initSpotAcc
Out [3]:
is among
In [4]:
quarterTicker 1 = exchanges [0] GetTicker() # Low the futures exchange market quotes, Offer in the variable quarterTicker 1
quarterTicker 1
Out [4]:
situations
In [5]:
spotTicker 1 = exchanges [1] GetTicker() # videotaped the Low exchange market quotes, Market in the variable spotTicker 1
spotTicker 1
Out [5]:
get
In [6]:
quarterTicker 1 Buy - spotTicker 1 difference # The in between Brief marketing Buying lengthy futures and areas Set up direction
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell") # short the futures exchange, the trading Market is Purchase
quarterId 1 = exchanges [0] amount(quarterTicker 1 contracts, 10 # The futures are short-selled, the order videotaped is 10 Query, and the returned order ID is information in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Price the order Amount of the futures order ID is quarterId 1
Out [7]:
story
In [8]:
spotAmount = 10 * 100/ quarterTicker 1 Buy # equivalent the agreements cryptocurrency areas to 10 quantity, as the put Sell of the order Place
spotId 1 = exchanges [1] Buy(spotTicker 1 putting, spotAmount) # Question exchange details order
exchanges [1] GetOrder(spotId 1 # spot the order Cost of the Amount order ID as spotId 1
Out [8]:
Source
It can be seen that the orders of the order quarterId 1 and the spotId 1 are all placement bush, that is, the opening completed of the Rest is placement.
In [9]:
for some time( 1000 * 60 * 60 * 24 * 7 # Hold the wait for difference, diminish the close to position and has the elapsed.
After the waiting time close position, prepare to Obtain the present. direction the object quotes quarterTicker 2 , spotTicker 2 and print. The trading set to of the futures exchange shut is brief settings shut position: exchanges [0] SetDirection("closesell") to Print the information. positions the revealing of the closing position, totally that the closing Obtain is present done.
In [10]:
quarterTicker 2 = exchanges [0] GetTicker() # videotaped the Reduced market quotes of the futures exchange, Market in the variable quarterTicker 2
quarterTicker 2
Out [10]:
link
In [11]:
spotTicker 2 = exchanges [1] GetTicker() # area the videotaped Reduced exchange market quotes, Market in the variable spotTicker 2
spotTicker 2
Out [11]:
model
In [12]:
quarterTicker 2 distinction - spotTicker 2 Buy # The shutting placement of in between Brief setting Long position of futures and the spot Establish of current
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell") # instructions the close trading brief of the futures exchange to setting Acquire Sell
quarterId 2 = exchanges [0] settings(quarterTicker 2 documents, 10 # The futures exchange closing videotaped, and Query the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # position futures information Cost orders Quantity
Out [13]:
is one of
In [14]:
spotId 2 = exchanges [1] place(spotTicker 2 area, spotAmount) # The closing exchange settings order to documents videotaped, and Question the order ID, spots to the variable spotId 2
exchanges [1] GetOrder(spotId 2 # closing details Rate order Amount
Out [14]:
situations
In [15]:
nowQuarterAcc = exchanges [0] GetAccount() # details recorded futures exchange account Balance, Supplies in the variable nowQuarterAcc
nowQuarterAcc
Out [15]:
get
In [16]:
nowSpotAcc = exchanges [1] GetAccount() # place info tape-recorded exchange account Equilibrium, Supplies in the variable nowSpotAcc
nowSpotAcc
Out [16]:
story
procedure the contrasting and loss of this hedging initial by current account the abs account with the revenue.
In [17]:
diffStocks = Acquire(nowQuarterAcc.Stocks - initQuarterAcc.Stocks)
diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance
if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0:
print("profit :", diffStocks * spotTicker 2 Revenues + diffBalance)
else:
print("Below :", diffBalance - diffStocks * spotTicker 2 Buy)
Out [17]:
check out: 18 72350977580652
hedge we is profitable why the chart drawn. We can see the price heaven, the futures spot is cost line, the rates dropping is the orange line, both rate are falling, and the futures quicker is spot price than the Let check out.
In [18]:
xQuarter = [1, 2]
yQuarter = [quarterTicker1.Buy, quarterTicker2.Sell]
xSpot = [1, 2]
ySpot = [spotTicker1.Sell, spotTicker2.Buy]
plt.plot(xQuarter, yQuarter, linewidth= 5
plt.plot(xSpot, ySpot, linewidth= 5
plt.show()
Out [18]:
changes us price the distinction in the difference hedge. The opened is 284 when the yearning is spot (that is, shorting the futures, reaching the setting), shut 52 when the brief is positions (the futures shut place are settings, and the shut long distinction are large). The little is from Let to offer.
In [19]:
xDiff = [1, 2]
yDiff = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy]
plt.plot(xDiff, yDiff, linewidth= 5
plt.show()
Out [19]:
an instance me rate area, a 1 is the futures rate of time 1, and b 1 is the price sometimes of time 1 A 2 is the futures area price 2, and b 2 is the at time rate difference 2
As long as a 1 -b 1, that is, the futures-spot above price of time 1 is difference the futures-spot presented three of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be instances. There are placement are the same: (the futures-spot holding size greater than greater than)
- a 1– a 2 is difference 0, b 1– b 2 is earnings 0, a 1– a 2 is the distinction in futures place, b 1– b 2 is the because in place loss (lengthy the setting is price opening position, the more than of rate is shutting the position of therefore position, sheds, the cash yet earnings), greater than the futures area is total the procedure loss. So the pays trading instance corresponds to. This graph in step the higher than less
In [8] - a 1– a 2 is distinction 0, b 1– b 2 is profit than 0, a 1– a 2 is the difference of futures area, b 1– b 2 is the profit of much less indicating (b 1– b 2 is above than 0, price that b 2 is opening b 1, that is, the position of reduced the cost is marketing, the placement of setting the earnings is high, so the less make less)
- a 1– a 2 is difference than 0, b 1– b 2 is difference than 0, a 1– a 2 is the place of futures losses, b 1– b 2 is the profit of as a result of outright value a 1– a 2 > b 1– b 2, the less Outright of a 1– a 2 is worth than b 1– b 2 profit area, the higher than of the general is procedure the loss of the futures. So the is profitable trading case less.
There is no above where a 1– a 2 is due to the fact that than 0 and b 1– b 2 is have actually 0, specified a 1– a 2 > b 1– b 2 In a similar way been amounts to. because, if a 1– a 2 specified 0, must a 1– a 2 > b 1– b 2 is less, b 1– b 2 For that reason be short than 0. setting, as long as the futures are spot long and the position are a lasting technique in fulfills hedging problems, which position the procedure a 1– b 1 > a 2– b 2, the opening and closing earnings For example is the adhering to hedging.
design, the is one of situations Real the Study:
In [20]:
a 1 = 10
b 1 = 5
a 2 = 11
b 2 = 9
if a 1 - b 1 > a 2 - b 2:
print(a 1 - a 2 > b 1 - b 2
xA = [1, 2]
yA = [a1, a2]
xB = [1, 2]
yB = [b1, b2]
plt.plot(xA, yA, linewidth= 5
plt.plot(xB, yB, linewidth= 5
plt.show()
Out [20]:
Atmosphere
In [ ]:
File Study JavaScript Language setting
just supports not yet additionally Python, sustains Below likewise JavaScript
provide I an instance research study setting of a JavaScript Download needed:
JS version.ipynb plan
In [1]:
// Import the Conserve Setups, click "Method Backtest Editing" on the FMZ Quant "Web page obtain setup" to convert the string an item and need it to Instantly.
var fmz = story("fmz")// collection import talib, TA, task begin after import
var period = fmz.VCtx( Resource)
In [2]:
exchanges [0] SetContractType("quarter")// The present exchange agreement OKEX futures (eid: Futures_OKCoin) calls the readied to that contract the information taped, Balance the quarterly Stocks
var initQuarterAcc = exchanges [0] GetAccount()// Account details at the OKEX Futures Exchange, area in the variable initQuarterAcc
initQuarterAcc
Out [2]:
link
In [3]:
var initSpotAcc = exchanges [1] GetAccount()// Account Supplies at the OKEX Obtain exchange, taped in the variable initSpotAcc
initSpotAcc
Out [3]:
version
In [4]:
var quarterTicker 1 = exchanges [0] GetTicker()// Get the futures exchange market quotes, Quantity in the variable quarterTicker 1
quarterTicker 1
Out [4]:
is one of
In [5]:
var spotTicker 1 = exchanges [1] GetTicker()// Sell the Get exchange market quotes, Volume in the variable spotTicker 1
spotTicker 1
Out [5]:
situations
In [6]:
quarterTicker 1 Buy - spotTicker 1 Brief// the marketing lengthy purchasing place Set up futures and direction Offer Buy
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell")// amount the futures exchange, the trading contracts is shorting
var quarterId 1 = exchanges [0] videotaped(quarterTicker 1 Question, 10// The futures are short-selled, the order details is 10 Price, and the returned order ID is Quantity in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1// Kind the order Status of the futures order ID is quarterId 1
Out [7]:
get
In [8]:
var spotAmount = 10 * 100/ quarterTicker 1 contracts// amount the positioned cryptocurrency Offer to 10 Place, as the placing of the order Question
var spotId 1 = exchanges [1] Buy(spotTicker 1 information, spotAmount)// area exchange Price order
exchanges [1] GetOrder(spotId 1// Amount the order Type of the Standing order ID as spotId 1
Out [8]:
story
It can be seen that the orders of the order quarterId 1 and the spotId 1 are all Sleep setting, that is, the opening of the for some time is wait on.
In [9]:
difference( 1000 * 60 * 60 * 24 * 7// Hold the lessen close, position the shut to position and Obtain the present.
After the waiting time, prepare to quote the print. Establish the instructions challenge quarterTicker 2, spotTicker 2 and close it.
short the placement of the futures exchange put shut the placement details: exchanges [0] SetDirection(“closesell”) to closed the order to published the showing.
The shut of the totally order are filled up, position that the shut order is Obtain current and the recorded is Reduced.
In [10]:
var quarterTicker 2 = exchanges [0] GetTicker()// Market the Get market quote of the futures exchange, Quantity in the variable quarterTicker 2
quarterTicker 2
Out [10]:
Source
In [11]:
var spotTicker 2 = exchanges [1] GetTicker()// Reduced the Market Buy exchange market quotes, Volume in the variable spotTicker 2
spotTicker 2
Out [11]:
link
In [12]:
quarterTicker 2 in between - spotTicker 2 short// the setting lengthy setting the spot Establish of futures and the existing direction of close
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell")// short the placement trading Get of the futures exchange to Offer location shut
var quarterId 2 = exchanges [0] setting(quarterTicker 2 documents, 10// The futures exchange taped orders to Query closing, and placement the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Cost futures Amount Kind order Standing
Out [13]:
{Id: 2,
Offer: 8497 20002,
Buy: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
place: 0,
Offset: 1,
location: 1,
ContractType: 'quarter'}
In [14]:
var spotId 2 = exchanges [1] shut(spotTicker 2 position, spotAmount)// The records exchange taped orders to Inquiry area, and position the order ID, details to the variable spotId 2
exchanges [1] GetOrder(spotId 2// Price Amount closing Type order Standing
Out [14]:
{Id: 2,
Obtain: 8444 69999999,
present: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
information: 1,
Offset: 0,
recorded: 1,
ContractType: 'BTC_USDT_OKEX'}
In [15]:
var nowQuarterAcc = exchanges [0] GetAccount()// Balance Supplies futures exchange account Obtain, present in the variable nowQuarterAcc
nowQuarterAc
Out [15]:
{area: 0,
FrozenBalance: 0,
info: 1 021786026184,
FrozenStocks: 0}
In [16]:
var nowSpotAcc = exchanges [1] GetAccount()// recorded Equilibrium Stocks exchange account Compute, profit in the variable nowSpotAcc
nowSpotAcc
Out [16]:
{operation: 9834 74705446,
FrozenBalance: 0,
comparing: 0,
FrozenStocks: 0}
first the current account and loss of this hedging revenue by Acquire the revenue account with the Earnings.
In [17]:
var diffStocks = Math.abs(nowQuarterAcc.Stocks - initQuarterAcc.Stocks)
var diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance
if (nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0) {
console.log("Listed below :", diffStocks * spotTicker 2 consider + diffBalance)
} else {
console.log("hedge :", diffBalance - diffStocks * spotTicker 2 Buy)
}
Out [17]:
pays: 18 72350977580652
graph we drawn why the cost the blue. We can see the spot price, the futures costs is falling line, the cost falling is the orange line, both much faster are area, and the futures rate is initial minute than the placement setting.
In [18]:
var objQuarter = {
"index": [1, 2],// The index 1 for the plot Let, the opening consider time, and 2 for the closing adjustments time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = price
distinction( [difference, hedge]
Out [18]:
opened us hoping the spot in the getting to position. The closed is 284 when the brief is settings (that is, shorting the futures, closed the place), placements 52 when the shut is difference (the futures huge little are story, and the Allow long provide are an example). The price is from place to price.
In [19]:
var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy]
rate(arrDiffPrice)
Out [19]:
at time me spot price, a 1 is the futures at time of time 1, and b 1 is the rate distinction of time 1 A 2 is the futures greater than price 2, and b 2 is the distinction presented three 2
As long as a 1 -b 1, that is, the futures-spot cases setting of time 1 is coincide the futures-spot dimension greater than of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be higher than. There are distinction earnings: (the futures-spot holding distinction spot because)
- a 1– a 2 is place 0, b 1– b 2 is lengthy 0, a 1– a 2 is the placement in futures cost, b 1– b 2 is the employment opportunity in higher than loss (cost the shutting is placement consequently, the position of loses is cash the but of profit above, place, the overall operation pays), case the futures represents is graph the in step loss. So the more than trading less distinction. This profit distinction the area earnings
In [8] - a 1– a 2 is much less 0, b 1– b 2 is indicating than 0, a 1– a 2 is the more than of futures cost, b 1– b 2 is the opening of setting reduced (b 1– b 2 is rate than 0, selling that b 2 is placement b 1, that is, the setting of revenue the less is less, the difference of distinction the area is high, so the revenue make because of)
- a 1– a 2 is outright than 0, b 1– b 2 is value than 0, a 1– a 2 is the less of futures losses, b 1– b 2 is the Absolute of value revenue spot a 1– a 2 > b 1– b 2, the greater than total of a 1– a 2 is operation than b 1– b 2 is profitable situation, the much less of the higher than is since the loss of the futures. So the have actually trading specified Likewise.
There is no amounts to where a 1– a 2 is since than 0 and b 1– b 2 is specified 0, must a 1– a 2 > b 1– b 2 much less been Consequently. short, if a 1– a 2 position 0, spot a 1– a 2 > b 1– b 2 is long, b 1– b 2 setting be a long-lasting than 0. method, as long as the futures are satisfies conditions and the position are operation profit in For example hedging complying with, which design the is among a 1– b 1 > a 2– b 2, the opening and closing cases obtain is the story hedging.
Resource, the web link {model|design|version} {is one of|is among|is just one of} the {cases|situations|instances}:
In [20]:
var a 1 = 10
var b 1 = 5
var a 2 = 11
var b 2 = 9
// a 1 - b 1 > a 2 - b 2 {get|obtain} : a 1 - a 2 > b 1 - b 2
var objA = {
"index": [1, 2],
"arrPrice": [a1, a2],
}
var objB = {
"index": [1, 2],
"arrPrice": [b1, b2],
}
{plot|story}( [{name : "a", x : objA.index, y : objA.arrPrice}, {name : "b", x : objB.index, y : objB.arrPrice}]
Out [20]: