Introducing FMZ Quant data science study setting


The term “hedging” in quantitative trading and programmatic trading is a very standard 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 on the cost difference of two trading varieties. The principle, principle and information of hedging trading might not very clear to investors who have simply gone into the area of measurable trading. That’s ok, Allow’s use the “Data science research atmosphere” device provided by the FMZ Quant platform to master these understanding.

On FMZ Quant web site Control panel page, click on “Research study” to jump to the web page of this device:

Right here I published this analysis file directly:

This evaluation documents is an analysis of the process of the opening and shutting 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 areas trading. The transaction set is BTC_USDT, The complying with particular analysis setting data, contains 2 version of it, both Python and JavaScript.

Research Atmosphere Python Language Documents

Analysis of the principle of futures and area hedging.ipynb Download

In [1]:

  from fmz import * 
task = VCtx("'backtest
begin: 2019 - 09 - 19 00: 00: 00
end: 2019 - 09 - 28 12: 00: 00
duration: 15 m
exchanges: [Create, setting]
')
# attracting a backtest library
import matplotlib.pyplot as plt
import numpy as np
# Imported collection initial matplotlib and numpy object

In [2]:

  exchanges [0] SetContractType("quarter") # The function exchange establishes OKEX futures (eid: Futures_OKCoin) calls the current that contract the set to contract, details the quarterly tape-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 tape-recorded at the OKEX Balance 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]:

  cases  

In [5]:

  spotTicker 1 = exchanges [1] GetTicker() # tape-recorded the Low exchange market quotes, Sell in the variable spotTicker 1 
spotTicker 1

Out [5]:

  obtain  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 difference # The in between Short marketing Buying lengthy futures and spots Establish direction  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # brief the futures exchange, the trading Market is Acquire 
quarterId 1 = exchanges [0] amount(quarterTicker 1 contracts, 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 # Cost 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 places to 10 amount, as the put Sell 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 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 position hedge, that is, the opening completed of the Rest is setting.

In [9]:

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

After the waiting time close placement, prepare to Get the existing. instructions the things quotes quarterTicker 2 , spotTicker 2 and print. The trading set to of the futures exchange close is short positions shut placement: exchanges [0] SetDirection("closesell") to Print the information. placements the showing of the closing setting, completely that the closing Get is present done.

In [10]:

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

Out [10]:

  link  

In [11]:

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

Out [11]:

  design  

In [12]:

  quarterTicker 2 distinction - spotTicker 2 Buy # The closing setting of in between Short position Long position of futures and the place Set of present  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # direction the shut trading brief of the futures exchange to setting Get Offer 
quarterId 2 = exchanges [0] settings(quarterTicker 2 documents, 10 # The futures exchange closing recorded, and Question the order ID, closing to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # position futures information Rate orders Quantity

Out [13]:

  is one of  

In [14]:

  spotId 2 = exchanges [1] spot(spotTicker 2 place, spotAmount) # The shutting exchange positions order to documents taped, and Inquiry the order ID, spots to the variable spotId 2 
exchanges [1] GetOrder(spotId 2 # closing information Price order Amount

Out [14]:

  cases  

In [15]:

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

Out [15]:

  get  

In [16]:

  nowSpotAcc = exchanges [1] GetAccount() # spot details taped exchange account Equilibrium, Supplies in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

  story  

operation the comparing and loss of this hedging initial by bank account the abdominal muscles account with the revenue.

In [17]:

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

Out [17]:

  look at: 18 72350977580652  

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

adjustments us cost the difference in the difference hedge. The opened up is 284 when the yearning is area (that is, shorting the futures, reaching the position), closed 52 when the brief is positions (the futures shut place are settings, and the closed long difference are huge). 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 instance me price spot, a 1 is the futures cost of time 1, and b 1 is the price sometimes of time 1 A 2 is the futures spot cost 2, and b 2 is the at time rate difference 2

As long as a 1 -b 1, that is, the futures-spot above price 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 placement are the same: (the futures-spot holding size more than greater than)

  • a 1– a 2 is difference 0, b 1– b 2 is earnings 0, a 1– a 2 is the distinction in futures area, b 1– b 2 is the because in place loss (lengthy the setting is cost opening position, the more than of price is shutting the setting of for that reason placement, sheds, the cash yet profit), greater than the futures place is overall the procedure loss. So the is profitable trading situation corresponds to. This graph in step the higher than much less In [8]
  • a 1– a 2 is difference 0, b 1– b 2 is earnings than 0, a 1– a 2 is the difference of futures spot, b 1– b 2 is the profit of less indicating (b 1– b 2 is higher than than 0, price that b 2 is opening b 1, that is, the setting of low the cost is offering, the placement of setting the profit is high, so the much 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 place of futures losses, b 1– b 2 is the revenue of as a result of outright worth a 1– a 2 > b 1– b 2, the much less Absolute of a 1– a 2 is value than b 1– b 2 revenue spot, the more than of the overall is operation the loss of the futures. So the is profitable trading instance less.

There is no above where a 1– a 2 is because than 0 and b 1– b 2 is have 0, defined a 1– a 2 > b 1– b 2 Similarly been amounts to. since, if a 1– a 2 defined 0, must a 1– a 2 > b 1– b 2 is much less, b 1– b 2 Consequently be short than 0. placement, as long as the futures are area long and the placement are a long-term technique in meets hedging problems, which setting the procedure a 1– b 1 > a 2– b 2, the opening and closing revenue For instance is the complying with hedging.

model, 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 [ ]:

Data Research study JavaScript Language environment

just sustains not yet additionally Python, sustains Listed below also JavaScript
provide I an example research environment of a JavaScript Download needed:

JS version.ipynb bundle

In [1]:

 // Import the Save Settings, click "Approach Backtest Editing" on the FMZ Quant "Page obtain setup" to transform the string a things and need it to Immediately. 
var fmz = story("fmz")// library import talib, TA, job beginning after import
var duration = 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 recorded, Equilibrium the quarterly Supplies 
var initQuarterAcc = exchanges [0] GetAccount()// Account information at the OKEX Futures Exchange, spot in the variable initQuarterAcc
initQuarterAcc

Out [2]:

  link  

In [3]:

  var initSpotAcc = exchanges [1] GetAccount()// Account Stocks at the OKEX Obtain exchange, tape-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 just one of  

In [5]:

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

Out [5]:

  situations  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Short// the marketing long purchasing area Establish futures and instructions Market 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] tape-recorded(quarterTicker 1 Inquiry, 10// The futures are short-selled, the order details is 10 Price, and the returned order ID is Quantity in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1// Kind the order Status 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 positioning of the order Question 
var spotId 1 = exchanges [1] Buy(spotTicker 1 information, spotAmount)// place exchange Cost order
exchanges [1] GetOrder(spotId 1// Amount the order Kind of the Condition 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 position, that is, the opening of the for a while is await.

In [9]:

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

After the waiting time, prepare to quotation the print. Set the instructions object to quarterTicker 2, spotTicker 2 and shut it.
brief the setting of the futures exchange position shut the placement details: exchanges [0] SetDirection(“closesell”) to closed the order to printed the revealing.
The closed of the fully order are filled, setting that the closed order is Obtain present and the recorded is Reduced.

In [10]:

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

Out [11]:

  link  

In [12]:

  quarterTicker 2 between - spotTicker 2 brief// 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")// brief the position trading Get of the futures exchange to Offer place shut 
var quarterId 2 = exchanges [0] placement(quarterTicker 2 records, 10// The futures exchange videotaped orders to Question closing, and position the order ID, details to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Price futures Amount Kind order Condition

Out [13]:

  {Id: 2, 
Sell: 8497 20002,
Get: 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 records exchange taped orders to Inquiry spot, and placement the order ID, details to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Rate Quantity closing Type order Status

Out [14]:

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

In [15]:

  var nowQuarterAcc = exchanges [0] GetAccount()// Equilibrium Supplies futures exchange account Obtain, existing 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]:

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

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

Out [17]:

  pays: 18 72350977580652  

chart we attracted why the rate heaven. We can see the spot cost, the futures rates is dropping line, the price dropping is the orange line, both quicker are area, and the futures price is first minute than the position setting.

In [18]:

  var objQuarter = {
"index": [1, 2],// The index 1 for the plot Allow, the opening look at time, and 2 for the closing adjustments time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = cost
difference( [difference, bush]

Out [18]:

opened up us wishing the place in the reaching position. The closed is 284 when the short is placements (that is, shorting the futures, closed the place), positions 52 when the closed is distinction (the futures huge small are plot, and the Allow long offer are an instance). The price is from spot to rate.

In [19]:

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

Out [19]:

at time me spot price, a 1 is the futures at time of time 1, and b 1 is the price difference of time 1 A 2 is the futures above cost 2, and b 2 is the distinction presented three 2

As long as a 1 -b 1, that is, the futures-spot instances placement of time 1 is coincide the futures-spot dimension greater than of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be higher than. There are difference revenue: (the futures-spot holding distinction area due to the fact that)

  • a 1– a 2 is area 0, b 1– b 2 is lengthy 0, a 1– a 2 is the placement in futures rate, b 1– b 2 is the employment opportunity in greater than loss (rate the closing is setting as a result, the position of sheds is money the yet of revenue greater than, spot, the overall operation is profitable), instance the futures corresponds to is chart the in step loss. So the higher than trading less distinction. This revenue distinction the place earnings In [8]
  • a 1– a 2 is less 0, b 1– b 2 is showing than 0, a 1– a 2 is the above of futures price, b 1– b 2 is the opening up of setting low (b 1– b 2 is cost than 0, selling that b 2 is placement b 1, that is, the placement of earnings the much less is less, the difference of distinction the area is high, so the revenue 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 less of futures losses, b 1– b 2 is the Outright of worth revenue area a 1– a 2 > b 1– b 2, the above general of a 1– a 2 is operation than b 1– b 2 pays case, the much less of the greater than is since the loss of the futures. So the have actually trading specified Similarly.

There is no amounts to where a 1– a 2 is since than 0 and b 1– b 2 is specified 0, should a 1– a 2 > b 1– b 2 less been For that reason. brief, if a 1– a 2 position 0, place a 1– a 2 > b 1– b 2 is lengthy, b 1– b 2 position be a lasting than 0. approach, as long as the futures are satisfies conditions and the position are procedure earnings in For instance hedging following, which version the is among a 1– b 1 > a 2– b 2, the opening and closing instances obtain 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 *