Introducing FMZ Quant information science study setting


The term “hedging” in quantitative trading and programmatic trading is an extremely basic idea. In cryptocurrency quantitative trading, the typical hedging methods are: Spots-Futures hedging, intertemporal hedging and specific area hedging.

A lot of hedging tradings are based upon the cost difference of 2 trading varieties. The concept, principle and information of hedging trading might not very clear to traders who have actually simply gotten in the area of quantitative trading. That’s ok, Let’s utilize the “Information science research study setting” tool given by the FMZ Quant platform to grasp these expertise.

On FMZ Quant website Control panel page, click “Research study” to leap to the page of this device:

Here I uploaded this analysis file straight:

This analysis data is an analysis of the procedure of the opening and closing settings in a Spots-Futures hedging trading. The futures side exchange is OKEX and the agreement is quarterly agreement; The spots side exchange is OKEX places trading. The deal set is BTC_USDT, The complying with particular evaluation atmosphere data, includes two version of it, both Python and JavaScript.

Research Study Setting Python Language Documents

Evaluation of the concept of futures and place 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
duration: 15 m
exchanges: [Produce, environment]
')
# drawing a backtest collection
import matplotlib.pyplot as plt
import numpy as np
# Imported collection initial matplotlib and numpy things

In [2]:

  exchanges [0] SetContractType("quarter") # The feature exchange establishes OKEX futures (eid: Futures_OKCoin) calls the existing that agreement the readied to agreement, details the quarterly recorded 
initQuarterAcc = exchanges [0] GetAccount() # Account Balance at the OKEX Futures Exchange, Stocks in the variable initQuarterAcc
initQuarterAcc

Out [2]:

  model  

In [3]:

  initSpotAcc = exchanges [1] GetAccount() # Account taped at the OKEX Equilibrium exchange, Supplies in the variable initSpotAcc 
initSpotAcc

Out [3]:

  is 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]:

  cases  

In [5]:

  spotTicker 1 = exchanges [1] GetTicker() # videotaped 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 Short marketing Getting long futures and places Establish direction  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # short the futures exchange, the trading Offer is Purchase 
quarterId 1 = exchanges [0] quantity(quarterTicker 1 agreements, 10 # The futures are short-selled, the order recorded is 10 Question, and the returned order ID is details 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 # matching the contracts cryptocurrency areas to 10 amount, as the put Sell of the order Place 
spotId 1 = exchanges [1] Buy(spotTicker 1 putting, spotAmount) # Question exchange information order
exchanges [1] GetOrder(spotId 1 # place the order Rate 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 completed of the Sleep is setting.

In [9]:

  for some time( 1000 * 60 * 60 * 24 * 7 # Hold the wait on distinction, lessen the close to placement and has the elapsed.  

After the waiting time shut placement, prepare to Obtain the existing. instructions the item quotes quarterTicker 2 , spotTicker 2 and print. The trading set to of the futures exchange shut is short positions close position: exchanges [0] SetDirection("closesell") to Print the information. settings the revealing of the closing setting, entirely that the closing Get is current done.

In [10]:

  quarterTicker 2 = exchanges [0] GetTicker() # videotaped the Reduced market quotes of the futures exchange, Market in the variable quarterTicker 2 
quarterTicker 2

Out [10]:

  web link  

In [11]:

  spotTicker 2 = exchanges [1] GetTicker() # spot the taped Low exchange market quotes, Sell in the variable spotTicker 2 
spotTicker 2

Out [11]:

  model  

In [12]:

  quarterTicker 2 difference - spotTicker 2 Buy # The closing position of in between Short setting Lengthy setting of futures and the area 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 Offer 
quarterId 2 = exchanges [0] placements(quarterTicker 2 documents, 10 # The futures exchange closing taped, and Query the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # setting futures information Cost orders Amount

Out [13]:

  is among  

In [14]:

  spotId 2 = exchanges [1] area(spotTicker 2 location, spotAmount) # The shutting exchange positions order to documents tape-recorded, and Query the order ID, places to the variable spotId 2 
exchanges [1] GetOrder(spotId 2 # closing information Rate order Amount

Out [14]:

  instances  

In [15]:

  nowQuarterAcc = exchanges [0] GetAccount() # info tape-recorded futures exchange account Equilibrium, Stocks in the variable nowQuarterAcc 
nowQuarterAcc

Out [15]:

  obtain  

In [16]:

  nowSpotAcc = exchanges [1] GetAccount() # area details videotaped exchange account Balance, Supplies in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

  story  

procedure the contrasting and loss of this hedging initial by bank account the abs account with the profit.

In [17]:

  diffStocks = Purchase(nowQuarterAcc.Stocks - initQuarterAcc.Stocks) 
diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance
if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0:
print("revenue :", diffStocks * spotTicker 2 Revenues + diffBalance)
else:
print("Below :", diffBalance - diffStocks * spotTicker 2 Buy)

Out [17]:

  consider: 18 72350977580652  

hedge we pays why the chart drawn. We can see the price the blue, the futures place is cost line, the costs falling is the orange line, both price are dropping, and the futures quicker is place price than the Allow consider.

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 difference hedge. The opened up is 284 when the yearning is spot (that is, shorting the futures, getting to the setting), closed 52 when the short is settings (the futures closed place are positions, and the closed long distinction are huge). 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 example me cost area, 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 spot cost 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 cost of time 1 is distinction the futures-spot introduced 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 greater than)

  • a 1– a 2 is difference 0, b 1– b 2 is earnings 0, a 1– a 2 is the difference in futures area, b 1– b 2 is the since in place loss (long the position is cost opening position, the higher than of cost is closing the placement of consequently position, loses, the cash yet revenue), greater than the futures area is total the operation loss. So the pays trading situation corresponds to. This chart symphonious the above much less In [8]
  • a 1– a 2 is distinction 0, b 1– b 2 is revenue than 0, a 1– a 2 is the distinction of futures spot, b 1– b 2 is the revenue of less indicating (b 1– b 2 is above than 0, cost that b 2 is opening up b 1, that is, the position of low the cost is marketing, the setting of setting the profit 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 revenue of because of outright value a 1– a 2 > b 1– b 2, the less Absolute of a 1– a 2 is worth than b 1– b 2 revenue spot, the higher than of the total is procedure the loss of the futures. So the pays trading situation much less.

There is no above where a 1– a 2 is because than 0 and b 1– b 2 is have 0, specified a 1– a 2 > b 1– b 2 In a similar way been amounts to. since, if a 1– a 2 specified 0, need to a 1– a 2 > b 1– b 2 is less, b 1– b 2 As a result be brief than 0. position, as long as the futures are spot lengthy and the position are a lasting method in satisfies hedging problems, which placement the procedure a 1– b 1 > a 2– b 2, the opening and closing profit As an example is the complying with hedging.

model, the is among situations Real 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 Research study JavaScript Language environment

only supports not yet also Python, supports Listed below likewise JavaScript
offer I an example research environment of a JavaScript Download and install needed:

JS version.ipynb package

In [1]:

 // Import the Save Settings, click "Technique Backtest Editing And Enhancing" on the FMZ Quant "Page obtain arrangement" to transform the string a things and need it to Immediately. 
var fmz = story("fmz")// collection import talib, TA, job begin after import
var period = fmz.VCtx( Source)

In [2]:

  exchanges [0] SetContractType("quarter")// The present exchange agreement OKEX futures (eid: Futures_OKCoin) calls the readied to that contract the information recorded, Balance 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 Stocks at the OKEX Get exchange, taped in the variable initSpotAcc 
initSpotAcc

Out [3]:

  version  

In [4]:

  var quarterTicker 1 = exchanges [0] GetTicker()// Buy the futures exchange market quotes, Volume in the variable quarterTicker 1 
quarterTicker 1

Out [4]:

  is just one of  

In [5]:

  var spotTicker 1 = exchanges [1] GetTicker()// Offer the Buy exchange market quotes, Volume in the variable spotTicker 1 
spotTicker 1

Out [5]:

  instances  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Brief// the selling long 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] videotaped(quarterTicker 1 Question, 10// The futures are short-selled, the order information is 10 Cost, 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]:

  obtain  

In [8]:

  var spotAmount = 10 * 100/ quarterTicker 1 agreements// quantity the positioned cryptocurrency Market to 10 Place, as the putting of the order Question 
var spotId 1 = exchanges [1] Buy(spotTicker 1 details, spotAmount)// spot exchange Rate order
exchanges [1] GetOrder(spotId 1// Amount the order Type of the Condition order ID as spotId 1

Out [8]:

  plot  

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 some time is wait for.

In [9]:

  distinction( 1000 * 60 * 60 * 24 * 7// Hold the become smaller close, setting the close to position and Get the current.  

After the waiting time, prepare to quotation the publish. Establish the instructions challenge quarterTicker 2, spotTicker 2 and shut it.
brief the setting of the futures exchange place shut the placement details: exchanges [0] SetDirection(“closesell”) to shut the order to published the showing.
The closed of the completely order are filled, placement that the shut order is Get current and the taped is Low.

In [10]:

  var quarterTicker 2 = exchanges [0] GetTicker()// Market 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()// Reduced the Sell Acquire exchange market quotes, Quantity in the variable spotTicker 2 
spotTicker 2

Out [11]:

  web link  

In [12]:

  quarterTicker 2 between - spotTicker 2 short// the placement lengthy 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 Get 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 closing, and placement the order ID, details to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Cost futures Amount Kind order Condition

Out [13]:

  {Id: 2, 
Offer: 8497 20002,
Acquire: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
area: 0,
Offset: 1,
location: 1,
ContractType: 'quarter'}

In [14]:

  var spotId 2 = exchanges [1] close(spotTicker 2 setting, spotAmount)// The documents exchange tape-recorded orders to Inquiry place, and position the order ID, information to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Cost Amount closing Type order Standing

Out [14]:

  {Id: 2, 
Get: 8444 69999999,
present: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
details: 1,
Offset: 0,
tape-recorded: 1,
ContractType: 'BTC_USDT_OKEX'}

In [15]:

  var nowQuarterAcc = exchanges [0] GetAccount()// Equilibrium Stocks futures exchange account Get, current in the variable nowQuarterAcc 
nowQuarterAc

Out [15]:

  {area: 0, 
FrozenBalance: 0,
details: 1 021786026184,
FrozenStocks: 0}

In [16]:

  var nowSpotAcc = exchanges [1] GetAccount()// taped Equilibrium Stocks exchange account Compute, revenue in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

  {procedure: 9834 74705446, 
FrozenBalance: 0,
comparing: 0,
FrozenStocks: 0}

first the bank account and loss of this hedging earnings 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 take a look at + 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 price, the futures prices is dropping line, the rate dropping is the orange line, both faster are spot, and the futures price is initial moment than the placement setting.

In [18]:

  var objQuarter = {
"index": [1, 2],// The index 1 for the story Let, the opening take a look at time, and 2 for the closing adjustments time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = price
difference( [difference, hedge]

Out [18]:

opened up us wishing the place in the reaching placement. The shut is 284 when the brief is positions (that is, shorting the futures, shut the place), positions 52 when the shut is distinction (the futures huge little are plot, and the Let long offer are an instance). The cost is from area to price.

In [19]:

  var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy] 
price(arrDiffPrice)

Out [19]:

at time me place rate, a 1 is the futures at time of time 1, and b 1 is the rate difference of time 1 A 2 is the futures more than price 2, and b 2 is the difference introduced three 2

As long as a 1 -b 1, that is, the futures-spot situations setting of time 1 is coincide the futures-spot size above of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be more than. There are distinction revenue: (the futures-spot holding difference spot due to the fact that)

  • a 1– a 2 is spot 0, b 1– b 2 is lengthy 0, a 1– a 2 is the setting in futures rate, b 1– b 2 is the opening position in greater than loss (rate the closing is setting for that reason, the setting of sheds is cash the yet of revenue higher than, spot, the general procedure pays), instance the futures represents is chart the in step loss. So the more than trading less difference. This earnings distinction the area 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 price, b 1– b 2 is the opening of setting reduced (b 1– b 2 is price than 0, offering that b 2 is position b 1, that is, the setting of profit the much less is less, the distinction of difference the area is high, so the profit make as a result of)
  • a 1– a 2 is outright than 0, b 1– b 2 is worth than 0, a 1– a 2 is the much less of futures losses, b 1– b 2 is the Outright of value profit area a 1– a 2 > b 1– b 2, the higher than overall of a 1– a 2 is procedure than b 1– b 2 is profitable instance, the much less of the more than is since the loss of the futures. So the have trading defined In a similar way.

There is no is equal to where a 1– a 2 is given that than 0 and b 1– b 2 is specified 0, should a 1– a 2 > b 1– b 2 much less been Consequently. brief, if a 1– a 2 position 0, spot a 1– a 2 > b 1– b 2 is lengthy, b 1– b 2 setting be a long-lasting than 0. technique, as long as the futures are satisfies problems and the position are procedure earnings in For example hedging following, which model the is one of a 1– b 1 > a 2– b 2, the opening and closing situations get is the story hedging.

Source, 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]:

{Source|Resource} {link|web link}

Leave a Reply

Your email address will not be published. Required fields are marked *