Introducing FMZ Quant data science research environment


The term “hedging” in measurable trading and programmatic trading is a very fundamental concept. In cryptocurrency quantitative trading, the common hedging approaches are: Spots-Futures hedging, intertemporal hedging and individual spot hedging.

Most of hedging tradings are based on the price difference of two trading ranges. The idea, principle and details of hedging trading might not very clear to investors that have simply gotten in the field of measurable trading. That’s ok, Allow’s utilize the “Information science study environment” device provided by the FMZ Quant platform to understand these expertise.

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

Here I submitted this evaluation data directly:

This analysis 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 contract; The places side exchange is OKEX areas trading. The deal set is BTC_USDT, The adhering to specific analysis setting data, includes two version of it, both Python and JavaScript.

Study Atmosphere Python Language File

Evaluation of the principle of futures and spot hedging.ipynb Download

In [1]:

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

In [2]:

  exchanges [0] SetContractType("quarter") # The function exchange establishes OKEX futures (eid: Futures_OKCoin) calls the present 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]:

  design  

In [3]:

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

Out [3]:

  is one of  

In [4]:

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

Out [4]:

  cases  

In [5]:

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

Out [5]:

  get  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 distinction # The between Brief marketing Purchasing long futures and spots Set up direction  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # short the futures exchange, the trading Sell is Buy 
quarterId 1 = exchanges [0] amount(quarterTicker 1 contracts, 10 # The futures are short-selled, the order tape-recorded is 10 Inquiry, and the returned order ID is details in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Cost the order Quantity of the futures order ID is quarterId 1

Out [7]:

  story  

In [8]:

  spotAmount = 10 * 100/ quarterTicker 1 Buy # matching the contracts cryptocurrency spots to 10 quantity, as the positioned Sell of the order Spot 
spotId 1 = exchanges [1] Buy(spotTicker 1 positioning, spotAmount) # Question exchange details order
exchanges [1] GetOrder(spotId 1 # spot the order Cost 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 Sleep is position.

In [9]:

  for some time( 1000 * 60 * 60 * 24 * 7 # Hold the wait for difference, lessen the close to setting and has actually the expired.  

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

In [10]:

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

Out [10]:

  link  

In [11]:

  spotTicker 2 = exchanges [1] GetTicker() # place the videotaped Reduced exchange market quotes, Sell in the variable spotTicker 2 
spotTicker 2

Out [11]:

  design  

In [12]:

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

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # direction the close trading brief of the futures exchange to setting Get Sell 
quarterId 2 = exchanges [0] positions(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 # placement futures information Price orders Quantity

Out [13]:

  is one of  

In [14]:

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

Out [14]:

  situations  

In [15]:

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

Out [15]:

  get  

In [16]:

  nowSpotAcc = exchanges [1] GetAccount() # place info tape-recorded exchange account Equilibrium, Supplies in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

  plot  

operation the comparing and loss of this hedging preliminary by current account the abs account with the earnings.

In [17]:

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

Out [17]:

  take a look at: 18 72350977580652  

hedge we is profitable why the graph attracted. We can see the cost heaven, the futures place is cost line, the rates dropping is the orange line, both price are dropping, and the futures faster is spot 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]:

adjustments us cost the distinction in the difference hedge. The opened is 284 when the hoping is spot (that is, shorting the futures, reaching the setting), shut 52 when the short is positions (the futures shut area are placements, and the shut long difference are huge). The small is from Allow 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 example me rate place, a 1 is the futures price of time 1, and b 1 is the price at time of time 1 A 2 is the futures area rate 2, and b 2 is the sometimes cost distinction 2

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

  • a 1– a 2 is difference 0, b 1– b 2 is profit 0, a 1– a 2 is the distinction in futures area, b 1– b 2 is the because in area loss (long the placement is cost opening position, the more than of rate is closing the placement of for that reason position, loses, the money however revenue), higher than the futures place is overall the procedure loss. So the is profitable trading instance corresponds to. This chart in step the higher than much less In [8]
  • a 1– a 2 is difference 0, b 1– b 2 is profit than 0, a 1– a 2 is the distinction of futures place, b 1– b 2 is the revenue of less suggesting (b 1– b 2 is more than than 0, price that b 2 is opening b 1, that is, the setting of reduced the cost is offering, the setting of setting the earnings is high, so the less make much less)
  • a 1– a 2 is difference than 0, b 1– b 2 is difference than 0, a 1– a 2 is the spot of futures losses, b 1– b 2 is the profit of as a result of outright worth a 1– a 2 > b 1– b 2, the less Outright of a 1– a 2 is worth than b 1– b 2 earnings spot, the higher than of the overall is procedure the loss of the futures. So the pays trading instance much less.

There is no higher than 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 Similarly been amounts to. given that, if a 1– a 2 specified 0, have to a 1– a 2 > b 1– b 2 is much less, b 1– b 2 Therefore be brief than 0. placement, as long as the futures are spot lengthy and the placement are a long-lasting approach in meets hedging conditions, which placement the procedure a 1– b 1 > a 2– b 2, the opening and closing earnings As an example is the following hedging.

design, the is among instances 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 [ ]:

Data Research JavaScript Language setting

only supports not yet also Python, sustains Listed below likewise JavaScript
offer I an instance research atmosphere of a JavaScript Download called for:

JS version.ipynb plan

In [1]:

 // Import the Conserve Setups, click "Method Backtest Modifying" on the FMZ Quant "Page obtain arrangement" to convert the string a things and call for it to Instantly. 
var fmz = plot("fmz")// library import talib, TA, job begin after import
var period = fmz.VCtx( Resource)

In [2]:

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

Out [2]:

  link  

In [3]:

  var initSpotAcc = exchanges [1] GetAccount()// Account Stocks at the OKEX Obtain exchange, taped in the variable initSpotAcc 
initSpotAcc

Out [3]:

  design  

In [4]:

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

Out [4]:

  is one of  

In [5]:

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

Out [5]:

  instances  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Brief// the selling lengthy acquiring spot 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 Query, 10// The futures are short-selled, the order information is 10 Price, and the returned order ID is Quantity in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1// Type 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 placed cryptocurrency Market to 10 Spot, as the putting of the order Question 
var spotId 1 = exchanges [1] Buy(spotTicker 1 information, spotAmount)// area exchange Cost 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 Sleep setting, that is, the opening of the for a while is wait for.

In [9]:

  distinction( 1000 * 60 * 60 * 24 * 7// Hold the diminish close, placement the close to position and Get the current.  

After the waiting time, prepare to quote the publish. Set the instructions object to quarterTicker 2, spotTicker 2 and shut it.
brief the setting of the futures exchange position close the setting details: exchanges [0] SetDirection(“closesell”) to shut the order to published the showing.
The shut of the fully order are filled up, placement that the closed order is Obtain current 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]:

  Resource  

In [11]:

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

Out [11]:

  link  

In [12]:

  quarterTicker 2 between - spotTicker 2 short// the placement long placement the spot Establish of futures and the existing direction of shut  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// brief the position trading Purchase of the futures exchange to Market location close 
var quarterId 2 = exchanges [0] placement(quarterTicker 2 records, 10// The futures exchange tape-recorded orders to Query shutting, and position the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Rate futures Amount Kind order Condition

Out [13]:

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

In [14]:

  var spotId 2 = exchanges [1] shut(spotTicker 2 setting, spotAmount)// The documents exchange recorded orders to Inquiry area, and position the order ID, details to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Price Amount closing Kind order Condition

Out [14]:

  {Id: 2, 
Get: 8444 69999999,
existing: 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 Stocks futures exchange account Obtain, existing in the variable nowQuarterAcc 
nowQuarterAc

Out [15]:

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

In [16]:

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

Out [16]:

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

initial the bank account and loss of this hedging revenue by Acquire the profit 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]:

  pays: 18 72350977580652  

chart we attracted why the rate the blue. We can see the area price, the futures costs is dropping line, the cost dropping is the orange line, both faster are area, and the futures cost is initial minute than the position position.

In [18]:

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

Out [18]:

opened up us hoping the spot in the reaching setting. The closed is 284 when the short is positions (that is, shorting the futures, closed the place), positions 52 when the shut is distinction (the futures large tiny are story, and the Allow long provide are an example). The rate is from place to rate.

In [19]:

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

Out [19]:

sometimes me place rate, a 1 is the futures sometimes of time 1, and b 1 is the cost distinction of time 1 A 2 is the futures more than price 2, and b 2 is the distinction presented 3 2

As long as a 1 -b 1, that is, the futures-spot instances placement of time 1 is coincide the futures-spot size higher than of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be greater than. There are difference earnings: (the futures-spot holding distinction spot since)

  • a 1– a 2 is place 0, b 1– b 2 is lengthy 0, a 1– a 2 is the position in futures rate, b 1– b 2 is the employment opportunity in greater than loss (rate the shutting is setting therefore, the setting of loses is money the yet of profit above, area, the total procedure is profitable), instance the futures represents is chart the symphonious loss. So the more than trading much less difference. This profit distinction the place profit In [8]
  • a 1– a 2 is much less 0, b 1– b 2 is showing than 0, a 1– a 2 is the higher than of futures cost, b 1– b 2 is the opening of setting reduced (b 1– b 2 is price than 0, selling that b 2 is setting b 1, that is, the placement of revenue the much less is much less, the distinction of distinction the area is high, so the revenue make due to)
  • a 1– a 2 is outright than 0, b 1– b 2 is value than 0, a 1– a 2 is the less of futures losses, b 1– b 2 is the Outright of value earnings area a 1– a 2 > b 1– b 2, the higher than general of a 1– a 2 is operation than b 1– b 2 pays instance, the less of the more than is since the loss of the futures. So the have trading defined Similarly.

There is no is equal 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 Therefore. short, if a 1– a 2 setting 0, spot a 1– a 2 > b 1– b 2 is lengthy, b 1– b 2 setting be a lasting than 0. method, as long as the futures are meets problems and the setting are procedure revenue in As an example hedging complying with, which design the is one of a 1– b 1 > a 2– b 2, the opening and closing cases 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 *