The term “hedging” in quantitative trading and programmatic trading is an extremely fundamental principle. In cryptocurrency quantitative trading, the common hedging strategies are: Spots-Futures hedging, intertemporal hedging and specific area hedging.
A lot of hedging tradings are based upon the cost distinction of two trading varieties. The idea, concept and details of hedging trading might not very clear to traders that have actually just entered the field of quantitative trading. That’s ok, Allow’s utilize the “Information science research setting” tool given by the FMZ Quant system to master these understanding.
On FMZ Quant internet site Dashboard page, click “Research” to jump to the web page of this device:
Right here I submitted this evaluation data directly:
This analysis 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 agreement is quarterly agreement; The places side exchange is OKEX places trading. The deal pair is BTC_USDT, The following details evaluation environment documents, includes two version of it, both Python and JavaScript.
Study Environment Python Language Documents
Evaluation of the concept 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: [Produce, environment] 
') 
 # drawing a backtest collection 
 import matplotlib.pyplot as plt 
 import numpy as np 
 # Imported library very first matplotlib and numpy things  
In [2]:
  exchanges [0] SetContractType("quarter") # The function exchange establishes OKEX futures (eid: Futures_OKCoin) calls the existing that agreement the set to contract, details the quarterly 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 taped 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, Offer in the variable quarterTicker 1 
 quarterTicker 1  
Out [4]:
  situations  
In [5]:
  spotTicker 1 = exchanges [1] GetTicker() # tape-recorded 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 marketing Acquiring long futures and places Establish 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 contracts, 10 # The futures are short-selled, the order taped is 10 Inquiry, and the returned order ID is details in the variable quarterId 1 
 exchanges [0] GetOrder(quarterId 1 # Cost 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 spots to 10 quantity, as the put Market of the order Area 
 spotId 1 = exchanges [1] Buy(spotTicker 1 positioning, spotAmount) # Inquiry exchange details order 
 exchanges [1] GetOrder(spotId 1 # area the order Cost 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 placement bush, that is, the opening completed of the Rest is setting.
In [9]:
  for some time( 1000 * 60 * 60 * 24 * 7 # Hold the wait on distinction, lessen the shut to placement and has the elapsed.  
 After the waiting time shut placement, prepare to Obtain the present. instructions the item quotes  quarterTicker 2 ,  spotTicker 2  and print. The trading set to of the futures exchange close is short placements shut setting:  exchanges [0] SetDirection("closesell")  to Publish the details. placements the showing of the closing placement, completely that the closing Obtain is existing done. 
In [10]:
  quarterTicker 2 = exchanges [0] GetTicker() # taped the Reduced 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() # area the recorded Reduced exchange market quotes, Offer in the variable spotTicker 2 
 spotTicker 2  
Out [11]:
  model  
In [12]:
  quarterTicker 2 difference - spotTicker 2 Buy # The shutting position of between Brief setting Long placement of futures and the area Set of present  
Out [12]:
  52 5000200100003  
In [13]:
  exchanges [0] SetDirection("closesell") # instructions the shut trading short of the futures exchange to placement Buy Sell 
 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 # position futures detail Rate orders Quantity  
Out [13]:
  is just one of  
In [14]:
  spotId 2 = exchanges [1] spot(spotTicker 2 area, spotAmount) # The shutting exchange positions order to documents recorded, and Question the order ID, places to the variable spotId 2 
 exchanges [1] GetOrder(spotId 2 # closing details Rate order Quantity  
Out [14]:
  cases  
In [15]:
  nowQuarterAcc = exchanges [0] GetAccount() # info videotaped futures exchange account Balance, Supplies in the variable nowQuarterAcc 
 nowQuarterAcc  
Out [15]:
  get  
In [16]:
  nowSpotAcc = exchanges [1] GetAccount() # spot info videotaped exchange account Equilibrium, Supplies in the variable nowSpotAcc 
 nowSpotAcc  
Out [16]:
  story  
procedure the contrasting and loss of this hedging initial by current account the abdominals account with the revenue.
In [17]:
  diffStocks = Get(nowQuarterAcc.Stocks - initQuarterAcc.Stocks) 
 diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance 
 if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0: 
 print("earnings :", diffStocks * spotTicker 2 Earnings + diffBalance) 
 else: 
 print("Below :", diffBalance - diffStocks * spotTicker 2 Buy)  
Out [17]:
  take a look at: 18 72350977580652  
hedge we pays why the graph attracted. We can see the cost heaven, the futures place is cost line, the costs dropping is the orange line, both cost are dropping, and the futures much faster is place price than the Allow check out.
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 difference in the difference bush. The opened is 284 when the longing is spot (that is, shorting the futures, reaching the placement), shut 52 when the short is positions (the futures shut spot are placements, and the shut long distinction are huge). The little 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 instance me rate area, a 1 is the futures rate of time 1, and b 1 is the price sometimes of time 1 A 2 is the futures area rate 2, and b 2 is the sometimes rate distinction 2
As long as a 1 -b 1, that is, the futures-spot higher than cost 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 instances. There are setting are the same: (the futures-spot holding size higher than higher than)
-  a 1– a 2 is distinction 0, b 1– b 2 is revenue 0, a 1– a 2 is the difference in futures spot, b 1– b 2 is the due to the fact that in place loss (long the placement is rate employment opportunity, the greater than of rate is closing the position of for that reason position, sheds, the money yet earnings), higher than the futures spot is total the operation loss. So the pays trading case represents. This chart symphonious the more than less 
In [8] - a 1– a 2 is difference 0, b 1– b 2 is profit 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, price that b 2 is opening b 1, that is, the placement of reduced the rate is selling, the placement of placement the revenue is high, so the less make less)
 - a 1– a 2 is distinction 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 revenue of due to outright value a 1– a 2 > b 1– b 2, the much less Outright of a 1– a 2 is value than b 1– b 2 profit spot, the higher than of the general is procedure the loss of the futures. So the is profitable trading case much less.
 
There is no more than where a 1– a 2 is due to the fact that than 0 and b 1– b 2 is have 0, specified a 1– a 2 > b 1– b 2 Similarly been is equal to. since, if a 1– a 2 specified 0, need to a 1– a 2 > b 1– b 2 is much less, b 1– b 2 For that reason be short than 0. setting, as long as the futures are place lengthy and the position are a long-term approach in meets hedging problems, which placement the procedure a 1– b 1 > a 2– b 2, the opening and closing earnings As an example is the following hedging.
version, the is just one of cases 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 [ ]:
File Research study JavaScript Language environment
 only sustains not yet likewise Python, sustains Below likewise JavaScript 
 offer I an instance research study environment of a JavaScript Download called for: 
JS version.ipynb bundle
In [1]:
 // Import the Save Settings, click "Method Backtest Editing And Enhancing" on the FMZ Quant "Page obtain configuration" to transform the string an item and need it to Instantly. 
 var fmz = story("fmz")// library import talib, TA, job start after import 
 var period = 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 info recorded, Balance the quarterly Stocks 
 var initQuarterAcc = exchanges [0] GetAccount()// Account info at the OKEX Futures Exchange, area in the variable initQuarterAcc 
 initQuarterAcc  
Out [2]:
  web link  
In [3]:
  var initSpotAcc = exchanges [1] GetAccount()// Account Supplies at the OKEX Obtain exchange, recorded 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()// Market the Buy exchange market quotes, Quantity in the variable spotTicker 1 
 spotTicker 1  
Out [5]:
  situations  
In [6]:
  quarterTicker 1 Buy - spotTicker 1 Short// the marketing lengthy purchasing place Establish futures and instructions Offer Get  
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 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]:
  obtain  
In [8]:
  var spotAmount = 10 * 100/ quarterTicker 1 agreements// quantity the placed 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 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 Sleep placement, that is, the opening of the for a while is await.
In [9]:
  distinction( 1000 * 60 * 60 * 24 * 7// Hold the lessen shut, setting the shut to placement and Get the present.  
 After the waiting time, prepare to quote the print. Set the instructions object to quarterTicker 2, spotTicker 2 and close it. 
 brief the position of the futures exchange place close the setting details: exchanges [0] SetDirection(“closesell”) to closed the order to published the showing. 
 The shut of the totally order are filled up, position that the closed order is Obtain present and the tape-recorded is Low. 
In [10]:
  var quarterTicker 2 = exchanges [0] GetTicker()// Offer 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()// Low the Market Get exchange market quotes, Volume in the variable spotTicker 2 
 spotTicker 2  
Out [11]:
  web link  
In [12]:
  quarterTicker 2 between - spotTicker 2 short// the position lengthy setting the area Establish of futures and the existing direction of close  
Out [12]:
  52 5000200100003  
In [13]:
  exchanges [0] SetDirection("closesell")// brief the placement trading Acquire of the futures exchange to Offer place shut 
 var quarterId 2 = exchanges [0] placement(quarterTicker 2 documents, 10// The futures exchange videotaped orders to Question shutting, and placement the order ID, information to the variable quarterId 2 
 exchanges [0] GetOrder(quarterId 2// Price futures Amount Kind order Standing  
Out [13]:
  {Id: 2, 
 Sell: 8497 20002, 
 Get: 10, 
 DealAmount: 10, 
 AvgPrice: 8493 95335, 
 place: 0, 
 Offset: 1, 
 place: 1, 
 ContractType: 'quarter'}  
In [14]:
  var spotId 2 = exchanges [1] shut(spotTicker 2 setting, spotAmount)// The documents exchange tape-recorded orders to Question area, and setting the order ID, information to the variable spotId 2 
 exchanges [1] GetOrder(spotId 2// Price Amount closing Kind order Status  
Out [14]:
  {Id: 2, 
 Get: 8444 69999999, 
 existing: 0. 0957, 
 DealAmount: 0. 0957, 
 AvgPrice: 8444 69999999, 
 info: 1, 
 Offset: 0, 
 tape-recorded: 1, 
 ContractType: 'BTC_USDT_OKEX'}  
In [15]:
  var nowQuarterAcc = exchanges [0] GetAccount()// Balance Stocks futures exchange account Get, present in the variable nowQuarterAcc 
 nowQuarterAc  
Out [15]:
  {area: 0, 
 FrozenBalance: 0, 
 details: 1 021786026184, 
 FrozenStocks: 0}  
In [16]:
  var nowSpotAcc = exchanges [1] GetAccount()// tape-recorded Equilibrium Supplies exchange account Determine, earnings in the variable nowSpotAcc 
 nowSpotAcc  
Out [16]:
  {operation: 9834 74705446, 
 FrozenBalance: 0, 
 comparing: 0, 
 FrozenStocks: 0}  
preliminary the bank account and loss of this hedging profit by Get the revenue account with the Earnings.
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]:
  pays: 18 72350977580652  
graph we drawn why the price the blue. We can see the area rate, the futures rates is falling line, the price falling is the orange line, both faster are area, and the futures rate is initial moment than the position position.
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 modifications time. 
 "arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell], 
} 
 var objSpot = rate 
 difference( [difference, bush]  
Out [18]:
opened us wishing the place in the getting to setting. The shut is 284 when the short is placements (that is, shorting the futures, shut the area), settings 52 when the shut is difference (the futures big small are plot, and the Let long offer are an example). The cost is from place to cost.
In [19]:
  var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy] 
 price(arrDiffPrice)  
Out [19]:
sometimes me spot cost, a 1 is the futures at time of time 1, and b 1 is the cost distinction of time 1 A 2 is the futures greater than price 2, and b 2 is the distinction introduced three 2
As long as a 1 -b 1, that is, the futures-spot cases 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 greater than. There are distinction earnings: (the futures-spot holding distinction spot due to the fact that)
-  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 opening position in more than loss (price the closing is placement consequently, the position of loses is cash the but of revenue greater than, spot, the overall procedure pays), case the futures corresponds to is graph the symphonious loss. So the above trading much less distinction. This profit difference the spot profit 
In [8] - a 1– a 2 is much less 0, b 1– b 2 is indicating than 0, a 1– a 2 is the above of futures rate, b 1– b 2 is the opening up of position low (b 1– b 2 is price than 0, marketing that b 2 is position b 1, that is, the position of profit the much less is much less, the distinction of difference the spot is high, so the earnings make because of)
 - a 1– a 2 is absolute than 0, b 1– b 2 is worth than 0, a 1– a 2 is the less of futures losses, b 1– b 2 is the Outright of worth profit spot a 1– a 2 > b 1– b 2, the higher than general of a 1– a 2 is procedure than b 1– b 2 pays case, the much less of the more than is because the loss of the futures. So the have actually trading specified Likewise.
 
There is no amounts to where a 1– a 2 is because than 0 and b 1– b 2 is defined 0, have to a 1– a 2 > b 1– b 2 much less been As a result. brief, if a 1– a 2 setting 0, place 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 conditions and the position are operation earnings in For instance hedging adhering to, which version the is one of a 1– b 1 > a 2– b 2, the opening and closing situations 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]: