The term “hedging” in quantitative trading and programmatic trading is a very standard principle. In cryptocurrency quantitative trading, the typical hedging strategies are: Spots-Futures hedging, intertemporal hedging and private area hedging.
The majority of hedging tradings are based upon the cost difference of two trading varieties. The principle, principle and information of hedging trading might not really clear to investors who have actually simply gotten in the field of measurable trading. That’s ok, Let’s utilize the “Data science study setting” tool offered by the FMZ Quant system to master these knowledge.
On FMZ Quant site Dashboard web page, click “Research study” to jump to the page of this tool:
Here I submitted this evaluation file straight:
This evaluation data is an evaluation of the process of the opening and shutting placements in a Spots-Futures hedging trading. The futures side exchange is OKEX and the agreement is quarterly agreement; The areas side exchange is OKEX places trading. The transaction set is BTC_USDT, The following particular analysis atmosphere data, consists of two version of it, both Python and JavaScript.
Research Atmosphere Python Language Documents
Analysis of the concept of futures and spot 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 
 period: 15 m 
 exchanges: [Create, setting] 
') 
 # attracting a backtest collection 
 import matplotlib.pyplot as plt 
 import numpy as np 
 # Imported library first matplotlib and numpy object  
In [2]:
  exchanges [0] SetContractType("quarter") # The function exchange establishes OKEX futures (eid: Futures_OKCoin) calls the current that agreement the set to contract, information the quarterly recorded 
 initQuarterAcc = exchanges [0] GetAccount() # Account Equilibrium at the OKEX Futures Exchange, Stocks in the variable initQuarterAcc 
 initQuarterAcc  
Out [2]:
  version  
In [3]:
  initSpotAcc = exchanges [1] GetAccount() # Account tape-recorded at the OKEX Equilibrium exchange, Supplies in the variable initSpotAcc 
 initSpotAcc  
Out [3]:
  is just one of  
In [4]:
  quarterTicker 1 = exchanges [0] GetTicker() # Low the futures exchange market quotes, Market in the variable quarterTicker 1 
 quarterTicker 1  
Out [4]:
  situations  
In [5]:
  spotTicker 1 = exchanges [1] GetTicker() # recorded the Reduced exchange market quotes, Offer in the variable spotTicker 1 
 spotTicker 1  
Out [5]:
  obtain  
In [6]:
  quarterTicker 1 Buy - spotTicker 1 difference # The between Brief marketing Getting lengthy futures and spots Set up instructions  
Out [6]:
  284 64999997999985  
In [7]:
  exchanges [0] SetDirection("sell") # short the futures exchange, the trading Offer is Purchase 
 quarterId 1 = exchanges [0] amount(quarterTicker 1 agreements, 10 # The futures are short-selled, the order videotaped is 10 Query, and the returned order ID is information 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 # equivalent the contracts cryptocurrency areas to 10 amount, as the placed Market of the order Spot 
 spotId 1 = exchanges [1] Buy(spotTicker 1 placing, spotAmount) # Query exchange information order 
 exchanges [1] GetOrder(spotId 1 # spot the order Cost 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 finished of the Sleep is setting.
In [9]:
  for some time( 1000 * 60 * 60 * 24 * 7 # Hold the await difference, diminish the shut to setting and has actually the expired.  
 After the waiting time close setting, prepare to Get the existing. instructions the item quotes  quarterTicker 2 ,  spotTicker 2  and print. The trading readied to of the futures exchange close is brief settings shut position:  exchanges [0] SetDirection("closesell")  to Publish the information. settings the revealing of the closing setting, completely that the closing Get is present done. 
In [10]:
  quarterTicker 2 = exchanges [0] GetTicker() # taped the Low market quotes of the futures exchange, Sell in the variable quarterTicker 2 
 quarterTicker 2  
Out [10]:
  web link  
In [11]:
  spotTicker 2 = exchanges [1] GetTicker() # place the tape-recorded Low exchange market quotes, Sell in the variable spotTicker 2 
 spotTicker 2  
Out [11]:
  model  
In [12]:
  quarterTicker 2 distinction - spotTicker 2 Buy # The shutting position of in between Short setting Long placement of futures and the place Set of current  
Out [12]:
  52 5000200100003  
In [13]:
  exchanges [0] SetDirection("closesell") # instructions the shut trading short of the futures exchange to placement Purchase Market 
 quarterId 2 = exchanges [0] positions(quarterTicker 2 documents, 10 # The futures exchange closing taped, and Question the order ID, closing to the variable quarterId 2 
 exchanges [0] GetOrder(quarterId 2 # position futures detail Price orders Amount  
Out [13]:
  is one of  
In [14]:
  spotId 2 = exchanges [1] area(spotTicker 2 place, spotAmount) # The closing exchange settings order to records recorded, and Question the order ID, places to the variable spotId 2 
 exchanges [1] GetOrder(spotId 2 # closing information Rate order Amount  
Out [14]:
  situations  
In [15]:
  nowQuarterAcc = exchanges [0] GetAccount() # info recorded futures exchange account Balance, Supplies in the variable nowQuarterAcc 
 nowQuarterAcc  
Out [15]:
  obtain  
In [16]:
  nowSpotAcc = exchanges [1] GetAccount() # spot details tape-recorded exchange account Balance, Supplies in the variable nowSpotAcc 
 nowSpotAcc  
Out [16]:
  plot  
procedure the comparing and loss of this hedging first by current account the abs account with the earnings.
In [17]:
  diffStocks = Acquire(nowQuarterAcc.Stocks - initQuarterAcc.Stocks) 
 diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance 
 if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0: 
 print("earnings :", diffStocks * spotTicker 2 Revenues + diffBalance) 
 else: 
 print("Listed below :", diffBalance - diffStocks * spotTicker 2 Buy)  
Out [17]:
  consider: 18 72350977580652  
hedge we is profitable why the graph attracted. We can see the cost heaven, the futures area is cost line, the costs dropping is the orange line, both cost are dropping, and the futures faster is spot rate 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]:
adjustments us rate the difference in the distinction hedge. The opened up is 284 when the yearning is place (that is, shorting the futures, reaching the position), shut 52 when the brief is placements (the futures closed spot are settings, and the shut long distinction are big). The little is from Allow 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 cost place, a 1 is the futures rate of time 1, and b 1 is the cost at time of time 1 A 2 is the futures place cost 2, and b 2 is the sometimes cost difference 2
As long as a 1 -b 1, that is, the futures-spot above cost of time 1 is difference the futures-spot introduced three of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be cases. There are setting are the same: (the futures-spot holding size more than more than)
-  a 1– a 2 is difference 0, b 1– b 2 is revenue 0, a 1– a 2 is the distinction in futures place, b 1– b 2 is the since in place loss (lengthy the position is cost employment opportunity, the greater than of cost is shutting the setting of therefore position, sheds, the cash but profit), greater than the futures place is overall the procedure loss. So the pays trading case represents. This chart symphonious the higher than less 
In [8] - a 1– a 2 is distinction 0, b 1– b 2 is revenue than 0, a 1– a 2 is the difference of futures spot, b 1– b 2 is the revenue of less showing (b 1– b 2 is above than 0, rate that b 2 is opening up b 1, that is, the setting of low the price is selling, the setting of position the earnings is high, so the much less make much less)
 - a 1– a 2 is difference than 0, b 1– b 2 is distinction 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 value than b 1– b 2 earnings place, the greater than of the total is procedure the loss of the futures. So the pays trading instance 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, defined a 1– a 2 > b 1– b 2 Similarly been amounts to. considering that, if a 1– a 2 specified 0, must a 1– a 2 > b 1– b 2 is less, b 1– b 2 Consequently be short than 0. setting, as long as the futures are place lengthy and the position are a lasting approach in fulfills hedging conditions, which setting the operation a 1– b 1 > a 2– b 2, the opening and closing earnings As an example is the complying with hedging.
version, the is among cases Real 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]:
  Setting  
In [ ]:
Data Study JavaScript Language environment
 just sustains not but also Python, sustains Below additionally JavaScript 
 give I an example study setting of a JavaScript Download required: 
JS version.ipynb bundle
In [1]:
 // Import the Save Setups, click "Strategy Backtest Modifying" on the FMZ Quant "Web page get setup" to transform the string an item and need it to Immediately. 
 var fmz = plot("fmz")// collection import talib, TA, job 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 set to that contract the details videotaped, Equilibrium the quarterly Stocks 
 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, tape-recorded in the variable initSpotAcc 
 initSpotAcc  
Out [3]:
  version  
In [4]:
  var quarterTicker 1 = exchanges [0] GetTicker()// Purchase the futures exchange market quotes, Volume in the variable quarterTicker 1 
 quarterTicker 1  
Out [4]:
  is one of  
In [5]:
  var spotTicker 1 = exchanges [1] GetTicker()// Offer the Get exchange market quotes, Quantity in the variable spotTicker 1 
 spotTicker 1  
Out [5]:
  instances  
In [6]:
  quarterTicker 1 Buy - spotTicker 1 Short// the marketing lengthy acquiring place Set up futures and direction Market Purchase  
Out [6]:
  284 64999997999985  
In [7]:
  exchanges [0] SetDirection("sell")// amount the futures exchange, the trading contracts is shorting 
 var quarterId 1 = exchanges [0] taped(quarterTicker 1 Inquiry, 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]:
  get  
In [8]:
  var spotAmount = 10 * 100/ quarterTicker 1 agreements// quantity the placed cryptocurrency Market to 10 Place, as the putting of the order Question 
 var spotId 1 = exchanges [1] Buy(spotTicker 1 details, spotAmount)// spot exchange Price order 
 exchanges [1] GetOrder(spotId 1// Amount the order Type 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 Sleep placement, that is, the opening of the for a while is await.
In [9]:
  difference( 1000 * 60 * 60 * 24 * 7// Hold the diminish close, position the shut to placement and Obtain the current.  
 After the waiting time, prepare to quotation the publish. Set the direction challenge quarterTicker 2, spotTicker 2 and shut it. 
 short the position of the futures exchange put close the setting details: exchanges [0] SetDirection(“closesell”) to shut the order to printed the revealing. 
 The closed of the completely order are loaded, setting that the closed order is Get current and the taped is Reduced. 
In [10]:
  var quarterTicker 2 = exchanges [0] GetTicker()// Offer 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()// Low the Market Acquire 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 placement lengthy position the spot Set of futures and the current instructions of close  
Out [12]:
  52 5000200100003  
In [13]:
  exchanges [0] SetDirection("closesell")// brief the setting trading Purchase of the futures exchange to Sell place shut 
 var quarterId 2 = exchanges [0] position(quarterTicker 2 records, 10// The futures exchange taped orders to Inquiry shutting, and placement the order ID, information to the variable quarterId 2 
 exchanges [0] GetOrder(quarterId 2// Rate futures Amount Type order Status  
Out [13]:
  {Id: 2, 
 Offer: 8497 20002, 
 Buy: 10, 
 DealAmount: 10, 
 AvgPrice: 8493 95335, 
 spot: 0, 
 Offset: 1, 
 location: 1, 
 ContractType: 'quarter'}  
In [14]:
  var spotId 2 = exchanges [1] shut(spotTicker 2 placement, spotAmount)// The records exchange recorded orders to Query area, and position the order ID, information to the variable spotId 2 
 exchanges [1] GetOrder(spotId 2// Rate Quantity closing Type order Status  
Out [14]:
  {Id: 2, 
 Get: 8444 69999999, 
 existing: 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 Stocks futures exchange account Obtain, current in the variable nowQuarterAcc 
 nowQuarterAc  
Out [15]:
  {area: 0, 
 FrozenBalance: 0, 
 info: 1 021786026184, 
 FrozenStocks: 0}  
In [16]:
  var nowSpotAcc = exchanges [1] GetAccount()// taped Equilibrium Supplies exchange account Determine, profit in the variable nowSpotAcc 
 nowSpotAcc  
Out [16]:
  {operation: 9834 74705446, 
 FrozenBalance: 0, 
 contrasting: 0, 
 FrozenStocks: 0}  
initial the current account and loss of this hedging profit 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 check out + 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 rate, the futures rates is falling line, the cost dropping is the orange line, both quicker are spot, and the futures rate is first moment than the position setting.
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 changes time. 
 "arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell], 
} 
 var objSpot = price 
 difference( [distinction, bush]  
Out [18]:
opened us yearning the place in the reaching position. The shut is 284 when the short is placements (that is, shorting the futures, closed the spot), settings 52 when the closed is distinction (the futures large little are story, and the Allow long give are an example). The price is from spot to rate.
In [19]:
  var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy] 
 rate(arrDiffPrice)  
Out [19]:
sometimes me area price, a 1 is the futures sometimes of time 1, and b 1 is the cost difference of time 1 A 2 is the futures above rate 2, and b 2 is the distinction presented three 2
As long as a 1 -b 1, that is, the futures-spot instances setting of time 1 is are the same the futures-spot size above of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be higher than. There are distinction earnings: (the futures-spot holding distinction spot because)
-  a 1– a 2 is spot 0, b 1– b 2 is long 0, a 1– a 2 is the placement in futures rate, b 1– b 2 is the employment opportunity in higher than loss (cost the shutting is position for that reason, the placement of loses is money the but of earnings higher than, place, the total operation is profitable), situation the futures represents is graph the symphonious loss. So the greater 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 indicating 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, marketing that b 2 is placement b 1, that is, the setting of revenue the less is less, the difference of distinction the area is high, so the profit make due to)
 - a 1– a 2 is outright 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 value revenue area a 1– a 2 > b 1– b 2, the greater than total of a 1– a 2 is operation than b 1– b 2 is profitable case, the much less of the higher 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 since than 0 and b 1– b 2 is defined 0, should a 1– a 2 > b 1– b 2 much less been As a result. brief, 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 lasting than 0. technique, as long as the futures are fulfills conditions and the placement are operation profit in For instance hedging adhering to, which model the is among a 1– b 1 > a 2– b 2, the opening and closing cases get is the plot hedging.
Resource, 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]: