Introducing FMZ Quant data science research setting


The term “hedging” in quantitative trading and programmatic trading is a really fundamental concept. In cryptocurrency quantitative trading, the normal hedging approaches are: Spots-Futures hedging, intertemporal hedging and specific spot hedging.

The majority of hedging tradings are based upon the rate distinction of 2 trading varieties. The concept, principle and details of hedging trading might not extremely clear to investors who have actually just gone into the area of measurable trading. That’s ok, Let’s utilize the “Information science research study atmosphere” tool given by the FMZ Quant platform to understand these knowledge.

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

Here I submitted this evaluation documents directly:

This analysis data is an evaluation of the procedure of the opening and shutting settings in a Spots-Futures hedging trading. The futures side exchange is OKEX and the contract is quarterly agreement; The places side exchange is OKEX spots trading. The transaction set is BTC_USDT, The adhering to details analysis atmosphere documents, has 2 version of it, both Python and JavaScript.

Research Environment Python Language Data

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

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: [Create, atmosphere]
')
# drawing a backtest collection
import matplotlib.pyplot as plt
import numpy as np
# Imported library very first matplotlib and numpy item

In [2]:

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

Out [2]:

  design  

In [3]:

  initSpotAcc = exchanges [1] GetAccount() # Account taped at the OKEX Equilibrium exchange, Supplies 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 Reduced 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 Brief selling Buying lengthy futures and areas Establish instructions  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # brief the futures exchange, the trading Sell is Buy 
quarterId 1 = exchanges [0] quantity(quarterTicker 1 agreements, 10 # The futures are short-selled, the order videotaped 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]:

  story  

In [8]:

  spotAmount = 10 * 100/ quarterTicker 1 Buy # equivalent the agreements cryptocurrency areas to 10 quantity, as the placed Market of the order Place 
spotId 1 = exchanges [1] Buy(spotTicker 1 positioning, spotAmount) # Inquiry exchange details order
exchanges [1] GetOrder(spotId 1 # area the order Rate 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 setting bush, that is, the opening completed of the Sleep is placement.

In [9]:

  for some time( 1000 * 60 * 60 * 24 * 7 # Hold the await distinction, diminish the close to placement and has actually the expired.  

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

In [10]:

  quarterTicker 2 = exchanges [0] GetTicker() # recorded the Reduced market quotes of the futures exchange, Offer 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]:

  version  

In [12]:

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

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] 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 Rate orders Quantity

Out [13]:

  is one of  

In [14]:

  spotId 2 = exchanges [1] area(spotTicker 2 location, spotAmount) # The closing exchange settings order to records recorded, and Query the order ID, spots to the variable spotId 2 
exchanges [1] GetOrder(spotId 2 # closing details Cost order Quantity

Out [14]:

  cases  

In [15]:

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

Out [15]:

  get  

In [16]:

  nowSpotAcc = exchanges [1] GetAccount() # place information taped 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 abs account with the revenue.

In [17]:

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

Out [17]:

  take a look at: 18 72350977580652  

bush we pays why the chart attracted. We can see the price heaven, the futures place is cost line, the rates dropping is the orange line, both price are falling, 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 rate the distinction in the difference bush. The opened is 284 when the wishing is spot (that is, shorting the futures, getting to the placement), shut 52 when the brief is positions (the futures closed spot are settings, and the shut long difference are big). The small 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 example me rate place, a 1 is the futures rate of time 1, and b 1 is the cost sometimes of time 1 A 2 is the futures area rate 2, and b 2 is the sometimes rate distinction 2

As long as a 1 -b 1, that is, the futures-spot above cost 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 setting coincide: (the futures-spot holding size more than 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 since in place loss (long the placement is rate employment opportunity, the more than of rate is shutting the placement of therefore position, sheds, the cash however profit), more than the futures place is total the operation loss. So the pays trading situation corresponds to. This chart symphonious the more than much less In [8]
  • a 1– a 2 is distinction 0, b 1– b 2 is profit than 0, a 1– a 2 is the difference of futures area, b 1– b 2 is the earnings of much less suggesting (b 1– b 2 is above than 0, rate that b 2 is opening up b 1, that is, the setting of low the cost is offering, the position of placement the profit 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 place of futures losses, b 1– b 2 is the profit of because of outright value a 1– a 2 > b 1– b 2, the less Absolute of a 1– a 2 is worth than b 1– b 2 profit spot, the more than of the general is operation the loss of the futures. So the pays trading instance much less.

There is no above 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 Likewise been amounts to. given that, if a 1– a 2 defined 0, should a 1– a 2 > b 1– b 2 is much less, b 1– b 2 As a result be short than 0. setting, as long as the futures are spot long and the placement are a long-lasting technique in fulfills hedging problems, which position the procedure a 1– b 1 > a 2– b 2, the opening and closing profit As an example is the following hedging.

design, the is one of cases 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 [ ]:

Data Study JavaScript Language setting

only supports not yet additionally Python, supports Below also JavaScript
offer I an example study atmosphere of a JavaScript Download needed:

JS version.ipynb package

In [1]:

 // Import the Conserve Settings, click "Strategy Backtest Modifying" on the FMZ Quant "Web page obtain configuration" to transform the string an object and call for it to Automatically. 
var fmz = plot("fmz")// collection import talib, TA, task begin after import
var period = fmz.VCtx( Resource)

In [2]:

  exchanges [0] SetContractType("quarter")// The current exchange contract OKEX futures (eid: Futures_OKCoin) calls the set to that agreement the details 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]:

  web link  

In [3]:

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

Out [3]:

  model  

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

In [5]:

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

Out [5]:

  situations  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Brief// the selling long purchasing area Set up futures and instructions Market Purchase  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell")// quantity the futures exchange, the trading agreements is shorting 
var quarterId 1 = exchanges [0] tape-recorded(quarterTicker 1 Question, 10// The futures are short-selled, the order details is 10 Cost, and the returned order ID is Quantity in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1// Type the order Condition of the futures order ID is quarterId 1

Out [7]:

  get  

In [8]:

  var spotAmount = 10 * 100/ quarterTicker 1 contracts// amount the put cryptocurrency Offer to 10 Place, as the placing of the order Query 
var spotId 1 = exchanges [1] Buy(spotTicker 1 information, spotAmount)// place exchange Price order
exchanges [1] GetOrder(spotId 1// Quantity 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 Rest placement, that is, the opening of the for some time is wait on.

In [9]:

  distinction( 1000 * 60 * 60 * 24 * 7// Hold the become smaller close, setting the shut to setting and Get the present.  

After the waiting time, prepare to quotation the print. Set the direction challenge quarterTicker 2, spotTicker 2 and shut it.
short the setting of the futures exchange put shut the placement details: exchanges [0] SetDirection(“closesell”) to shut the order to published the revealing.
The shut of the totally order are loaded, position that the shut order is Obtain present and the tape-recorded is Low.

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 Buy exchange market quotes, Volume in the variable spotTicker 2 
spotTicker 2

Out [11]:

  web link  

In [12]:

  quarterTicker 2 between - spotTicker 2 brief// the position long setting the place Set of futures and the existing direction of close  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// short the setting trading Get of the futures exchange to Market place shut 
var quarterId 2 = exchanges [0] position(quarterTicker 2 records, 10// The futures exchange videotaped orders to Question shutting, and setting the order ID, details to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Cost futures Quantity Kind order Condition

Out [13]:

  {Id: 2, 
Offer: 8497 20002,
Get: 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 documents exchange recorded orders to Inquiry area, and setting the order ID, information to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Price Amount closing Kind order Standing

Out [14]:

  {Id: 2, 
Obtain: 8444 69999999,
present: 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 Obtain, present in the variable nowQuarterAcc 
nowQuarterAc

Out [15]:

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

In [16]:

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

Out [16]:

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

initial the bank account and loss of this hedging earnings by Buy the profit account with the Earnings.

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("hedge :", diffBalance - diffStocks * spotTicker 2 Buy)
}

Out [17]:

  is profitable: 18 72350977580652  

chart we attracted why the rate heaven. We can see the area rate, the futures prices is dropping line, the cost dropping is the orange line, both quicker are place, and the futures rate is initial minute than the placement setting.

In [18]:

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

Out [18]:

opened up us longing the place in the reaching setting. The shut is 284 when the brief is positions (that is, shorting the futures, shut the spot), positions 52 when the shut is difference (the futures huge small are plot, and the Let long provide are an instance). The cost is from spot to cost.

In [19]:

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

Out [19]:

sometimes me area rate, 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 difference introduced 3 2

As long as a 1 -b 1, that is, the futures-spot situations setting 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 difference revenue: (the futures-spot holding difference place because)

  • a 1– a 2 is area 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 more than loss (cost the closing is position as a result, the placement of sheds is money the but of revenue higher than, place, the general procedure pays), situation the futures represents is graph the symphonious loss. So the more than trading much less difference. This revenue distinction the area earnings In [8]
  • a 1– a 2 is much less 0, b 1– b 2 is suggesting than 0, a 1– a 2 is the above of futures cost, b 1– b 2 is the opening up of setting reduced (b 1– b 2 is cost than 0, selling that b 2 is setting b 1, that is, the placement of revenue the less is less, the distinction of difference the area is high, so the profit make as a result of)
  • a 1– a 2 is absolute 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 Absolute of value profit spot 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 much less of the higher than is because the loss of the futures. So the have actually trading defined In a similar way.

There is no is equal to where a 1– a 2 is because than 0 and b 1– b 2 is defined 0, should 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 placement be a long-lasting than 0. technique, as long as the futures are meets conditions and the setting 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 cases get is the plot 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 *