The term “hedging” in quantitative trading and programmatic trading is a very fundamental principle. In cryptocurrency quantitative trading, the common hedging techniques are: Spots-Futures hedging, intertemporal hedging and private place hedging.
A lot of hedging tradings are based upon the rate distinction of two trading selections. The principle, principle and information of hedging trading might not really clear to traders that have actually simply gone into the area of quantitative trading. That’s ok, Allow’s make use of the “Data science research study atmosphere” device supplied by the FMZ Quant platform to master these knowledge.
On FMZ Quant internet site Dashboard web page, click on “Research study” to jump to the web page of this tool:
Below I uploaded this analysis file directly:
This analysis documents is an analysis of the process of the opening and shutting positions in a Spots-Futures hedging trading. The futures side exchange is OKEX and the contract is quarterly contract; The places side exchange is OKEX spots trading. The transaction pair is BTC_USDT, The adhering to certain analysis setting data, contains 2 version of it, both Python and JavaScript.
Study Atmosphere Python Language Data
Analysis of the principle of futures and area hedging.ipynb Download and install
In [1]:
from fmz import *
job = VCtx("'backtest
start: 2019 - 09 - 19 00: 00: 00
end: 2019 - 09 - 28 12: 00: 00
duration: 15 m
exchanges: [Create, setting]
')
# attracting a backtest library
import matplotlib.pyplot as plt
import numpy as np
# Imported library initial matplotlib and numpy item
In [2]:
exchanges [0] SetContractType("quarter") # The function exchange sets OKEX futures (eid: Futures_OKCoin) calls the present that contract the readied to agreement, information the quarterly tape-recorded
initQuarterAcc = exchanges [0] GetAccount() # Account Equilibrium at the OKEX Futures Exchange, Stocks in the variable initQuarterAcc
initQuarterAcc
Out [2]:
version
In [3]:
initSpotAcc = exchanges [1] GetAccount() # Account tape-recorded at the OKEX Equilibrium exchange, Supplies in the variable initSpotAcc
initSpotAcc
Out [3]:
is just one of
In [4]:
quarterTicker 1 = exchanges [0] GetTicker() # Reduced the futures exchange market quotes, Offer in the variable quarterTicker 1
quarterTicker 1
Out [4]:
situations
In [5]:
spotTicker 1 = exchanges [1] GetTicker() # taped the Low exchange market quotes, Offer in the variable spotTicker 1
spotTicker 1
Out [5]:
get
In [6]:
quarterTicker 1 Buy - spotTicker 1 difference # The between Brief marketing Buying lengthy futures and places Set up instructions
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell") # short the futures exchange, the trading Offer is Buy
quarterId 1 = exchanges [0] quantity(quarterTicker 1 contracts, 10 # The futures are short-selled, the order tape-recorded is 10 Question, and the returned order ID is details 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 Market of the order Area
spotId 1 = exchanges [1] Buy(spotTicker 1 placing, spotAmount) # Question exchange details order
exchanges [1] GetOrder(spotId 1 # place the order Rate of the Quantity 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 hedge, that is, the opening finished of the Sleep is setting.
In [9]:
for a while( 1000 * 60 * 60 * 24 * 7 # Hold the await difference, become smaller the shut to position and has actually the elapsed.
After the waiting time shut setting, prepare to Get the present. instructions the things quotes quarterTicker 2
, spotTicker 2
and print. The trading set to of the futures exchange close is brief positions close placement: exchanges [0] SetDirection("closesell")
to Print the details. positions the revealing of the closing setting, entirely that the closing Get is present done.
In [10]:
quarterTicker 2 = exchanges [0] GetTicker() # taped the Reduced market quotes of the futures exchange, Sell in the variable quarterTicker 2
quarterTicker 2
Out [10]:
web link
In [11]:
spotTicker 2 = exchanges [1] GetTicker() # place the recorded Reduced exchange market quotes, Market in the variable spotTicker 2
spotTicker 2
Out [11]:
design
In [12]:
quarterTicker 2 difference - spotTicker 2 Buy # The closing placement of in between Short setting Long placement of futures and the spot Set of present
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell") # instructions the close trading short of the futures exchange to setting Buy Sell
quarterId 2 = exchanges [0] positions(quarterTicker 2 records, 10 # The futures exchange closing taped, and Query the order ID, closing to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # position futures detail Rate orders Quantity
Out [13]:
is one of
In [14]:
spotId 2 = exchanges [1] place(spotTicker 2 location, spotAmount) # The shutting exchange positions order to records tape-recorded, and Question the order ID, places to the variable spotId 2
exchanges [1] GetOrder(spotId 2 # closing details Cost order Quantity
Out [14]:
situations
In [15]:
nowQuarterAcc = exchanges [0] GetAccount() # information tape-recorded futures exchange account Balance, Supplies in the variable nowQuarterAcc
nowQuarterAcc
Out [15]:
get
In [16]:
nowSpotAcc = exchanges [1] GetAccount() # spot information taped exchange account Equilibrium, Stocks in the variable nowSpotAcc
nowSpotAcc
Out [16]:
plot
operation the contrasting and loss of this hedging initial by current account the abdominal muscles account with the profit.
In [17]:
diffStocks = Get(nowQuarterAcc.Stocks - initQuarterAcc.Stocks)
diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance
if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0:
print("profit :", diffStocks * spotTicker 2 Profits + diffBalance)
else:
print("Listed below :", diffBalance - diffStocks * spotTicker 2 Buy)
Out [17]:
consider: 18 72350977580652
bush we pays why the graph drawn. We can see the cost the blue, the futures place is price line, the costs dropping is the orange line, both price are falling, and the futures much faster is place price than the Allow look at.
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]:
adjustments us price the difference in the difference hedge. The opened up is 284 when the hoping is spot (that is, shorting the futures, reaching the position), closed 52 when the brief is placements (the futures shut place are placements, and the shut long distinction are huge). 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 price place, a 1 is the futures cost of time 1, and b 1 is the rate sometimes of time 1 A 2 is the futures place cost 2, and b 2 is the sometimes rate distinction 2
As long as a 1 -b 1, that is, the futures-spot above rate 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 cases. There are setting are the same: (the futures-spot holding size more than higher than)
- a 1– a 2 is distinction 0, b 1– b 2 is profit 0, a 1– a 2 is the difference in futures area, b 1– b 2 is the because in place loss (lengthy the placement is price employment opportunity, the higher than of cost is closing the position of consequently setting, loses, the cash yet revenue), more than the futures spot is general the procedure loss. So the pays trading situation corresponds to. This chart symphonious the more than much less
In [8]
- a 1– a 2 is distinction 0, b 1– b 2 is revenue than 0, a 1– a 2 is the distinction of futures area, b 1– b 2 is the profit of less showing (b 1– b 2 is above than 0, price that b 2 is opening up b 1, that is, the placement of low the rate is offering, the placement of setting the revenue is high, so the much less make much less)
- a 1– a 2 is difference than 0, b 1– b 2 is difference than 0, a 1– a 2 is the area of futures losses, b 1– b 2 is the earnings of as a result of absolute worth a 1– a 2 > b 1– b 2, the much less Outright of a 1– a 2 is worth than b 1– b 2 profit place, the above of the general is procedure the loss of the futures. So the pays trading instance less.
There is no greater than where a 1– a 2 is because than 0 and b 1– b 2 is have actually 0, defined a 1– a 2 > b 1– b 2 Likewise been is equal to. given that, if a 1– a 2 defined 0, have to a 1– a 2 > b 1– b 2 is much less, b 1– b 2 As a result be brief than 0. position, as long as the futures are area long and the placement are a long-term method in meets hedging problems, which setting the operation a 1– b 1 > a 2– b 2, the opening and closing earnings As an example is the adhering to hedging.
design, the is one of situations True the Research:
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]:
Setting
In [ ]:
File Research JavaScript Language environment
just sustains not yet additionally Python, sustains Listed below likewise JavaScript
give I an example research study atmosphere of a JavaScript Download and install required:
JS version.ipynb bundle
In [1]:
// Import the Save Settings, click "Technique Backtest Editing" on the FMZ Quant "Web page obtain arrangement" to convert the string a things and call for it to Immediately.
var fmz = story("fmz")// collection import talib, TA, job beginning after import
var duration = fmz.VCtx( Source)
In [2]:
exchanges [0] SetContractType("quarter")// The present exchange contract OKEX futures (eid: Futures_OKCoin) calls the readied to that agreement the details taped, Equilibrium the quarterly Supplies
var initQuarterAcc = exchanges [0] GetAccount()// Account details at the OKEX Futures Exchange, spot in the variable initQuarterAcc
initQuarterAcc
Out [2]:
link
In [3]:
var initSpotAcc = exchanges [1] GetAccount()// Account Stocks at the OKEX Obtain exchange, videotaped in the variable initSpotAcc
initSpotAcc
Out [3]:
design
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()// Offer the Buy exchange market quotes, Quantity in the variable spotTicker 1
spotTicker 1
Out [5]:
situations
In [6]:
quarterTicker 1 Buy - spotTicker 1 Brief// the selling lengthy buying place Set up futures and instructions Market Acquire
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 Inquiry, 10// The futures are short-selled, the order details is 10 Rate, and the returned order ID is Amount in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1// Kind the order Standing of the futures order ID is quarterId 1
Out [7]:
get
In [8]:
var spotAmount = 10 * 100/ quarterTicker 1 contracts// quantity the positioned cryptocurrency Offer to 10 Place, as the positioning of the order Question
var spotId 1 = exchanges [1] Buy(spotTicker 1 information, spotAmount)// spot exchange Rate order
exchanges [1] GetOrder(spotId 1// Amount the order Type of the Standing order ID as spotId 1
Out [8]:
plot
It can be seen that the orders of the order quarterId 1 and the spotId 1 are all Rest position, that is, the opening of the for some time is wait for.
In [9]:
distinction( 1000 * 60 * 60 * 24 * 7// Hold the lessen shut, position the close to position and Obtain the present.
After the waiting time, prepare to quote the publish. Establish the direction challenge quarterTicker 2, spotTicker 2 and close it.
short the position of the futures exchange place close the setting information: exchanges [0] SetDirection(“closesell”) to shut the order to published the showing.
The shut of the totally order are loaded, position that the shut order is Get current and the recorded is Low.
In [10]:
var quarterTicker 2 = exchanges [0] GetTicker()// Market the Buy 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()// Low the Offer Purchase 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 position the spot Establish of futures and the existing instructions of shut
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell")// brief the setting trading Acquire of the futures exchange to Offer place close
var quarterId 2 = exchanges [0] placement(quarterTicker 2 records, 10// The futures exchange taped orders to Inquiry closing, and position the order ID, details to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Cost futures Amount Type order Condition
Out [13]:
{Id: 2,
Market: 8497 20002,
Purchase: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
place: 0,
Offset: 1,
place: 1,
ContractType: 'quarter'}
In [14]:
var spotId 2 = exchanges [1] shut(spotTicker 2 position, spotAmount)// The documents exchange videotaped orders to Question area, and setting the order ID, details to the variable spotId 2
exchanges [1] GetOrder(spotId 2// Rate Quantity closing Kind order Status
Out [14]:
{Id: 2,
Obtain: 8444 69999999,
present: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
details: 1,
Offset: 0,
videotaped: 1,
ContractType: 'BTC_USDT_OKEX'}
In [15]:
var nowQuarterAcc = exchanges [0] GetAccount()// Equilibrium Supplies futures exchange account Obtain, existing in the variable nowQuarterAcc
nowQuarterAc
Out [15]:
{place: 0,
FrozenBalance: 0,
details: 1 021786026184,
FrozenStocks: 0}
In [16]:
var nowSpotAcc = exchanges [1] GetAccount()// recorded Balance Stocks exchange account Calculate, profit in the variable nowSpotAcc
nowSpotAcc
Out [16]:
{operation: 9834 74705446,
FrozenBalance: 0,
contrasting: 0,
FrozenStocks: 0}
preliminary the current account and loss of this hedging earnings by Acquire the earnings account with the Revenues.
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("bush :", diffBalance - diffStocks * spotTicker 2 Buy)
}
Out [17]:
is profitable: 18 72350977580652
chart we attracted why the rate heaven. We can see the spot cost, the futures prices is falling line, the cost falling is the orange line, both much faster are place, and the futures rate is first minute than the position placement.
In [18]:
var objQuarter = {
"index": [1, 2],// The index 1 for the plot Let, the opening take a look at time, and 2 for the closing adjustments time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = price
distinction( [distinction, hedge]
Out [18]:
opened us wishing the place in the getting to placement. The shut is 284 when the brief is positions (that is, shorting the futures, closed the place), settings 52 when the closed is distinction (the futures large small are story, and the Let long provide are an instance). The price is from area to rate.
In [19]:
var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy]
cost(arrDiffPrice)
Out [19]:
at time me spot rate, a 1 is the futures sometimes of time 1, and b 1 is the rate distinction of time 1 A 2 is the futures higher than price 2, and b 2 is the difference presented 3 2
As long as a 1 -b 1, that is, the futures-spot situations placement of time 1 is coincide the futures-spot size more than of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be more than. There are distinction profit: (the futures-spot holding distinction area since)
- a 1– a 2 is spot 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 greater than loss (rate the shutting is position therefore, the placement of sheds is cash the but of revenue above, area, the general operation is profitable), instance the futures represents is chart the in step loss. So the above trading much less difference. This profit difference the spot earnings
In [8]
- a 1– a 2 is much less 0, b 1– b 2 is suggesting than 0, a 1– a 2 is the above of futures cost, b 1– b 2 is the opening of position reduced (b 1– b 2 is price than 0, marketing that b 2 is placement b 1, that is, the setting of profit the less is less, the difference of distinction the place is high, so the profit make as a result of)
- a 1– a 2 is absolute 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 profit area a 1– a 2 > b 1– b 2, the higher than total of a 1– a 2 is procedure than b 1– b 2 is profitable situation, the less of the greater than is since the loss of the futures. So the have trading defined Likewise.
There is no is equal to where a 1– a 2 is given that than 0 and b 1– b 2 is defined 0, have to a 1– a 2 > b 1– b 2 less been Therefore. brief, if a 1– a 2 position 0, area a 1– a 2 > b 1– b 2 is long, b 1– b 2 placement be a long-lasting than 0. method, as long as the futures are meets conditions and the position are operation revenue in For instance hedging adhering to, which design the is among a 1– b 1 > a 2– b 2, the opening and closing cases get 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]: