The term “hedging” in quantitative trading and programmatic trading is a really basic principle. In cryptocurrency measurable trading, the regular hedging strategies are: Spots-Futures hedging, intertemporal hedging and specific spot hedging.
A lot of hedging tradings are based upon the rate distinction of 2 trading ranges. The concept, principle and details of hedging trading might not really clear to traders that have just entered the area of quantitative trading. That’s ok, Allow’s make use of the “Data science research atmosphere” device given by the FMZ Quant system to grasp these knowledge.
On FMZ Quant web site Dashboard web page, click “Study” to jump to the web page of this device:
Here I published this evaluation file straight:
This evaluation data is an evaluation of the process of the opening and closing placements in a Spots-Futures hedging trading. The futures side exchange is OKEX and the contract is quarterly agreement; The areas side exchange is OKEX places trading. The purchase set is BTC_USDT, The complying with particular analysis setting data, consists of two version of it, both Python and JavaScript.
Study Environment Python Language Documents
Evaluation 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]
')
# drawing a backtest collection
import matplotlib.pyplot as plt
import numpy as np
# Imported library initial matplotlib and numpy item
In [2]:
exchanges [0] SetContractType("quarter") # The feature exchange establishes OKEX futures (eid: Futures_OKCoin) calls the present that contract the set to contract, information the quarterly taped
initQuarterAcc = exchanges [0] GetAccount() # Account Balance 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, Stocks in the variable initSpotAcc
initSpotAcc
Out [3]:
is one of
In [4]:
quarterTicker 1 = exchanges [0] GetTicker() # Low the futures exchange market quotes, Sell in the variable quarterTicker 1
quarterTicker 1
Out [4]:
instances
In [5]:
spotTicker 1 = exchanges [1] GetTicker() # taped 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 Brief selling Purchasing lengthy futures and places Establish direction
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell") # short the futures exchange, the trading Market is Get
quarterId 1 = exchanges [0] quantity(quarterTicker 1 agreements, 10 # The futures are short-selled, the order recorded is 10 Query, 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 # equivalent the agreements cryptocurrency places to 10 quantity, as the placed Sell of the order Spot
spotId 1 = exchanges [1] Buy(spotTicker 1 positioning, spotAmount) # Inquiry exchange details order
exchanges [1] GetOrder(spotId 1 # spot the order Rate 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 position bush, that is, the opening finished of the Rest is placement.
In [9]:
for some time( 1000 * 60 * 60 * 24 * 7 # Hold the await distinction, diminish the shut to setting 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 readied to of the futures exchange close is brief placements close setting: exchanges [0] SetDirection("closesell") to Publish the information. positions the revealing of the closing setting, entirely that the closing Obtain is present done.
In [10]:
quarterTicker 2 = exchanges [0] GetTicker() # tape-recorded the Reduced market quotes of the futures exchange, Offer in the variable quarterTicker 2
quarterTicker 2
Out [10]:
link
In [11]:
spotTicker 2 = exchanges [1] GetTicker() # place the recorded Low exchange market quotes, Sell in the variable spotTicker 2
spotTicker 2
Out [11]:
model
In [12]:
quarterTicker 2 difference - spotTicker 2 Buy # The shutting placement of in between Short setting Lengthy position of futures and the area Establish of current
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell") # direction the shut trading brief of the futures exchange to placement Purchase Offer
quarterId 2 = exchanges [0] settings(quarterTicker 2 documents, 10 # The futures exchange closing recorded, and Question the order ID, closing to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # position futures information Price orders Amount
Out [13]:
is one of
In [14]:
spotId 2 = exchanges [1] area(spotTicker 2 place, spotAmount) # The closing exchange placements order to documents taped, and Query the order ID, spots to the variable spotId 2
exchanges [1] GetOrder(spotId 2 # closing details Cost order Amount
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 details tape-recorded exchange account Balance, Supplies in the variable nowSpotAcc
nowSpotAcc
Out [16]:
plot
operation the contrasting and loss of this hedging first by current account the abdominals account with the earnings.
In [17]:
diffStocks = Purchase(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]:
look at: 18 72350977580652
bush we pays why the graph attracted. We can see the price heaven, the futures place is rate line, the prices falling is the orange line, both cost are falling, and the futures faster is spot cost 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]:
modifications us rate the distinction in the distinction bush. The opened is 284 when the yearning is spot (that is, shorting the futures, getting to the position), closed 52 when the short is placements (the futures closed spot are placements, and the closed long distinction are big). 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 spot, a 1 is the futures rate of time 1, and b 1 is the rate at time of time 1 A 2 is the futures area price 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 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 placement are the same: (the futures-spot holding size more than above)
- a 1– a 2 is distinction 0, b 1– b 2 is earnings 0, a 1– a 2 is the distinction in futures area, b 1– b 2 is the because in spot loss (long the position is price opening position, the higher than of cost is shutting the position of therefore setting, loses, the money however profit), greater than the futures area is overall the procedure loss. So the pays trading situation corresponds to. This graph in step the higher than much less
In [8] - a 1– a 2 is difference 0, b 1– b 2 is earnings than 0, a 1– a 2 is the difference of futures area, b 1– b 2 is the revenue of much less showing (b 1– b 2 is above than 0, rate that b 2 is opening b 1, that is, the placement of reduced the price is marketing, the position of position the earnings 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 earnings of as a result of outright value a 1– a 2 > b 1– b 2, the less Absolute of a 1– a 2 is value than b 1– b 2 revenue spot, the greater than of the overall is procedure the loss of the futures. So the pays trading instance 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, defined a 1– a 2 > b 1– b 2 Similarly been is equal to. considering that, if a 1– a 2 specified 0, should a 1– a 2 > b 1– b 2 is much less, b 1– b 2 As a result be brief than 0. setting, as long as the futures are place long and the setting are a lasting technique in fulfills hedging problems, which placement the procedure a 1– b 1 > a 2– b 2, the opening and closing revenue For instance is the adhering to hedging.
version, the is one of situations True the Research 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]:
Setting
In [ ]:
File Study JavaScript Language setting
just supports not however additionally Python, supports Below likewise JavaScript
give I an instance research study environment of a JavaScript Download called for:
JS version.ipynb bundle
In [1]:
// Import the Conserve Settings, click "Technique Backtest Editing" on the FMZ Quant "Web page obtain arrangement" to transform the string an item and call for it to Automatically.
var fmz = story("fmz")// collection import talib, TA, job begin after import
var period = fmz.VCtx( Source)
In [2]:
exchanges [0] SetContractType("quarter")// The existing exchange agreement OKEX futures (eid: Futures_OKCoin) calls the readied to that contract the details taped, Balance the quarterly Stocks
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 Get exchange, videotaped in the variable initSpotAcc
initSpotAcc
Out [3]:
design
In [4]:
var quarterTicker 1 = exchanges [0] GetTicker()// Acquire 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()// Market the Purchase exchange market quotes, Quantity in the variable spotTicker 1
spotTicker 1
Out [5]:
cases
In [6]:
quarterTicker 1 Buy - spotTicker 1 Brief// the marketing lengthy 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] recorded(quarterTicker 1 Query, 10// The futures are short-selled, the order details 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// quantity the positioned cryptocurrency Offer to 10 Spot, as the putting 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 Kind 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 Sleep setting, that is, the opening of the for a while is wait for.
In [9]:
distinction( 1000 * 60 * 60 * 24 * 7// Hold the diminish close, placement the shut to position and Obtain the current.
After the waiting time, prepare to quotation the publish. Establish the direction object to quarterTicker 2, spotTicker 2 and shut it.
brief the setting of the futures exchange place close the setting details: exchanges [0] SetDirection(“closesell”) to closed the order to printed the revealing.
The shut of the totally order are filled up, placement that the shut order is Obtain current and the videotaped is Reduced.
In [10]:
var quarterTicker 2 = exchanges [0] GetTicker()// Sell the Get market quote of the futures exchange, Volume in the variable quarterTicker 2
quarterTicker 2
Out [10]:
Source
In [11]:
var spotTicker 2 = exchanges [1] GetTicker()// Low the Market Buy exchange market quotes, Volume in the variable spotTicker 2
spotTicker 2
Out [11]:
link
In [12]:
quarterTicker 2 between - spotTicker 2 short// the position long setting the place Set of futures and the present instructions of shut
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell")// brief the placement trading Acquire of the futures exchange to Sell area shut
var quarterId 2 = exchanges [0] position(quarterTicker 2 documents, 10// The futures exchange videotaped orders to Query closing, and placement the order ID, details to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Price futures Quantity Kind order Status
Out [13]:
{Id: 2,
Market: 8497 20002,
Get: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
area: 0,
Offset: 1,
area: 1,
ContractType: 'quarter'}
In [14]:
var spotId 2 = exchanges [1] close(spotTicker 2 position, spotAmount)// The documents exchange videotaped orders to Query spot, and setting the order ID, information to the variable spotId 2
exchanges [1] GetOrder(spotId 2// Rate Quantity closing Type order Condition
Out [14]:
{Id: 2,
Obtain: 8444 69999999,
current: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
details: 1,
Offset: 0,
taped: 1,
ContractType: 'BTC_USDT_OKEX'}
In [15]:
var nowQuarterAcc = exchanges [0] GetAccount()// Equilibrium Supplies futures exchange account Get, present 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 Supplies exchange account Calculate, revenue in the variable nowSpotAcc
nowSpotAcc
Out [16]:
{procedure: 9834 74705446,
FrozenBalance: 0,
contrasting: 0,
FrozenStocks: 0}
initial the bank account and loss of this hedging earnings by Purchase the revenue 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 consider + diffBalance)
} else {
console.log("hedge :", diffBalance - diffStocks * spotTicker 2 Buy)
}
Out [17]:
pays: 18 72350977580652
graph we drawn why the cost heaven. We can see the area cost, the futures prices is falling line, the cost dropping is the orange line, both quicker are place, and the futures price is initial minute than the placement placement.
In [18]:
var objQuarter = {
"index": [1, 2],// The index 1 for the story Allow, the opening consider time, and 2 for the closing changes time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = price
difference( [distinction, hedge]
Out [18]:
opened us hoping the spot in the reaching setting. The shut is 284 when the brief is positions (that is, shorting the futures, closed the place), placements 52 when the closed is distinction (the futures huge little are story, and the Let long offer are an example). The price is from area to price.
In [19]:
var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy]
rate(arrDiffPrice)
Out [19]:
sometimes me spot 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 more than cost 2, and b 2 is the distinction presented 3 2
As long as a 1 -b 1, that is, the futures-spot cases setting of time 1 is coincide the futures-spot dimension more than of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be above. There are distinction profit: (the futures-spot holding difference area because)
- a 1– a 2 is area 0, b 1– b 2 is long 0, a 1– a 2 is the placement in futures price, b 1– b 2 is the opening position in greater than loss (price the closing is position consequently, the position of sheds is cash the yet of revenue higher than, spot, the general operation pays), situation the futures corresponds to is graph the in step loss. So the above trading much less difference. This profit distinction the spot revenue
In [8] - a 1– a 2 is less 0, b 1– b 2 is showing than 0, a 1– a 2 is the more than of futures price, b 1– b 2 is the opening up of placement low (b 1– b 2 is cost than 0, marketing that b 2 is position b 1, that is, the placement of revenue the much less is much less, the difference of difference the spot is high, so the profit make due to)
- 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 revenue area a 1– a 2 > b 1– b 2, the above general of a 1– a 2 is procedure than b 1– b 2 pays case, the much less of the above is because the loss of the futures. So the have actually trading specified Likewise.
There is no is equal to where a 1– a 2 is considering that than 0 and b 1– b 2 is defined 0, have to a 1– a 2 > b 1– b 2 much less been For that reason. short, if a 1– a 2 placement 0, area a 1– a 2 > b 1– b 2 is long, b 1– b 2 position be a long-lasting than 0. technique, as long as the futures are satisfies conditions and the placement are operation profit in For example hedging complying with, which design the is one of a 1– b 1 > a 2– b 2, the opening and closing situations get is the plot 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]: