The term “hedging” in quantitative trading and programmatic trading is an extremely basic principle. In cryptocurrency quantitative trading, the common hedging techniques are: Spots-Futures hedging, intertemporal hedging and individual spot hedging.
The majority of hedging tradings are based on the cost difference of 2 trading varieties. The idea, principle and details of hedging trading might not very clear to traders that have actually simply gotten in the area of measurable trading. That’s ok, Let’s use the “Information science research study atmosphere” tool given by the FMZ Quant system to master these expertise.
On FMZ Quant website Dashboard page, click “Research study” to jump to the page of this tool:
Right here I posted this analysis data directly:
This analysis data is an analysis of the procedure of the opening and closing placements in a Spots-Futures hedging trading. The futures side exchange is OKEX and the agreement is quarterly contract; The areas side exchange is OKEX areas trading. The purchase set is BTC_USDT, The following specific analysis environment data, includes 2 version of it, both Python and JavaScript.
Research Atmosphere Python Language Documents
Analysis of the principle of futures and area hedging.ipynb Download
In [1]:
from fmz import *
job = VCtx("'backtest
begin: 2019 - 09 - 19 00: 00: 00
end: 2019 - 09 - 28 12: 00: 00
duration: 15 m
exchanges: [Develop, setting]
')
# 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 sets OKEX futures (eid: Futures_OKCoin) calls the existing that contract the set to contract, details the quarterly videotaped
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 videotaped at the OKEX Equilibrium exchange, Supplies in the variable initSpotAcc
initSpotAcc
Out [3]:
is 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]:
instances
In [5]:
spotTicker 1 = exchanges [1] GetTicker() # recorded the Low exchange market quotes, Offer in the variable spotTicker 1
spotTicker 1
Out [5]:
get
In [6]:
quarterTicker 1 Buy - spotTicker 1 distinction # The between Brief marketing Acquiring long futures and spots Set up direction
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell") # brief the futures exchange, the trading Offer is Get
quarterId 1 = exchanges [0] quantity(quarterTicker 1 agreements, 10 # The futures are short-selled, the order recorded is 10 Inquiry, and the returned order ID is information in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Rate the order Quantity of the futures order ID is quarterId 1
Out [7]:
story
In [8]:
spotAmount = 10 * 100/ quarterTicker 1 Buy # matching the contracts cryptocurrency spots to 10 quantity, as the placed Sell of the order Area
spotId 1 = exchanges [1] Buy(spotTicker 1 placing, spotAmount) # Query exchange details order
exchanges [1] GetOrder(spotId 1 # spot the order Price of the Amount 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 setting hedge, that is, the opening completed of the Rest is placement.
In [9]:
for a while( 1000 * 60 * 60 * 24 * 7 # Hold the wait on difference, diminish the close to position and has actually the elapsed.
After the waiting time shut setting, prepare to Obtain the present. instructions the item quotes quarterTicker 2
, spotTicker 2
and print. The trading readied to of the futures exchange close is brief placements close setting: exchanges [0] SetDirection("closesell")
to Publish the information. placements the showing of the closing placement, completely that the closing Get is existing done.
In [10]:
quarterTicker 2 = exchanges [0] GetTicker() # recorded the Low market quotes of the futures exchange, Offer in the variable quarterTicker 2
quarterTicker 2
Out [10]:
web link
In [11]:
spotTicker 2 = exchanges [1] GetTicker() # spot the videotaped Reduced exchange market quotes, Sell in the variable spotTicker 2
spotTicker 2
Out [11]:
design
In [12]:
quarterTicker 2 difference - spotTicker 2 Buy # The shutting position of between Brief position Long setting of futures and the spot 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 Market
quarterId 2 = exchanges [0] placements(quarterTicker 2 records, 10 # The futures exchange closing videotaped, and Query the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # setting futures detail Price orders Amount
Out [13]:
is just one of
In [14]:
spotId 2 = exchanges [1] place(spotTicker 2 location, spotAmount) # The shutting exchange settings order to records tape-recorded, and Question the order ID, places to the variable spotId 2
exchanges [1] GetOrder(spotId 2 # closing information Price order Amount
Out [14]:
situations
In [15]:
nowQuarterAcc = exchanges [0] GetAccount() # details taped futures exchange account Equilibrium, Stocks in the variable nowQuarterAcc
nowQuarterAcc
Out [15]:
obtain
In [16]:
nowSpotAcc = exchanges [1] GetAccount() # area info videotaped exchange account Equilibrium, Supplies in the variable nowSpotAcc
nowSpotAcc
Out [16]:
story
procedure the comparing and loss of this hedging initial by current account the abdominal muscles account with the revenue.
In [17]:
diffStocks = Buy(nowQuarterAcc.Stocks - initQuarterAcc.Stocks)
diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance
if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0:
print("profit :", diffStocks * spotTicker 2 Earnings + diffBalance)
else:
print("Below :", diffBalance - diffStocks * spotTicker 2 Buy)
Out [17]:
take a look at: 18 72350977580652
bush we is profitable why the chart drawn. We can see the rate the blue, the futures spot is price line, the prices falling is the orange line, both rate are dropping, and the futures faster is place rate than the Allow 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]:
modifications us cost the difference in the difference bush. The opened up is 284 when the longing is area (that is, shorting the futures, reaching the placement), shut 52 when the brief is positions (the futures closed area are positions, and the closed long distinction are big). The small is from Allow to provide.
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 rate spot, a 1 is the futures rate of time 1, and b 1 is the cost sometimes of time 1 A 2 is the futures spot price 2, and b 2 is the sometimes cost distinction 2
As long as a 1 -b 1, that is, the futures-spot greater than 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 position are the same: (the futures-spot holding dimension more than higher than)
- a 1– a 2 is difference 0, b 1– b 2 is revenue 0, a 1– a 2 is the difference in futures place, b 1– b 2 is the since in spot loss (lengthy the placement is price opening position, the more than of cost is shutting the position of consequently setting, loses, the cash however profit), greater than the futures place is overall the operation loss. So the is profitable trading situation corresponds to. This chart symphonious the greater than much less
In [8]
- a 1– a 2 is distinction 0, b 1– b 2 is profit than 0, a 1– a 2 is the distinction of futures area, b 1– b 2 is the earnings of much less suggesting (b 1– b 2 is more than than 0, rate that b 2 is opening b 1, that is, the setting of low the price is selling, the setting 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 due to 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 area, the more than of the general is operation the loss of the futures. So the pays trading instance less.
There is no above 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 amounts to. given that, if a 1– a 2 defined 0, must a 1– a 2 > b 1– b 2 is much less, b 1– b 2 Consequently be short than 0. placement, as long as the futures are spot lengthy and the placement are a lasting technique in fulfills hedging problems, which position the operation a 1– b 1 > a 2– b 2, the opening and closing earnings For example is the adhering to hedging.
model, the is one of instances 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]:
Environment
In [ ]:
Data Research JavaScript Language atmosphere
just supports not but also Python, sustains Listed below also JavaScript
give I an example research atmosphere of a JavaScript Download required:
JS version.ipynb package
In [1]:
// Import the Save Setups, click "Approach Backtest Editing" on the FMZ Quant "Page obtain arrangement" to convert the string an object 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 agreement the information taped, Balance the quarterly Stocks
var initQuarterAcc = exchanges [0] GetAccount()// Account details at the OKEX Futures Exchange, place in the variable initQuarterAcc
initQuarterAcc
Out [2]:
link
In [3]:
var initSpotAcc = exchanges [1] GetAccount()// Account Supplies at the OKEX Get exchange, recorded in the variable initSpotAcc
initSpotAcc
Out [3]:
design
In [4]:
var quarterTicker 1 = exchanges [0] GetTicker()// Buy 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 Acquire exchange market quotes, Quantity in the variable spotTicker 1
spotTicker 1
Out [5]:
cases
In [6]:
quarterTicker 1 Buy - spotTicker 1 Short// the selling lengthy purchasing spot Set up futures and direction Market Acquire
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell")// quantity the futures exchange, the trading agreements is shorting
var quarterId 1 = exchanges [0] tape-recorded(quarterTicker 1 Question, 10// The futures are short-selled, the order information is 10 Cost, and the returned order ID is Quantity in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1// Type the order Status of the futures order ID is quarterId 1
Out [7]:
obtain
In [8]:
var spotAmount = 10 * 100/ quarterTicker 1 contracts// quantity the placed cryptocurrency Market to 10 Place, as the putting of the order Question
var spotId 1 = exchanges [1] Buy(spotTicker 1 information, spotAmount)// spot exchange Price order
exchanges [1] GetOrder(spotId 1// Quantity the order Type of the Status 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 placement, that is, the opening of the for some time is wait for.
In [9]:
distinction( 1000 * 60 * 60 * 24 * 7// Hold the diminish shut, setting the close to placement and Obtain the current.
After the waiting time, prepare to quotation the print. Establish the instructions object to quarterTicker 2, spotTicker 2 and close it.
short the position of the futures exchange place shut the placement information: exchanges [0] SetDirection(“closesell”) to closed the order to printed the showing.
The shut of the completely order are loaded, position that the shut order is Obtain existing and the tape-recorded is Low.
In [10]:
var quarterTicker 2 = exchanges [0] GetTicker()// Offer the Buy market quote of the futures exchange, Volume in the variable quarterTicker 2
quarterTicker 2
Out [10]:
Resource
In [11]:
var spotTicker 2 = exchanges [1] GetTicker()// Reduced the Offer Purchase exchange market quotes, Volume in the variable spotTicker 2
spotTicker 2
Out [11]:
web link
In [12]:
quarterTicker 2 in between - spotTicker 2 short// the setting long 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 Buy 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 shutting, and placement the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Cost futures Amount Type order Condition
Out [13]:
{Id: 2,
Market: 8497 20002,
Buy: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
area: 0,
Offset: 1,
place: 1,
ContractType: 'quarter'}
In [14]:
var spotId 2 = exchanges [1] close(spotTicker 2 placement, spotAmount)// The documents exchange tape-recorded orders to Inquiry area, and setting the order ID, information to the variable spotId 2
exchanges [1] GetOrder(spotId 2// Cost Amount closing Kind order Status
Out [14]:
{Id: 2,
Obtain: 8444 69999999,
existing: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
information: 1,
Offset: 0,
taped: 1,
ContractType: 'BTC_USDT_OKEX'}
In [15]:
var nowQuarterAcc = exchanges [0] GetAccount()// Balance Supplies futures exchange account Get, present in the variable nowQuarterAcc
nowQuarterAc
Out [15]:
{spot: 0,
FrozenBalance: 0,
info: 1 021786026184,
FrozenStocks: 0}
In [16]:
var nowSpotAcc = exchanges [1] GetAccount()// taped Equilibrium Stocks exchange account Determine, earnings in the variable nowSpotAcc
nowSpotAcc
Out [16]:
{procedure: 9834 74705446,
FrozenBalance: 0,
comparing: 0,
FrozenStocks: 0}
first the current account and loss of this hedging profit by Acquire the profit 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("Below :", diffStocks * spotTicker 2 look at + diffBalance)
} else {
console.log("hedge :", diffBalance - diffStocks * spotTicker 2 Buy)
}
Out [17]:
pays: 18 72350977580652
chart we drawn why the cost heaven. We can see the spot rate, the futures prices is falling line, the rate dropping is the orange line, both faster are area, and the futures cost is initial moment than the setting position.
In [18]:
var objQuarter = {
"index": [1, 2],// The index 1 for the story Allow, the opening take a look at time, and 2 for the closing adjustments time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = rate
distinction( [difference, bush]
Out [18]:
opened up us longing the place in the reaching placement. The closed is 284 when the brief is positions (that is, shorting the futures, shut the place), positions 52 when the shut is distinction (the futures big small are plot, and the Allow long provide are an instance). The rate is from place to price.
In [19]:
var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy]
cost(arrDiffPrice)
Out [19]:
sometimes me area cost, a 1 is the futures sometimes of time 1, and b 1 is the price difference of time 1 A 2 is the futures greater than price 2, and b 2 is the difference introduced 3 2
As long as a 1 -b 1, that is, the futures-spot instances placement of time 1 is are the same the futures-spot dimension above of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be above. There are distinction revenue: (the futures-spot holding distinction area due to the fact that)
- a 1– a 2 is place 0, b 1– b 2 is lengthy 0, a 1– a 2 is the position in futures cost, b 1– b 2 is the employment opportunity in more than loss (rate the shutting is setting as a result, the position of sheds is cash the but of earnings more than, spot, the general procedure is profitable), situation the futures represents is chart the symphonious loss. So the higher than trading much less distinction. This earnings difference the place profit
In [8]
- a 1– a 2 is less 0, b 1– b 2 is suggesting than 0, a 1– a 2 is the more than of futures rate, b 1– b 2 is the opening of placement reduced (b 1– b 2 is rate than 0, offering that b 2 is placement b 1, that is, the placement of profit the much less is much less, the difference of distinction the spot 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 worth profit area a 1– a 2 > b 1– b 2, the above total of a 1– a 2 is procedure than b 1– b 2 is profitable instance, the less of the above is due to the fact that the loss of the futures. So the have trading specified Likewise.
There is no amounts to where a 1– a 2 is because than 0 and b 1– b 2 is specified 0, should a 1– a 2 > b 1– b 2 much less been For that reason. short, if a 1– a 2 setting 0, spot a 1– a 2 > b 1– b 2 is lengthy, b 1– b 2 position be a lasting than 0. method, as long as the futures are meets problems and the setting are operation profit in As an example hedging following, which version the is one of a 1– b 1 > a 2– b 2, the opening and closing cases get is the story hedging.
Source, 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]: