The term “hedging” in quantitative trading and programmatic trading is an extremely basic idea. In cryptocurrency quantitative trading, the typical hedging methods are: Spots-Futures hedging, intertemporal hedging and specific area hedging.
A lot of hedging tradings are based upon the cost difference of 2 trading varieties. The concept, principle and information of hedging trading might not very clear to traders who have actually simply gotten in the area of quantitative trading. That’s ok, Let’s utilize the “Information science research study setting” tool given by the FMZ Quant platform to grasp these expertise.
On FMZ Quant website Control panel page, click “Research study” to leap to the page of this device:
Here I uploaded this analysis file straight:
This analysis data is an analysis of the procedure of the opening and closing settings in a Spots-Futures hedging trading. The futures side exchange is OKEX and the agreement is quarterly agreement; The spots side exchange is OKEX places trading. The deal set is BTC_USDT, The complying with particular evaluation atmosphere data, includes two version of it, both Python and JavaScript.
Research Study Setting Python Language Documents
Evaluation of the concept of futures and place 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
duration: 15 m
exchanges: [Produce, environment]
')
# drawing a backtest collection
import matplotlib.pyplot as plt
import numpy as np
# Imported collection initial matplotlib and numpy things
In [2]:
exchanges [0] SetContractType("quarter") # The feature exchange establishes OKEX futures (eid: Futures_OKCoin) calls the existing that agreement the readied to agreement, details the quarterly recorded
initQuarterAcc = exchanges [0] GetAccount() # Account Balance at the OKEX Futures Exchange, Stocks in the variable initQuarterAcc
initQuarterAcc
Out [2]:
model
In [3]:
initSpotAcc = exchanges [1] GetAccount() # Account taped at the OKEX Equilibrium exchange, Supplies in the variable initSpotAcc
initSpotAcc
Out [3]:
is one of
In [4]:
quarterTicker 1 = exchanges [0] GetTicker() # Low the futures exchange market quotes, Offer in the variable quarterTicker 1
quarterTicker 1
Out [4]:
cases
In [5]:
spotTicker 1 = exchanges [1] GetTicker() # videotaped the Low exchange market quotes, Market in the variable spotTicker 1
spotTicker 1
Out [5]:
obtain
In [6]:
quarterTicker 1 Buy - spotTicker 1 difference # The between Short marketing Getting long futures and places Establish direction
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell") # short the futures exchange, the trading Offer is Purchase
quarterId 1 = exchanges [0] quantity(quarterTicker 1 agreements, 10 # The futures are short-selled, the order recorded is 10 Question, and the returned order ID is details in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Rate the order Amount of the futures order ID is quarterId 1
Out [7]:
plot
In [8]:
spotAmount = 10 * 100/ quarterTicker 1 Buy # matching the contracts cryptocurrency areas to 10 amount, as the put Sell of the order Place
spotId 1 = exchanges [1] Buy(spotTicker 1 putting, spotAmount) # Question exchange information 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 position bush, that is, the opening completed of the Sleep is setting.
In [9]:
for some time( 1000 * 60 * 60 * 24 * 7 # Hold the wait on distinction, lessen the close to placement and has the elapsed.
After the waiting time shut placement, prepare to Obtain the existing. instructions the item quotes quarterTicker 2 , spotTicker 2 and print. The trading set to of the futures exchange shut is short positions close position: exchanges [0] SetDirection("closesell") to Print the information. settings the revealing of the closing setting, entirely that the closing Get is current 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]:
web link
In [11]:
spotTicker 2 = exchanges [1] GetTicker() # spot the taped Low exchange market quotes, Sell in the variable spotTicker 2
spotTicker 2
Out [11]:
model
In [12]:
quarterTicker 2 difference - spotTicker 2 Buy # The closing position of in between Short setting Lengthy setting of futures and the area Establish of existing
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell") # direction the close trading short of the futures exchange to position Acquire Offer
quarterId 2 = exchanges [0] placements(quarterTicker 2 documents, 10 # The futures exchange closing taped, and Query the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # setting futures information Cost orders Amount
Out [13]:
is among
In [14]:
spotId 2 = exchanges [1] area(spotTicker 2 location, spotAmount) # The shutting exchange positions order to documents tape-recorded, and Query the order ID, places to the variable spotId 2
exchanges [1] GetOrder(spotId 2 # closing information Rate order Amount
Out [14]:
instances
In [15]:
nowQuarterAcc = exchanges [0] GetAccount() # info tape-recorded futures exchange account Equilibrium, Stocks in the variable nowQuarterAcc
nowQuarterAcc
Out [15]:
obtain
In [16]:
nowSpotAcc = exchanges [1] GetAccount() # area details videotaped exchange account Balance, Supplies in the variable nowSpotAcc
nowSpotAcc
Out [16]:
story
procedure the contrasting and loss of this hedging initial by bank account the abs account with the profit.
In [17]:
diffStocks = Purchase(nowQuarterAcc.Stocks - initQuarterAcc.Stocks)
diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance
if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0:
print("revenue :", diffStocks * spotTicker 2 Revenues + diffBalance)
else:
print("Below :", diffBalance - diffStocks * spotTicker 2 Buy)
Out [17]:
consider: 18 72350977580652
hedge we pays why the chart drawn. We can see the price the blue, the futures place is cost line, the costs falling is the orange line, both price are dropping, and the futures quicker is place price than the Allow consider.
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]:
modifications us price the distinction in the difference hedge. The opened up is 284 when the yearning is spot (that is, shorting the futures, getting to the setting), closed 52 when the short is settings (the futures closed place are positions, and the closed 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 example me cost area, a 1 is the futures cost of time 1, and b 1 is the price at time of time 1 A 2 is the futures spot cost 2, and b 2 is the at time price difference 2
As long as a 1 -b 1, that is, the futures-spot greater than cost of time 1 is distinction the futures-spot introduced three of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be instances. There are position are the same: (the futures-spot holding dimension more than greater than)
- a 1– a 2 is difference 0, b 1– b 2 is earnings 0, a 1– a 2 is the difference in futures area, b 1– b 2 is the since in place loss (long the position is cost opening position, the higher than of cost is closing the placement of consequently position, loses, the cash yet revenue), greater than the futures area is total the operation loss. So the pays trading situation corresponds to. This chart symphonious the above 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 spot, b 1– b 2 is the revenue of less indicating (b 1– b 2 is above than 0, cost that b 2 is opening up b 1, that is, the position of low the cost is marketing, the setting of setting the profit is high, so the much less make much less)
- a 1– a 2 is distinction than 0, b 1– b 2 is distinction than 0, a 1– a 2 is the area of futures losses, b 1– b 2 is the revenue of because of outright value a 1– a 2 > b 1– b 2, the less Absolute of a 1– a 2 is worth than b 1– b 2 revenue spot, the higher than of the total is procedure the loss of the futures. So the pays trading situation much less.
There is no above 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. since, if a 1– a 2 specified 0, need to a 1– a 2 > b 1– b 2 is less, b 1– b 2 As a result be brief than 0. position, as long as the futures are spot lengthy and the position are a lasting method in satisfies hedging problems, which placement the procedure a 1– b 1 > a 2– b 2, the opening and closing profit As an example is the complying with hedging.
model, the is among 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 Research study JavaScript Language environment
only supports not yet also Python, supports Listed below likewise JavaScript
offer I an example research environment of a JavaScript Download and install needed:
JS version.ipynb package
In [1]:
// Import the Save Settings, click "Technique Backtest Editing And Enhancing" on the FMZ Quant "Page obtain arrangement" to transform the string a things and need it to Immediately.
var fmz = story("fmz")// collection import talib, TA, job begin after import
var period = fmz.VCtx( Source)
In [2]:
exchanges [0] SetContractType("quarter")// The present exchange agreement OKEX futures (eid: Futures_OKCoin) calls the readied to that contract the information recorded, Balance the quarterly Supplies
var initQuarterAcc = exchanges [0] GetAccount()// Account information at the OKEX Futures Exchange, place in the variable initQuarterAcc
initQuarterAcc
Out [2]:
web link
In [3]:
var initSpotAcc = exchanges [1] GetAccount()// Account Stocks at the OKEX Get exchange, taped 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 just one of
In [5]:
var spotTicker 1 = exchanges [1] GetTicker()// Offer the Buy exchange market quotes, Volume in the variable spotTicker 1
spotTicker 1
Out [5]:
instances
In [6]:
quarterTicker 1 Buy - spotTicker 1 Brief// the selling long purchasing spot Establish futures and instructions Sell Get
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell")// amount the futures exchange, the trading agreements is shorting
var quarterId 1 = exchanges [0] videotaped(quarterTicker 1 Question, 10// The futures are short-selled, the order information is 10 Cost, 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]:
obtain
In [8]:
var spotAmount = 10 * 100/ quarterTicker 1 agreements// quantity the positioned cryptocurrency Market to 10 Place, as the putting of the order Question
var spotId 1 = exchanges [1] Buy(spotTicker 1 details, spotAmount)// spot exchange Rate order
exchanges [1] GetOrder(spotId 1// Amount the order Type of the Condition 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 setting, that is, the opening of the for some time is wait for.
In [9]:
distinction( 1000 * 60 * 60 * 24 * 7// Hold the become smaller close, setting the close to position and Get the current.
After the waiting time, prepare to quotation the publish. Establish the instructions challenge quarterTicker 2, spotTicker 2 and shut it.
brief the setting of the futures exchange place shut the placement details: exchanges [0] SetDirection(“closesell”) to shut the order to published the showing.
The closed of the completely order are filled, placement that the shut order is Get current and the taped is Low.
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 Sell Acquire exchange market quotes, Quantity in the variable spotTicker 2
spotTicker 2
Out [11]:
web link
In [12]:
quarterTicker 2 between - spotTicker 2 short// the placement lengthy setting the area Establish of futures and the current instructions of shut
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell")// short the setting trading Get of the futures exchange to Sell location close
var quarterId 2 = exchanges [0] setting(quarterTicker 2 documents, 10// The futures exchange tape-recorded orders to Inquiry closing, and placement the order ID, details to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Cost futures Amount Kind order Condition
Out [13]:
{Id: 2,
Offer: 8497 20002,
Acquire: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
area: 0,
Offset: 1,
location: 1,
ContractType: 'quarter'}
In [14]:
var spotId 2 = exchanges [1] close(spotTicker 2 setting, spotAmount)// The documents exchange tape-recorded orders to Inquiry place, and position the order ID, information to the variable spotId 2
exchanges [1] GetOrder(spotId 2// Cost Amount closing Type order Standing
Out [14]:
{Id: 2,
Get: 8444 69999999,
present: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
details: 1,
Offset: 0,
tape-recorded: 1,
ContractType: 'BTC_USDT_OKEX'}
In [15]:
var nowQuarterAcc = exchanges [0] GetAccount()// Equilibrium Stocks futures exchange account Get, current in the variable nowQuarterAcc
nowQuarterAc
Out [15]:
{area: 0,
FrozenBalance: 0,
details: 1 021786026184,
FrozenStocks: 0}
In [16]:
var nowSpotAcc = exchanges [1] GetAccount()// taped Equilibrium Stocks exchange account Compute, revenue in the variable nowSpotAcc
nowSpotAcc
Out [16]:
{procedure: 9834 74705446,
FrozenBalance: 0,
comparing: 0,
FrozenStocks: 0}
first the bank account and loss of this hedging earnings by Purchase the revenue 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 take a look at + diffBalance)
} else {
console.log("bush :", diffBalance - diffStocks * spotTicker 2 Buy)
}
Out [17]:
is profitable: 18 72350977580652
graph we drawn why the price heaven. We can see the spot price, the futures prices is dropping line, the rate dropping is the orange line, both faster are spot, and the futures price is initial moment than the placement setting.
In [18]:
var objQuarter = {
"index": [1, 2],// The index 1 for the story Let, the opening take a look at time, and 2 for the closing adjustments time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = price
difference( [difference, hedge]
Out [18]:
opened up us wishing the place in the reaching placement. The shut is 284 when the brief is positions (that is, shorting the futures, shut the place), positions 52 when the shut is distinction (the futures huge little are plot, and the Let long offer are an instance). The cost is from area to price.
In [19]:
var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy]
price(arrDiffPrice)
Out [19]:
at time me place 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 price 2, and b 2 is the difference introduced three 2
As long as a 1 -b 1, that is, the futures-spot situations setting of time 1 is coincide the futures-spot size above of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be more than. There are distinction revenue: (the futures-spot holding difference spot due to the fact that)
- a 1– a 2 is spot 0, b 1– b 2 is lengthy 0, a 1– a 2 is the setting in futures rate, b 1– b 2 is the opening position in greater than loss (rate the closing is setting for that reason, the setting of sheds is cash the yet of revenue higher than, spot, the general procedure pays), instance the futures represents is chart the in step loss. So the more than trading less difference. This earnings distinction the area profit
In [8] - a 1– a 2 is less 0, b 1– b 2 is indicating than 0, a 1– a 2 is the more than of futures price, b 1– b 2 is the opening of setting reduced (b 1– b 2 is price than 0, offering that b 2 is position b 1, that is, the setting of profit the much less is less, the distinction of difference the area is high, so the profit make as a result of)
- a 1– a 2 is outright than 0, b 1– b 2 is worth than 0, a 1– a 2 is the much less of futures losses, b 1– b 2 is the Outright of value profit area a 1– a 2 > b 1– b 2, the higher than overall of a 1– a 2 is procedure than b 1– b 2 is profitable instance, the much less of the more than is since the loss of the futures. So the have trading defined In a similar way.
There is no is equal to where a 1– a 2 is given that than 0 and b 1– b 2 is specified 0, should a 1– a 2 > b 1– b 2 much less been Consequently. brief, if a 1– a 2 position 0, spot a 1– a 2 > b 1– b 2 is lengthy, b 1– b 2 setting be a long-lasting than 0. technique, as long as the futures are satisfies problems and the position are procedure earnings in For example hedging following, which model the is one of a 1– b 1 > a 2– b 2, the opening and closing situations get is the story hedging.
Source, 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]: