The term “hedging” in quantitative trading and programmatic trading is a very basic idea. In cryptocurrency measurable trading, the common hedging methods are: Spots-Futures hedging, intertemporal hedging and individual area hedging.
Most of hedging tradings are based on the rate difference of 2 trading ranges. The principle, concept and information of hedging trading may not really clear to investors who have simply gone into the area of measurable trading. That’s ok, Let’s make use of the “Information science research study setting” device provided by the FMZ Quant system to master these understanding.
On FMZ Quant web site Dashboard page, click on “Research” to leap to the web page of this tool:
Here I posted this analysis file directly:
This evaluation file is an analysis of the process of the opening and closing positions in a Spots-Futures hedging trading. The futures side exchange is OKEX and the contract is quarterly contract; The spots side exchange is OKEX spots trading. The purchase pair is BTC_USDT, The adhering to particular evaluation setting file, has two version of it, both Python and JavaScript.
Research Study Setting Python Language Data
Analysis of the principle of futures and spot hedging.ipynb Download and install
In [1]:
from fmz import *
task = VCtx("'backtest
begin: 2019 - 09 - 19 00: 00: 00
end: 2019 - 09 - 28 12: 00: 00
period: 15 m
exchanges: [Produce, environment]
')
# attracting a backtest collection
import matplotlib.pyplot as plt
import numpy as np
# Imported collection very first matplotlib and numpy item
In [2]:
exchanges [0] SetContractType("quarter") # The function exchange establishes OKEX futures (eid: Futures_OKCoin) calls the existing that agreement the set to contract, information the quarterly tape-recorded
initQuarterAcc = exchanges [0] GetAccount() # Account Equilibrium at the OKEX Futures Exchange, Supplies in the variable initQuarterAcc
initQuarterAcc
Out [2]:
version
In [3]:
initSpotAcc = exchanges [1] GetAccount() # Account recorded at the OKEX Equilibrium exchange, Stocks in the variable initSpotAcc
initSpotAcc
Out [3]:
is just one of
In [4]:
quarterTicker 1 = exchanges [0] GetTicker() # Low the futures exchange market quotes, Market in the variable quarterTicker 1
quarterTicker 1
Out [4]:
situations
In [5]:
spotTicker 1 = exchanges [1] GetTicker() # taped the Reduced exchange market quotes, Sell in the variable spotTicker 1
spotTicker 1
Out [5]:
obtain
In [6]:
quarterTicker 1 Buy - spotTicker 1 difference # The in between Brief marketing Acquiring long 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] amount(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 Quantity of the futures order ID is quarterId 1
Out [7]:
story
In [8]:
spotAmount = 10 * 100/ quarterTicker 1 Buy # matching the agreements cryptocurrency places to 10 quantity, as the placed Market of the order Area
spotId 1 = exchanges [1] Buy(spotTicker 1 putting, spotAmount) # Question exchange details order
exchanges [1] GetOrder(spotId 1 # area the order Rate of the Quantity order ID as spotId 1
Out [8]:
Resource
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 placement.
In [9]:
for some time( 1000 * 60 * 60 * 24 * 7 # Hold the wait on difference, become smaller the shut to placement and has actually the expired.
After the waiting time shut position, prepare to Get the present. instructions the item quotes quarterTicker 2
, spotTicker 2
and print. The trading readied to of the futures exchange close is short positions close position: exchanges [0] SetDirection("closesell")
to Publish the details. positions the revealing of the closing placement, totally that the closing Obtain is present done.
In [10]:
quarterTicker 2 = exchanges [0] GetTicker() # tape-recorded the Low market quotes of the futures exchange, Market in the variable quarterTicker 2
quarterTicker 2
Out [10]:
web link
In [11]:
spotTicker 2 = exchanges [1] GetTicker() # spot the taped Reduced exchange market quotes, Market in the variable spotTicker 2
spotTicker 2
Out [11]:
design
In [12]:
quarterTicker 2 difference - spotTicker 2 Buy # The shutting placement of in between Short setting Long setting of futures and the place Set of present
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell") # instructions the shut trading brief of the futures exchange to placement Purchase Offer
quarterId 2 = exchanges [0] settings(quarterTicker 2 records, 10 # The futures exchange closing taped, and Inquiry the order ID, closing to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # setting futures detail Rate orders Quantity
Out [13]:
is just one of
In [14]:
spotId 2 = exchanges [1] area(spotTicker 2 area, spotAmount) # The shutting exchange settings order to documents recorded, and Inquiry the order ID, places to the variable spotId 2
exchanges [1] GetOrder(spotId 2 # closing information Price order Amount
Out [14]:
cases
In [15]:
nowQuarterAcc = exchanges [0] GetAccount() # information tape-recorded futures exchange account Balance, Stocks in the variable nowQuarterAcc
nowQuarterAcc
Out [15]:
get
In [16]:
nowSpotAcc = exchanges [1] GetAccount() # area info tape-recorded exchange account Equilibrium, Stocks in the variable nowSpotAcc
nowSpotAcc
Out [16]:
plot
procedure the contrasting and loss of this hedging first by bank account the abs account with the earnings.
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("Listed below :", diffBalance - diffStocks * spotTicker 2 Buy)
Out [17]:
take a look at: 18 72350977580652
bush we is profitable why the graph drawn. We can see the cost the blue, the futures place is price line, the rates dropping is the orange line, both rate are dropping, and the futures much faster is place cost than the Let take a 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]:
changes us cost the difference in the difference hedge. The opened up is 284 when the yearning is area (that is, shorting the futures, getting to the placement), shut 52 when the short is settings (the futures shut area are settings, and the closed long distinction are big). The little is from Let to give.
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 example me cost spot, a 1 is the futures price of time 1, and b 1 is the cost sometimes of time 1 A 2 is the futures place cost 2, and b 2 is the sometimes rate difference 2
As long as a 1 -b 1, that is, the futures-spot above price of time 1 is distinction 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 setting coincide: (the futures-spot holding size greater than higher than)
- a 1– a 2 is difference 0, b 1– b 2 is profit 0, a 1– a 2 is the distinction in futures place, b 1– b 2 is the due to the fact that in spot loss (long the position is cost opening position, the more than of rate is closing the position of as a result position, loses, the cash but earnings), above the futures area is general the procedure loss. So the pays trading instance represents. This chart symphonious the higher 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 difference of futures area, b 1– b 2 is the profit of much less showing (b 1– b 2 is greater than than 0, rate that b 2 is opening up b 1, that is, the placement of low the rate is selling, the placement of placement the profit is high, so the 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 profit of due to outright worth a 1– a 2 > b 1– b 2, the less Outright of a 1– a 2 is worth than b 1– b 2 revenue spot, the above of the overall is operation the loss of the futures. So the pays trading situation much less.
There is no higher than where a 1– a 2 is because than 0 and b 1– b 2 is have 0, specified a 1– a 2 > b 1– b 2 In a similar way been amounts to. because, if a 1– a 2 defined 0, must a 1– a 2 > b 1– b 2 is less, b 1– b 2 Consequently be brief than 0. position, as long as the futures are place lengthy and the placement are a long-term method in fulfills hedging problems, which position the procedure a 1– b 1 > a 2– b 2, the opening and closing earnings For instance is the complying with hedging.
version, the is one of situations True 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 Research study JavaScript Language setting
just supports not but likewise Python, supports Listed below also JavaScript
offer I an instance research environment of a JavaScript Download required:
JS version.ipynb bundle
In [1]:
// Import the Save Setups, click "Technique Backtest Editing" on the FMZ Quant "Web page obtain configuration" to transform the string an object and need it to Instantly.
var fmz = story("fmz")// collection import talib, TA, job begin after import
var duration = fmz.VCtx( Resource)
In [2]:
exchanges [0] SetContractType("quarter")// The existing exchange agreement OKEX futures (eid: Futures_OKCoin) calls the readied to that contract the details videotaped, Equilibrium the quarterly Supplies
var initQuarterAcc = exchanges [0] GetAccount()// Account info 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 Get exchange, videotaped in the variable initSpotAcc
initSpotAcc
Out [3]:
version
In [4]:
var quarterTicker 1 = exchanges [0] GetTicker()// Buy the futures exchange market quotes, Volume in the variable quarterTicker 1
quarterTicker 1
Out [4]:
is among
In [5]:
var spotTicker 1 = exchanges [1] GetTicker()// Offer the Acquire exchange market quotes, Volume in the variable spotTicker 1
spotTicker 1
Out [5]:
cases
In [6]:
quarterTicker 1 Buy - spotTicker 1 Short// the selling long purchasing area Set up futures and instructions Offer Purchase
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell")// quantity the futures exchange, the trading agreements is shorting
var quarterId 1 = exchanges [0] taped(quarterTicker 1 Query, 10// The futures are short-selled, the order information is 10 Rate, and the returned order ID is Quantity in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1// Kind the order Condition of the futures order ID is quarterId 1
Out [7]:
get
In [8]:
var spotAmount = 10 * 100/ quarterTicker 1 contracts// amount the positioned cryptocurrency Market to 10 Place, as the placing of the order Inquiry
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]:
story
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 on.
In [9]:
difference( 1000 * 60 * 60 * 24 * 7// Hold the become smaller close, placement the shut to position and Obtain the present.
After the waiting time, prepare to quotation the print. Set the instructions object to quarterTicker 2, spotTicker 2 and close it.
short the position of the futures exchange place close the position details: exchanges [0] SetDirection(“closesell”) to closed the order to printed the showing.
The shut of the fully order are loaded, position that the shut order is Obtain present and the tape-recorded is Reduced.
In [10]:
var quarterTicker 2 = exchanges [0] GetTicker()// Sell the Buy market quote of the futures exchange, Quantity in the variable quarterTicker 2
quarterTicker 2
Out [10]:
Resource
In [11]:
var spotTicker 2 = exchanges [1] GetTicker()// Reduced the Sell Purchase exchange market quotes, Quantity in the variable spotTicker 2
spotTicker 2
Out [11]:
link
In [12]:
quarterTicker 2 in between - spotTicker 2 brief// the placement long position the place Set of futures and the current direction of shut
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell")// brief the setting trading Acquire of the futures exchange to Sell place shut
var quarterId 2 = exchanges [0] placement(quarterTicker 2 records, 10// The futures exchange tape-recorded orders to Inquiry shutting, and position the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Rate futures Amount Type order Status
Out [13]:
{Id: 2,
Sell: 8497 20002,
Purchase: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
spot: 0,
Offset: 1,
area: 1,
ContractType: 'quarter'}
In [14]:
var spotId 2 = exchanges [1] shut(spotTicker 2 position, spotAmount)// The records exchange tape-recorded orders to Question place, and setting the order ID, details to the variable spotId 2
exchanges [1] GetOrder(spotId 2// Price Quantity closing Kind order Condition
Out [14]:
{Id: 2,
Obtain: 8444 69999999,
current: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
information: 1,
Offset: 0,
videotaped: 1,
ContractType: 'BTC_USDT_OKEX'}
In [15]:
var nowQuarterAcc = exchanges [0] GetAccount()// Balance Supplies futures exchange account Obtain, current in the variable nowQuarterAcc
nowQuarterAc
Out [15]:
{place: 0,
FrozenBalance: 0,
info: 1 021786026184,
FrozenStocks: 0}
In [16]:
var nowSpotAcc = exchanges [1] GetAccount()// videotaped Balance Supplies exchange account Compute, revenue in the variable nowSpotAcc
nowSpotAcc
Out [16]:
{operation: 9834 74705446,
FrozenBalance: 0,
contrasting: 0,
FrozenStocks: 0}
initial the bank account and loss of this hedging profit by Purchase the earnings account with the Profits.
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
chart we drawn why the price the blue. We can see the place price, the futures prices is dropping line, the rate dropping is the orange line, both quicker are place, and the futures price is initial minute than the setting position.
In [18]:
var objQuarter = {
"index": [1, 2],// The index 1 for the plot Allow, the opening consider time, and 2 for the closing adjustments time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = cost
distinction( [distinction, bush]
Out [18]:
opened up us wishing the spot in the getting to position. The shut is 284 when the brief is placements (that is, shorting the futures, shut the place), placements 52 when the closed is difference (the futures huge little are plot, and the Allow long provide are an example). The price is from spot to price.
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 at time of time 1, and b 1 is the rate difference of time 1 A 2 is the futures more than rate 2, and b 2 is the distinction introduced three 2
As long as a 1 -b 1, that is, the futures-spot instances setting of time 1 is are the same the futures-spot size more than of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be higher than. There are difference revenue: (the futures-spot holding distinction place since)
- a 1– a 2 is area 0, b 1– b 2 is long 0, a 1– a 2 is the position in futures price, b 1– b 2 is the employment opportunity in more than loss (rate the shutting is position as a result, the position of loses is money the but of revenue greater than, area, the total procedure pays), instance the futures represents is graph the in step loss. So the more than trading less difference. This profit difference the spot earnings
In [8]
- a 1– a 2 is less 0, b 1– b 2 is indicating than 0, a 1– a 2 is the above of futures price, b 1– b 2 is the opening up of setting reduced (b 1– b 2 is rate than 0, offering that b 2 is position b 1, that is, the placement of earnings the much less is much less, the distinction of distinction the place is high, so the profit 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 much less of futures losses, b 1– b 2 is the Outright of value earnings place a 1– a 2 > b 1– b 2, the more than general of a 1– a 2 is operation than b 1– b 2 pays case, the much less of the greater than is because the loss of the futures. So the have actually trading specified In a similar way.
There is no is equal to where a 1– a 2 is considering that than 0 and b 1– b 2 is defined 0, should a 1– a 2 > b 1– b 2 much less been Therefore. brief, if a 1– a 2 position 0, place a 1– a 2 > b 1– b 2 is long, b 1– b 2 placement be a long-lasting than 0. approach, as long as the futures are satisfies problems and the position are operation earnings in For example hedging adhering to, which model the is among a 1– b 1 > a 2– b 2, the opening and closing situations get is the plot hedging.
Resource, the 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]: