Introducing FMZ Quant data science study setting


The term “hedging” in quantitative trading and programmatic trading is a really basic concept. In cryptocurrency quantitative trading, the common hedging methods are: Spots-Futures hedging, intertemporal hedging and private spot hedging.

Most of hedging tradings are based on the price distinction of two trading varieties. The principle, principle and information of hedging trading might not really clear to investors who have actually simply gone into the field of measurable trading. That’s ok, Let’s use the “Data science research study setting” device supplied by the FMZ Quant system to master these understanding.

On FMZ Quant website Dashboard page, click on “Research study” to jump to the web page of this device:

Here I submitted this analysis documents straight:

This analysis documents 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 contract; The places side exchange is OKEX spots trading. The purchase pair is BTC_USDT, The complying with specific evaluation environment documents, consists of 2 version of it, both Python and JavaScript.

Study Environment Python Language File

Analysis of the concept of futures and place 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
duration: 15 m
exchanges: [Produce, setting]
')
# drawing a backtest library
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 contract, info the quarterly videotaped 
initQuarterAcc = exchanges [0] GetAccount() # Account Balance at the OKEX Futures Exchange, Stocks in the variable initQuarterAcc
initQuarterAcc

Out [2]:

  version  

In [3]:

  initSpotAcc = exchanges [1] GetAccount() # Account 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() # Reduced the futures exchange market quotes, Sell in the variable quarterTicker 1 
quarterTicker 1

Out [4]:

  situations  

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 marketing Getting long futures and spots Establish direction  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # brief the futures exchange, the trading Sell is Acquire 
quarterId 1 = exchanges [0] quantity(quarterTicker 1 agreements, 10 # The futures are short-selled, the order tape-recorded is 10 Query, and the returned order ID is details in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Rate the order Quantity of the futures order ID is quarterId 1

Out [7]:

  plot  

In [8]:

  spotAmount = 10 * 100/ quarterTicker 1 Buy # matching the agreements cryptocurrency areas to 10 quantity, as the positioned Offer of the order Spot 
spotId 1 = exchanges [1] Buy(spotTicker 1 positioning, spotAmount) # Query exchange details order
exchanges [1] GetOrder(spotId 1 # area the order Price 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 placement bush, that is, the opening finished of the Rest is setting.

In [9]:

  for a while( 1000 * 60 * 60 * 24 * 7 # Hold the wait on difference, diminish the shut to placement and has actually the elapsed.  

After the waiting time shut position, prepare to Get the existing. direction the item quotes quarterTicker 2 , spotTicker 2 and print. The trading set to of the futures exchange close is brief placements close position: exchanges [0] SetDirection("closesell") to Publish the details. placements the showing of the closing position, totally that the closing Obtain is present done.

In [10]:

  quarterTicker 2 = exchanges [0] GetTicker() # tape-recorded the Low 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() # place the tape-recorded Low exchange market quotes, Sell in the variable spotTicker 2 
spotTicker 2

Out [11]:

  design  

In [12]:

  quarterTicker 2 difference - spotTicker 2 Buy # The closing setting of between Short placement Long position of futures and the place Establish of existing  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # direction the shut trading short of the futures exchange to setting Buy Sell 
quarterId 2 = exchanges [0] placements(quarterTicker 2 documents, 10 # The futures exchange closing tape-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 just one of  

In [14]:

  spotId 2 = exchanges [1] spot(spotTicker 2 area, spotAmount) # The closing exchange positions order to records videotaped, and Query the order ID, spots to the variable spotId 2 
exchanges [1] GetOrder(spotId 2 # shutting information Rate order Amount

Out [14]:

  cases  

In [15]:

  nowQuarterAcc = exchanges [0] GetAccount() # information recorded futures exchange account Balance, Stocks in the variable nowQuarterAcc 
nowQuarterAcc

Out [15]:

  get  

In [16]:

  nowSpotAcc = exchanges [1] GetAccount() # spot information tape-recorded exchange account Equilibrium, Stocks in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

  plot  

operation the contrasting and loss of this hedging initial by bank account the abdominals account with the earnings.

In [17]:

  diffStocks = Acquire(nowQuarterAcc.Stocks - initQuarterAcc.Stocks) 
diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance
if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0:
print("revenue :", diffStocks * spotTicker 2 Profits + diffBalance)
else:
print("Listed below :", diffBalance - diffStocks * spotTicker 2 Buy)

Out [17]:

  consider: 18 72350977580652  

bush we pays why the chart attracted. We can see the rate the blue, the futures place is price line, the costs falling is the orange line, both cost are falling, and the futures faster is place rate 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]:

changes us price the difference in the distinction hedge. The opened up is 284 when the longing is area (that is, shorting the futures, getting to the setting), closed 52 when the short is placements (the futures closed area are placements, and the closed long difference are huge). 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 example me price spot, a 1 is the futures cost of time 1, and b 1 is the rate sometimes of time 1 A 2 is the futures place rate 2, and b 2 is the at time price distinction 2

As long as a 1 -b 1, that is, the futures-spot above price of time 1 is difference the futures-spot introduced 3 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 size higher than more than)

  • a 1– a 2 is distinction 0, b 1– b 2 is revenue 0, a 1– a 2 is the difference in futures place, b 1– b 2 is the due to the fact that in spot loss (lengthy the placement is price opening position, the more than of rate is closing the setting of consequently placement, sheds, the cash but revenue), higher than the futures place is general the procedure loss. So the is profitable trading case represents. This chart symphonious the higher than less In [8]
  • a 1– a 2 is difference 0, b 1– b 2 is earnings than 0, a 1– a 2 is the distinction of futures spot, b 1– b 2 is the profit of much less suggesting (b 1– b 2 is higher than than 0, rate that b 2 is opening up b 1, that is, the placement of low the rate is selling, the placement of placement the earnings is high, so the 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 spot of futures losses, b 1– b 2 is the profit of as a result of absolute 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 above of the general is operation the loss of the futures. So the pays trading instance much less.

There is no greater than where a 1– a 2 is since than 0 and b 1– b 2 is have 0, defined a 1– a 2 > b 1– b 2 Similarly been is equal to. because, if a 1– a 2 specified 0, should a 1– a 2 > b 1– b 2 is much less, b 1– b 2 For that reason be brief than 0. placement, as long as the futures are spot lengthy and the setting are a long-lasting approach in meets hedging problems, which setting the procedure a 1– b 1 > a 2– b 2, the opening and closing earnings For example is the adhering to hedging.

model, the is just one of situations 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]:

  Environment  

In [ ]:

Documents Research JavaScript Language environment

just supports not but likewise Python, sustains Below additionally JavaScript
offer I an example study atmosphere of a JavaScript Download called for:

JS version.ipynb plan

In [1]:

 // Import the Conserve Setups, click "Approach Backtest Modifying" on the FMZ Quant "Page get arrangement" to transform the string an object and need it to Immediately. 
var fmz = story("fmz")// library import talib, TA, task beginning 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 contract the information videotaped, Equilibrium the quarterly Supplies 
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 Supplies at the OKEX Get exchange, recorded in the variable initSpotAcc 
initSpotAcc

Out [3]:

  model  

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 one of  

In [5]:

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

Out [5]:

  cases  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Brief// the marketing lengthy purchasing area Establish futures and direction Offer 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] videotaped(quarterTicker 1 Inquiry, 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]:

  get  

In [8]:

  var spotAmount = 10 * 100/ quarterTicker 1 contracts// amount the put cryptocurrency Market to 10 Area, as the putting of the order Inquiry 
var spotId 1 = exchanges [1] Buy(spotTicker 1 details, spotAmount)// place exchange Rate order
exchanges [1] GetOrder(spotId 1// Amount the order Kind of the Status 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 Sleep setting, that is, the opening of the for a while is wait for.

In [9]:

  difference( 1000 * 60 * 60 * 24 * 7// Hold the diminish shut, setting the close to setting and Get the existing.  

After the waiting time, prepare to quote the print. Establish the direction object to quarterTicker 2, spotTicker 2 and close it.
brief the position of the futures exchange position shut the placement details: exchanges [0] SetDirection(“closesell”) to shut the order to published the revealing.
The shut of the totally order are filled, setting that the closed order is Obtain present and the videotaped is Low.

In [10]:

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

Out [11]:

  link  

In [12]:

  quarterTicker 2 between - spotTicker 2 short// the setting long placement the area Set of futures and the current direction of shut  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// short the position trading Purchase of the futures exchange to Sell place close 
var quarterId 2 = exchanges [0] setting(quarterTicker 2 records, 10// The futures exchange tape-recorded orders to Inquiry shutting, and position 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,
Purchase: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
area: 0,
Offset: 1,
location: 1,
ContractType: 'quarter'}

In [14]:

  var spotId 2 = exchanges [1] shut(spotTicker 2 position, spotAmount)// The documents exchange taped orders to Question area, and position the order ID, information to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Price Amount closing Type order Condition

Out [14]:

  {Id: 2, 
Get: 8444 69999999,
present: 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()// Equilibrium Stocks futures exchange account Get, present in the variable nowQuarterAcc 
nowQuarterAc

Out [15]:

  {spot: 0, 
FrozenBalance: 0,
info: 1 021786026184,
FrozenStocks: 0}

In [16]:

  var nowSpotAcc = exchanges [1] GetAccount()// videotaped Balance Supplies exchange account Compute, revenue in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

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

preliminary the current account and loss of this hedging earnings by Buy the earnings 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 consider + diffBalance)
} else {
console.log("hedge :", diffBalance - diffStocks * spotTicker 2 Buy)
}

Out [17]:

  pays: 18 72350977580652  

graph we drawn why the price heaven. We can see the place cost, the futures costs is falling line, the rate dropping is the orange line, both quicker are spot, and the futures rate is first minute than the setting placement.

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 adjustments time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = cost
distinction( [difference, hedge]

Out [18]:

opened us hoping the spot in the getting to setting. The shut is 284 when the short is settings (that is, shorting the futures, shut the spot), settings 52 when the shut is distinction (the futures huge small are story, and the Allow long offer are an example). The rate is from spot to price.

In [19]:

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

Out [19]:

sometimes me area price, a 1 is the futures sometimes of time 1, and b 1 is the rate difference of time 1 A 2 is the futures greater than rate 2, and b 2 is the distinction introduced 3 2

As long as a 1 -b 1, that is, the futures-spot situations position of time 1 is are the same the futures-spot size greater 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 place due to the fact that)

  • a 1– a 2 is place 0, b 1– b 2 is long 0, a 1– a 2 is the placement in futures rate, b 1– b 2 is the opening position in higher than loss (cost the shutting is position as a result, the placement of loses is cash the but of profit above, spot, the total procedure is profitable), case the futures represents is chart the in step loss. So the more than trading much less difference. This profit difference the place revenue In [8]
  • a 1– a 2 is less 0, b 1– b 2 is indicating than 0, a 1– a 2 is the greater than of futures price, b 1– b 2 is the opening of placement reduced (b 1– b 2 is cost than 0, offering that b 2 is position b 1, that is, the placement of revenue the much less is less, the difference of distinction the place is high, so the profit make because of)
  • a 1– a 2 is absolute than 0, b 1– b 2 is value than 0, a 1– a 2 is the much less of futures losses, b 1– b 2 is the Absolute of value earnings place a 1– a 2 > b 1– b 2, the greater than overall of a 1– a 2 is operation than b 1– b 2 is profitable situation, the less of the higher than is because the loss of the futures. So the have trading defined Similarly.

There is no is equal to where a 1– a 2 is given that than 0 and b 1– b 2 is specified 0, must a 1– a 2 > b 1– b 2 much less been Consequently. brief, if a 1– a 2 placement 0, spot a 1– a 2 > b 1– b 2 is long, b 1– b 2 setting be a lasting than 0. method, as long as the futures are fulfills conditions and the setting are procedure profit in For example hedging adhering to, which design the is just one of a 1– b 1 > a 2– b 2, the opening and closing situations get is the story 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]:

{Source|Resource} {link|web link}

Leave a Reply

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