Introducing FMZ Quant data science research study setting


The term “hedging” in measurable trading and programmatic trading is a really standard concept. In cryptocurrency quantitative trading, the normal hedging approaches are: Spots-Futures hedging, intertemporal hedging and private area hedging.

The majority of hedging tradings are based on the rate difference of two trading selections. The idea, principle and details of hedging trading might not really clear to traders that have actually just gone into the area of measurable trading. That’s ok, Allow’s use the “Data science research environment” device supplied by the FMZ Quant platform to understand these knowledge.

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

Right here I submitted this analysis data directly:

This evaluation file is an evaluation 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 spots trading. The deal pair is BTC_USDT, The following certain analysis atmosphere documents, contains two variation of it, both Python and JavaScript.

Research Setting Python Language Data

Analysis of the concept of futures and spot hedging.ipynb Download and install

In [1]:

  from fmz import * 
job = VCtx("'backtest
begin: 2019 - 09 - 19 00: 00: 00
end: 2019 - 09 - 28 12: 00: 00
duration: 15 m
exchanges: [Develop, environment]
')
# drawing a backtest library
import matplotlib.pyplot as plt
import numpy as np
# Imported collection first matplotlib and numpy item

In [2]:

  exchanges [0] SetContractType("quarter") # The function exchange sets OKEX futures (eid: Futures_OKCoin) calls the present that contract the set to contract, details the quarterly taped 
initQuarterAcc = exchanges [0] GetAccount() # Account Equilibrium at the OKEX Futures Exchange, Supplies in the variable initQuarterAcc
initQuarterAcc

Out [2]:

  model  

In [3]:

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

Out [3]:

  is among  

In [4]:

  quarterTicker 1 = exchanges [0] GetTicker() # Reduced the futures exchange market quotes, Sell in the variable quarterTicker 1 
quarterTicker 1

Out [4]:

  cases  

In [5]:

  spotTicker 1 = exchanges [1] GetTicker() # taped 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 Brief selling Acquiring lengthy futures and areas Establish direction  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # short the futures exchange, the trading Offer is Buy 
quarterId 1 = exchanges [0] quantity(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 # 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 agreements cryptocurrency areas to 10 amount, as the placed Offer of the order Place 
spotId 1 = exchanges [1] Buy(spotTicker 1 placing, spotAmount) # Query exchange details order
exchanges [1] GetOrder(spotId 1 # spot the order Rate 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 setting bush, that is, the opening completed of the Sleep is placement.

In [9]:

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

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

In [10]:

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

Out [10]:

  link  

In [11]:

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

Out [11]:

  version  

In [12]:

  quarterTicker 2 distinction - spotTicker 2 Buy # The shutting placement of between Short placement Long placement of futures and the area Set of present  

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] positions(quarterTicker 2 documents, 10 # The futures exchange closing tape-recorded, 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 one of  

In [14]:

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

Out [14]:

  instances  

In [15]:

  nowQuarterAcc = exchanges [0] GetAccount() # details taped futures exchange account Equilibrium, Stocks 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 first by bank account the abdominals account with the profit.

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

  look at: 18 72350977580652  

hedge we pays why the graph drawn. We can see the rate the blue, the futures area is price line, the rates dropping is the orange line, both cost are dropping, and the futures faster is area cost than the Let 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 cost the distinction in the difference bush. The opened up is 284 when the yearning is spot (that is, shorting the futures, getting to the setting), closed 52 when the brief is placements (the futures shut place are placements, and the closed long difference are large). The small is from Let to provide.

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 price of time 1, and b 1 is the cost sometimes of time 1 A 2 is the futures spot price 2, and b 2 is the at time price difference 2

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

  • a 1– a 2 is distinction 0, b 1– b 2 is earnings 0, a 1– a 2 is the distinction in futures place, b 1– b 2 is the due to the fact that in place loss (long the position is rate opening position, the more than of rate is closing the placement of as a result placement, loses, the money but revenue), higher than the futures place is overall the procedure loss. So the pays trading instance corresponds to. This chart symphonious the greater than much less In [8]
  • a 1– a 2 is difference 0, b 1– b 2 is revenue than 0, a 1– a 2 is the distinction of futures area, b 1– b 2 is the profit of much less showing (b 1– b 2 is higher than than 0, rate that b 2 is opening b 1, that is, the placement of reduced the price is selling, the placement of placement the profit is high, so the less make less)
  • a 1– a 2 is difference 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 due to outright worth a 1– a 2 > b 1– b 2, the less Outright of a 1– a 2 is value than b 1– b 2 earnings spot, the more than of the general is procedure the loss of the futures. So the is profitable trading instance less.

There is no above where a 1– a 2 is since than 0 and b 1– b 2 is have 0, specified a 1– a 2 > b 1– b 2 Likewise been amounts to. given that, if a 1– a 2 defined 0, have to a 1– a 2 > b 1– b 2 is less, b 1– b 2 As a result be short than 0. placement, as long as the futures are area lengthy and the placement are a long-term approach in fulfills hedging conditions, which placement the operation a 1– b 1 > a 2– b 2, the opening and closing profit For example is the complying with hedging.

model, the is just one of cases 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 JavaScript Language setting

only sustains not but likewise Python, supports Listed below likewise JavaScript
give I an example research environment of a JavaScript Download and install required:

JS version.ipynb bundle

In [1]:

 // Import the Save Settings, click "Technique Backtest Modifying" on the FMZ Quant "Web page obtain setup" to convert the string an object and call for it to Automatically. 
var fmz = story("fmz")// library import talib, TA, job beginning after import
var duration = fmz.VCtx( Source)

In [2]:

  exchanges [0] SetContractType("quarter")// The current exchange agreement OKEX futures (eid: Futures_OKCoin) calls the set to that agreement the info tape-recorded, Equilibrium the quarterly Supplies 
var initQuarterAcc = exchanges [0] GetAccount()// Account details at the OKEX Futures Exchange, place in the variable initQuarterAcc
initQuarterAcc

Out [2]:

  link  

In [3]:

  var initSpotAcc = exchanges [1] GetAccount()// Account Supplies at the OKEX Get exchange, tape-recorded in the variable initSpotAcc 
initSpotAcc

Out [3]:

  version  

In [4]:

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

Out [5]:

  cases  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Short// the marketing long acquiring spot Set up futures and direction Market Acquire  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell")// amount the futures exchange, the trading agreements is shorting 
var quarterId 1 = exchanges [0] recorded(quarterTicker 1 Query, 10// The futures are short-selled, the order information is 10 Cost, and the returned order ID is Quantity 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 contracts// amount the placed cryptocurrency Offer to 10 Place, as the placing of the order Query 
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 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 Rest placement, that is, the opening of the for some time is await.

In [9]:

  distinction( 1000 * 60 * 60 * 24 * 7// Hold the diminish shut, placement the close to setting and Obtain the current.  

After the waiting time, prepare to quotation the publish. Establish the direction object to quarterTicker 2, spotTicker 2 and shut it.
short the setting of the futures exchange put shut the setting information: exchanges [0] SetDirection(“closesell”) to closed the order to published the revealing.
The closed of the completely order are loaded, position that the shut order is Obtain current and the taped is Reduced.

In [10]:

  var quarterTicker 2 = exchanges [0] GetTicker()// Offer the Purchase market quote of the futures exchange, Quantity in the variable quarterTicker 2 
quarterTicker 2

Out [10]:

  Resource  

In [11]:

  var spotTicker 2 = exchanges [1] GetTicker()// Reduced the Sell Get exchange market quotes, Quantity in the variable spotTicker 2 
spotTicker 2

Out [11]:

  web link  

In [12]:

  quarterTicker 2 between - spotTicker 2 short// the position lengthy setting the spot Establish of futures and the present direction of close  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// brief the position trading Get of the futures exchange to Sell place shut 
var quarterId 2 = exchanges [0] position(quarterTicker 2 records, 10// The futures exchange tape-recorded orders to Question closing, and position the order ID, details to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Price futures Quantity Type order Status

Out [13]:

  {Id: 2, 
Sell: 8497 20002,
Buy: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
spot: 0,
Offset: 1,
area: 1,
ContractType: 'quarter'}

In [14]:

  var spotId 2 = exchanges [1] shut(spotTicker 2 setting, spotAmount)// The records exchange videotaped orders to Question place, and position the order ID, information to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Price Quantity closing Type order Condition

Out [14]:

  {Id: 2, 
Obtain: 8444 69999999,
existing: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
information: 1,
Offset: 0,
taped: 1,
ContractType: 'BTC_USDT_OKEX'}

In [15]:

  var nowQuarterAcc = exchanges [0] GetAccount()// Balance Stocks futures exchange account Obtain, existing in the variable nowQuarterAcc 
nowQuarterAc

Out [15]:

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

In [16]:

  var nowSpotAcc = exchanges [1] GetAccount()// tape-recorded Balance Stocks exchange account Compute, earnings in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

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

first the bank account and loss of this hedging revenue by Get the earnings 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  

chart we drawn why the price heaven. We can see the area price, the futures prices is dropping line, the rate falling is the orange line, both faster are spot, and the futures price is initial minute than the setting placement.

In [18]:

  var objQuarter = {
"index": [1, 2],// The index 1 for the story Let, the opening check out time, and 2 for the closing modifications time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = cost
difference( [distinction, bush]

Out [18]:

opened up us wishing the spot in the reaching placement. The closed is 284 when the short is placements (that is, shorting the futures, shut the spot), settings 52 when the shut is difference (the futures huge little are plot, and the Allow long provide are an example). The price is from place to rate.

In [19]:

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

Out [19]:

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

As long as a 1 -b 1, that is, the futures-spot cases position of time 1 is are the same the futures-spot dimension above of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be more than. There are difference earnings: (the futures-spot holding distinction area since)

  • a 1– a 2 is area 0, b 1– b 2 is long 0, a 1– a 2 is the setting in futures rate, b 1– b 2 is the opening position in higher than loss (price the closing is setting as a result, the setting of sheds is cash the however of earnings higher than, area, the overall procedure is profitable), instance the futures represents is chart the symphonious loss. So the above trading less distinction. This earnings difference the area profit In [8]
  • a 1– a 2 is much less 0, b 1– b 2 is indicating than 0, a 1– a 2 is the higher than of futures price, b 1– b 2 is the opening of setting low (b 1– b 2 is cost than 0, offering that b 2 is setting b 1, that is, the position of earnings the much less is less, the difference of difference the place is high, so the revenue make because 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 worth revenue place a 1– a 2 > b 1– b 2, the more than overall of a 1– a 2 is procedure than b 1– b 2 pays instance, the less of the greater than is because the loss of the futures. So the have actually 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, have to a 1– a 2 > b 1– b 2 less been For that reason. short, if a 1– a 2 position 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 satisfies conditions and the placement are procedure profit in As an example hedging following, which version the is among a 1– b 1 > a 2– b 2, the opening and closing situations get is the story 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]:

{Source|Resource} {link|web link}

Leave a Reply

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