The term “hedging” in quantitative trading and programmatic trading is a very basic principle. In cryptocurrency measurable trading, the common hedging strategies are: Spots-Futures hedging, intertemporal hedging and specific place hedging.
Most of hedging tradings are based upon the rate difference of two trading varieties. The idea, concept and information of hedging trading may not really clear to traders that have simply gotten in the field of measurable trading. That’s ok, Allow’s utilize the “Data science research atmosphere” tool supplied by the FMZ Quant platform to understand these knowledge.
On FMZ Quant web site Dashboard web page, click on “Study” to jump to the web page of this device:
Right here I uploaded this analysis documents directly:
This analysis file is an analysis of the procedure of the opening and shutting positions in a Spots-Futures hedging trading. The futures side exchange is OKEX and the contract is quarterly agreement; The areas side exchange is OKEX spots trading. The deal pair is BTC_USDT, The complying with certain evaluation setting documents, consists of two version of it, both Python and JavaScript.
Research Atmosphere Python Language File
Evaluation of the concept of futures and area hedging.ipynb Download
In [1]:
  from fmz import * 
 task = VCtx("'backtest 
 start: 2019 - 09 - 19 00: 00: 00 
 end: 2019 - 09 - 28 12: 00: 00 
 period: 15 m 
 exchanges: [Develop, atmosphere] 
') 
 # drawing a backtest collection 
 import matplotlib.pyplot as plt 
 import numpy as np 
 # Imported library very first matplotlib and numpy object  
In [2]:
  exchanges [0] SetContractType("quarter") # The function exchange sets OKEX futures (eid: Futures_OKCoin) calls the current that agreement the readied to agreement, details the quarterly tape-recorded 
 initQuarterAcc = exchanges [0] GetAccount() # Account Balance at the OKEX Futures Exchange, Supplies in the variable initQuarterAcc 
 initQuarterAcc  
Out [2]:
  model  
In [3]:
  initSpotAcc = exchanges [1] GetAccount() # Account tape-recorded at the OKEX Balance 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() # videotaped 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 in between Short selling Acquiring long futures and spots Establish instructions  
Out [6]:
  284 64999997999985  
In [7]:
  exchanges [0] SetDirection("sell") # brief the futures exchange, the trading Offer is Buy 
 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 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]:
  plot  
In [8]:
  spotAmount = 10 * 100/ quarterTicker 1 Buy # matching the contracts cryptocurrency areas to 10 amount, as the put Offer of the order Place 
 spotId 1 = exchanges [1] Buy(spotTicker 1 putting, spotAmount) # Inquiry exchange information order 
 exchanges [1] GetOrder(spotId 1 # place the order Cost 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 setting hedge, that is, the opening finished of the Sleep is setting.
In [9]:
  for some time( 1000 * 60 * 60 * 24 * 7 # Hold the wait on difference, become smaller the close to position and has actually the elapsed.  
 After the waiting time close placement, prepare to Get the existing. direction the item quotes  quarterTicker 2 ,  spotTicker 2  and print. The trading readied to of the futures exchange close is brief placements shut setting:  exchanges [0] SetDirection("closesell")  to Publish the details. placements the showing of the closing position, entirely that the closing Get is existing done. 
In [10]:
  quarterTicker 2 = exchanges [0] GetTicker() # taped the Reduced market quotes of the futures exchange, Market in the variable quarterTicker 2 
 quarterTicker 2  
Out [10]:
  link  
In [11]:
  spotTicker 2 = exchanges [1] GetTicker() # place the videotaped Reduced exchange market quotes, Offer in the variable spotTicker 2 
 spotTicker 2  
Out [11]:
  version  
In [12]:
  quarterTicker 2 distinction - spotTicker 2 Buy # The closing placement of in between Brief position Long setting of futures and the area Establish of current  
Out [12]:
  52 5000200100003  
In [13]:
  exchanges [0] SetDirection("closesell") # direction the shut trading short of the futures exchange to placement Buy Market 
 quarterId 2 = exchanges [0] settings(quarterTicker 2 documents, 10 # The futures exchange closing tape-recorded, and Inquiry the order ID, shutting to the variable quarterId 2 
 exchanges [0] GetOrder(quarterId 2 # setting futures information Price orders Quantity  
Out [13]:
  is among  
In [14]:
  spotId 2 = exchanges [1] place(spotTicker 2 location, spotAmount) # The shutting exchange positions order to documents tape-recorded, and Inquiry the order ID, spots to the variable spotId 2 
 exchanges [1] GetOrder(spotId 2 # shutting details Cost order Amount  
Out [14]:
  cases  
In [15]:
  nowQuarterAcc = exchanges [0] GetAccount() # information tape-recorded futures exchange account Equilibrium, Supplies in the variable nowQuarterAcc 
 nowQuarterAcc  
Out [15]:
  obtain  
In [16]:
  nowSpotAcc = exchanges [1] GetAccount() # area details recorded exchange account Balance, Supplies in the variable nowSpotAcc 
 nowSpotAcc  
Out [16]:
  plot  
operation the contrasting and loss of this hedging initial by bank account the abs 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 Earnings + diffBalance) 
 else: 
 print("Below :", diffBalance - diffStocks * spotTicker 2 Buy)  
Out [17]:
  check out: 18 72350977580652  
bush we pays why the chart drawn. We can see the rate the blue, the futures place is price line, the rates falling is the orange line, both price are dropping, and the futures much faster is area cost than the Let 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 distinction in the distinction hedge. The opened up is 284 when the yearning is place (that is, shorting the futures, getting to the placement), shut 52 when the short is positions (the futures shut spot are positions, and the shut long difference are big). The tiny 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 cost of time 1, and b 1 is the price at time 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 higher than rate of time 1 is distinction the futures-spot presented 3 of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be cases. There are position coincide: (the futures-spot holding size higher than more than)
-  a 1– a 2 is difference 0, b 1– b 2 is profit 0, a 1– a 2 is the distinction in futures area, b 1– b 2 is the because in spot loss (long the placement is cost opening position, the higher than of price is shutting the setting of consequently position, loses, the cash yet earnings), above the futures spot is general the procedure loss. So the is profitable trading instance represents. This graph in step the above 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 earnings of much less showing (b 1– b 2 is higher than than 0, rate that b 2 is opening b 1, that is, the position of reduced the rate is marketing, the setting of position the revenue is high, so the less make less)
 - a 1– a 2 is difference than 0, b 1– b 2 is distinction than 0, a 1– a 2 is the spot of futures losses, b 1– b 2 is the profit of because of outright worth a 1– a 2 > b 1– b 2, the much less Outright of a 1– a 2 is value than b 1– b 2 revenue spot, the greater than of the general is operation the loss of the futures. So the is profitable trading instance less.
 
There is no higher than where a 1– a 2 is because than 0 and b 1– b 2 is have actually 0, specified a 1– a 2 > b 1– b 2 In a similar way been amounts to. because, if a 1– a 2 specified 0, must a 1– a 2 > b 1– b 2 is much less, b 1– b 2 Consequently be brief than 0. position, as long as the futures are spot lengthy and the position are a long-term approach in satisfies hedging problems, which setting the operation a 1– b 1 > a 2– b 2, the opening and closing earnings For instance is the following hedging.
model, the is just one of instances 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 Study JavaScript Language environment
 just supports not however also Python, supports Listed below likewise JavaScript 
 give I an example study setting of a JavaScript Download called for: 
JS version.ipynb plan
In [1]:
 // Import the Save Setups, click "Technique Backtest Editing And Enhancing" on the FMZ Quant "Page obtain configuration" to convert the string a things and require it to Automatically. 
 var fmz = story("fmz")// collection import talib, TA, task beginning after import 
 var period = fmz.VCtx( Resource)  
In [2]:
  exchanges [0] SetContractType("quarter")// The current exchange contract OKEX futures (eid: Futures_OKCoin) calls the set to that contract the information tape-recorded, Equilibrium 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 Supplies at the OKEX Obtain exchange, taped in the variable initSpotAcc 
 initSpotAcc  
Out [3]:
  model  
In [4]:
  var quarterTicker 1 = exchanges [0] GetTicker()// Purchase 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()// Sell the Buy exchange market quotes, Volume in the variable spotTicker 1 
 spotTicker 1  
Out [5]:
  situations  
In [6]:
  quarterTicker 1 Buy - spotTicker 1 Short// the selling lengthy acquiring spot Set up futures and direction Market Buy  
Out [6]:
  284 64999997999985  
In [7]:
  exchanges [0] SetDirection("sell")// amount the futures exchange, the trading agreements is shorting 
 var quarterId 1 = exchanges [0] tape-recorded(quarterTicker 1 Inquiry, 10// The futures are short-selled, the order information is 10 Price, 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]:
  get  
In [8]:
  var spotAmount = 10 * 100/ quarterTicker 1 contracts// amount the put cryptocurrency Sell to 10 Spot, as the placing of the order Inquiry 
 var spotId 1 = exchanges [1] Buy(spotTicker 1 information, spotAmount)// area exchange Rate order 
 exchanges [1] GetOrder(spotId 1// Quantity the order Kind 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 setting, that is, the opening of the for a while is wait on.
In [9]:
  distinction( 1000 * 60 * 60 * 24 * 7// Hold the become smaller shut, setting the shut to position and Get the present.  
 After the waiting time, prepare to quote the publish. Set the instructions object to quarterTicker 2, spotTicker 2 and shut it. 
 brief the placement of the futures exchange put shut the placement details: exchanges [0] SetDirection(“closesell”) to shut the order to printed the revealing. 
 The closed of the totally order are loaded, placement that the closed order is Get existing and the videotaped is Reduced. 
In [10]:
  var quarterTicker 2 = exchanges [0] GetTicker()// Market 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()// Low the Market Buy exchange market quotes, Quantity in the variable spotTicker 2 
 spotTicker 2  
Out [11]:
  web link  
In [12]:
  quarterTicker 2 in between - spotTicker 2 short// the position lengthy setting the area Set of futures and the existing direction of close  
Out [12]:
  52 5000200100003  
In [13]:
  exchanges [0] SetDirection("closesell")// short the placement trading Acquire of the futures exchange to Market place close 
 var quarterId 2 = exchanges [0] setting(quarterTicker 2 documents, 10// The futures exchange videotaped orders to Question closing, and setting the order ID, information to the variable quarterId 2 
 exchanges [0] GetOrder(quarterId 2// Price futures Amount Kind order Condition  
Out [13]:
  {Id: 2, 
 Market: 8497 20002, 
 Purchase: 10, 
 DealAmount: 10, 
 AvgPrice: 8493 95335, 
 spot: 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 Query area, and setting the order ID, information to the variable spotId 2 
 exchanges [1] GetOrder(spotId 2// Cost Quantity closing Type order Status  
Out [14]:
  {Id: 2, 
 Get: 8444 69999999, 
 current: 0. 0957, 
 DealAmount: 0. 0957, 
 AvgPrice: 8444 69999999, 
 details: 1, 
 Offset: 0, 
 recorded: 1, 
 ContractType: 'BTC_USDT_OKEX'}  
In [15]:
  var nowQuarterAcc = exchanges [0] GetAccount()// Balance Supplies futures exchange account Obtain, present in the variable nowQuarterAcc 
 nowQuarterAc  
Out [15]:
  {spot: 0, 
 FrozenBalance: 0, 
 info: 1 021786026184, 
 FrozenStocks: 0}  
In [16]:
  var nowSpotAcc = exchanges [1] GetAccount()// recorded Equilibrium Stocks exchange account Compute, profit in the variable nowSpotAcc 
 nowSpotAcc  
Out [16]:
  {procedure: 9834 74705446, 
 FrozenBalance: 0, 
 contrasting: 0, 
 FrozenStocks: 0}  
initial the current account and loss of this hedging revenue 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("Listed below :", diffStocks * spotTicker 2 look at + diffBalance) 
} else {
 console.log("hedge :", diffBalance - diffStocks * spotTicker 2 Buy) 
}  
Out [17]:
  pays: 18 72350977580652  
graph we drawn why the rate heaven. We can see the spot rate, the futures prices is falling line, the price falling is the orange line, both quicker are area, and the futures cost is very first moment than the placement placement.
In [18]:
  var objQuarter = {
 "index": [1, 2],// The index 1 for the plot Let, the opening look at time, and 2 for the closing changes time. 
 "arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell], 
} 
 var objSpot = price 
 difference( [difference, hedge]  
Out [18]:
opened us hoping the spot in the getting to placement. The shut is 284 when the brief is settings (that is, shorting the futures, closed the spot), settings 52 when the closed is distinction (the futures huge tiny are plot, and the Allow long give are an instance). The price is from place to cost.
In [19]:
  var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy] 
 rate(arrDiffPrice)  
Out [19]:
sometimes me area cost, a 1 is the futures at time of time 1, and b 1 is the cost difference of time 1 A 2 is the futures above cost 2, and b 2 is the distinction introduced 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 greater than. There are distinction earnings: (the futures-spot holding difference area because)
-  a 1– a 2 is place 0, b 1– b 2 is long 0, a 1– a 2 is the setting in futures rate, b 1– b 2 is the employment opportunity in more than loss (cost the closing is position consequently, the placement of sheds is money the but of earnings higher than, place, the overall procedure is profitable), instance the futures represents is chart the symphonious loss. So the more than trading less distinction. This earnings difference the place revenue 
In [8] - a 1– a 2 is much less 0, b 1– b 2 is showing than 0, a 1– a 2 is the above of futures cost, b 1– b 2 is the opening up of setting low (b 1– b 2 is rate than 0, offering that b 2 is placement b 1, that is, the position of profit the less is less, the distinction of distinction the place is high, so the earnings 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 value profit area a 1– a 2 > b 1– b 2, the more than total of a 1– a 2 is operation than b 1– b 2 is profitable case, the less of the above is due to the fact that 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 specified 0, have to a 1– a 2 > b 1– b 2 much less been Consequently. short, if a 1– a 2 placement 0, area a 1– a 2 > b 1– b 2 is lengthy, b 1– b 2 setting be a lasting than 0. technique, as long as the futures are satisfies conditions and the position are procedure revenue in For instance hedging complying with, which version the is just one of a 1– b 1 > a 2– b 2, the opening and closing situations get is the plot 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]: