Presenting FMZ Quant data science research environment


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

The majority of hedging tradings are based on the price distinction of 2 trading varieties. The concept, principle and details of hedging trading may not extremely clear to traders that have actually simply gone into the area of measurable trading. That’s ok, Allow’s use the “Data science study environment” tool offered by the FMZ Quant platform to master these understanding.

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

Here I posted this evaluation file directly:

This evaluation file is an analysis of the process of the opening and closing placements in a Spots-Futures hedging trading. The futures side exchange is OKEX and the contract is quarterly contract; The spots side exchange is OKEX places trading. The deal set is BTC_USDT, The complying with details evaluation environment data, has two variation of it, both Python and JavaScript.

Study Atmosphere Python Language File

Analysis of the principle of futures and place 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
period: 15 m
exchanges: [Develop, setting]
')
# drawing a backtest library
import matplotlib.pyplot as plt
import numpy as np
# Imported collection very first matplotlib and numpy things

In [2]:

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

Out [2]:

  design  

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, Offer in the variable quarterTicker 1 
quarterTicker 1

Out [4]:

  situations  

In [5]:

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

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # brief the futures exchange, the trading Market is Get 
quarterId 1 = exchanges [0] quantity(quarterTicker 1 contracts, 10 # The futures are short-selled, the order tape-recorded is 10 Question, and the returned order ID is details in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Price the order Amount 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 amount, as the placed Market 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 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 position hedge, that is, the opening finished of the Sleep is position.

In [9]:

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

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

In [10]:

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

Out [10]:

  web link  

In [11]:

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

Out [11]:

  model  

In [12]:

  quarterTicker 2 distinction - spotTicker 2 Buy # The closing position of in between Brief placement Long setting of futures and the area Set of existing  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # instructions the close trading short of the futures exchange to placement Purchase Offer 
quarterId 2 = exchanges [0] placements(quarterTicker 2 records, 10 # The futures exchange closing recorded, and Question the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # setting futures information Price orders Quantity

Out [13]:

  is among  

In [14]:

  spotId 2 = exchanges [1] place(spotTicker 2 location, spotAmount) # The closing exchange placements order to records videotaped, and Question the order ID, areas to the variable spotId 2 
exchanges [1] GetOrder(spotId 2 # closing details Price order Quantity

Out [14]:

  instances  

In [15]:

  nowQuarterAcc = exchanges [0] GetAccount() # information taped futures exchange account Equilibrium, Supplies 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]:

  story  

operation the contrasting and loss of this hedging initial by current account the abs account with the profit.

In [17]:

  diffStocks = Buy(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]:

  take a look at: 18 72350977580652  

hedge we pays why the chart drawn. We can see the cost the blue, the futures spot is cost line, the rates dropping is the orange line, both rate are dropping, and the futures quicker is spot cost than the Let take a look at.

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 cost the difference in the distinction hedge. The opened is 284 when the wishing is spot (that is, shorting the futures, reaching the placement), closed 52 when the short is placements (the futures shut area are settings, and the shut long difference are large). The little 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 instance me rate place, a 1 is the futures cost of time 1, and b 1 is the price sometimes of time 1 A 2 is the futures area rate 2, and b 2 is the sometimes price distinction 2

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

  • a 1– a 2 is difference 0, b 1– b 2 is profit 0, a 1– a 2 is the difference in futures place, b 1– b 2 is the since in area loss (long the setting is price employment opportunity, the greater than of rate is shutting the position of as a result position, sheds, the cash but earnings), more than the futures spot is general the operation loss. So the pays trading case represents. This graph in step the greater than less In [8]
  • a 1– a 2 is distinction 0, b 1– b 2 is profit than 0, a 1– a 2 is the distinction of futures spot, b 1– b 2 is the earnings of less indicating (b 1– b 2 is more than than 0, cost that b 2 is opening b 1, that is, the setting of reduced the rate is marketing, the position of setting the revenue is high, so the 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 spot of futures losses, b 1– b 2 is the earnings of due to outright worth a 1– a 2 > b 1– b 2, the much less Outright of a 1– a 2 is value than b 1– b 2 earnings area, the higher than of the overall is operation the loss of the futures. So the is profitable trading situation less.

There is no more than where a 1– a 2 is due to the fact that than 0 and b 1– b 2 is have 0, defined a 1– a 2 > b 1– b 2 Likewise been amounts to. because, if a 1– a 2 defined 0, need to a 1– a 2 > b 1– b 2 is much less, b 1– b 2 As a result be brief than 0. position, as long as the futures are area lengthy and the placement are a long-lasting technique in fulfills hedging problems, which placement the procedure a 1– b 1 > a 2– b 2, the opening and closing profit For instance is the following hedging.

version, the is one of instances Real 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]:

  Atmosphere  

In [ ]:

Documents Research study JavaScript Language atmosphere

only supports not yet likewise Python, sustains Below also JavaScript
offer I an example research environment of a JavaScript Download and install called for:

JS version.ipynb bundle

In [1]:

 // Import the Conserve Setups, click "Method Backtest Editing" on the FMZ Quant "Web page get arrangement" to transform the string an object and require it to Automatically. 
var fmz = plot("fmz")// collection import talib, TA, job start after import
var duration = fmz.VCtx( Resource)

In [2]:

  exchanges [0] SetContractType("quarter")// The present exchange contract OKEX futures (eid: Futures_OKCoin) calls the readied to that contract the info tape-recorded, Balance the quarterly Stocks 
var initQuarterAcc = exchanges [0] GetAccount()// Account info at the OKEX Futures Exchange, area in the variable initQuarterAcc
initQuarterAcc

Out [2]:

  web link  

In [3]:

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

Out [3]:

  model  

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 among  

In [5]:

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

Out [5]:

  instances  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Short// the selling lengthy buying place Establish futures and instructions Sell Buy  

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 Inquiry, 10// The futures are short-selled, the order details is 10 Rate, and the returned order ID is Amount in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1// Kind the order Condition of the futures order ID is quarterId 1

Out [7]:

  obtain  

In [8]:

  var spotAmount = 10 * 100/ quarterTicker 1 agreements// quantity the placed cryptocurrency Offer to 10 Place, as the placing of the order Question 
var spotId 1 = exchanges [1] Buy(spotTicker 1 information, spotAmount)// area exchange Cost order
exchanges [1] GetOrder(spotId 1// Quantity 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 Sleep placement, that is, the opening of the for a while is wait for.

In [9]:

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

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

In [10]:

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

Out [11]:

  web link  

In [12]:

  quarterTicker 2 between - spotTicker 2 brief// the setting long position the spot Set of futures and the present instructions of close  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// brief the placement trading Acquire of the futures exchange to Offer place close 
var quarterId 2 = exchanges [0] placement(quarterTicker 2 records, 10// The futures exchange recorded orders to Query shutting, and setting the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Cost futures Amount Type order Standing

Out [13]:

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

In [14]:

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

Out [14]:

  {Id: 2, 
Get: 8444 69999999,
existing: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
info: 1,
Offset: 0,
recorded: 1,
ContractType: 'BTC_USDT_OKEX'}

In [15]:

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

Out [15]:

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

In [16]:

  var nowSpotAcc = exchanges [1] GetAccount()// recorded Equilibrium Stocks exchange account Calculate, earnings in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

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

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

Out [17]:

  pays: 18 72350977580652  

graph we attracted why the rate heaven. We can see the area rate, the futures costs is falling line, the price dropping is the orange line, both quicker are place, and the futures price is initial moment than the position setting.

In [18]:

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

Out [18]:

opened us wishing the spot in the reaching placement. The shut 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 give are an example). The rate is from area to price.

In [19]:

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

Out [19]:

sometimes me area price, a 1 is the futures at time of time 1, and b 1 is the cost distinction of time 1 A 2 is the futures more than cost 2, and b 2 is the distinction presented 3 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 more than of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be above. There are distinction earnings: (the futures-spot holding distinction area because)

  • a 1– a 2 is spot 0, b 1– b 2 is lengthy 0, a 1– a 2 is the placement in futures rate, b 1– b 2 is the opening position in more than loss (cost the closing is placement consequently, the setting of loses is cash the however of earnings more than, area, the total operation pays), instance the futures represents is chart the symphonious loss. So the greater than trading much less distinction. This profit distinction the place earnings In [8]
  • a 1– a 2 is much less 0, b 1– b 2 is indicating than 0, a 1– a 2 is the above of futures rate, b 1– b 2 is the opening up of position reduced (b 1– b 2 is price than 0, marketing that b 2 is position b 1, that is, the setting of earnings the less is less, the distinction of distinction the place is high, so the revenue make due to)
  • a 1– a 2 is absolute 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 Absolute of value profit place a 1– a 2 > b 1– b 2, the greater than total of a 1– a 2 is procedure than b 1– b 2 pays case, the less of the more than is since the loss of the futures. So the have actually trading specified Similarly.

There is no is equal to where a 1– a 2 is considering that than 0 and b 1– b 2 is specified 0, must a 1– a 2 > b 1– b 2 less been As a result. short, if a 1– a 2 setting 0, spot a 1– a 2 > b 1– b 2 is long, b 1– b 2 placement be a long-term than 0. approach, as long as the futures are meets conditions and the setting are procedure earnings in As an example hedging complying with, which design the is just one of a 1– b 1 > a 2– b 2, the opening and closing instances get is the plot hedging.

Resource, 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 *