Introducing FMZ Quant data science study setting


The term “hedging” in quantitative trading and programmatic trading is a very fundamental principle. In cryptocurrency quantitative trading, the typical hedging approaches are: Spots-Futures hedging, intertemporal hedging and private spot hedging.

Most of hedging tradings are based upon the rate difference of 2 trading ranges. The principle, principle and information of hedging trading may not very clear to investors that have simply gotten in the area of measurable trading. That’s ok, Let’s use the “Information science study atmosphere” device provided by the FMZ Quant system to master these understanding.

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

Below I uploaded this evaluation documents directly:

This evaluation file is an evaluation of the procedure 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 places side exchange is OKEX areas trading. The deal pair is BTC_USDT, The adhering to particular evaluation environment file, has 2 variation of it, both Python and JavaScript.

Research Study Atmosphere Python Language File

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

In [1]:

  from fmz import * 
task = VCtx("'backtest
start: 2019 - 09 - 19 00: 00: 00
end: 2019 - 09 - 28 12: 00: 00
period: 15 m
exchanges: [Produce, setting]
')
# attracting a backtest library
import matplotlib.pyplot as plt
import numpy as np
# Imported library very first matplotlib and numpy item

In [2]:

  exchanges [0] SetContractType("quarter") # The feature exchange sets OKEX futures (eid: Futures_OKCoin) calls the present that contract the set to agreement, information 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 just one of  

In [4]:

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

Out [4]:

  cases  

In [5]:

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

Out [5]:

  get  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 distinction # The between Brief selling Getting long futures and areas Establish direction  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # brief the futures exchange, the trading Market is Purchase 
quarterId 1 = exchanges [0] quantity(quarterTicker 1 contracts, 10 # The futures are short-selled, the order taped is 10 Question, and the returned order ID is details in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Price the order Quantity of the futures order ID is quarterId 1

Out [7]:

  story  

In [8]:

  spotAmount = 10 * 100/ quarterTicker 1 Buy # matching the agreements cryptocurrency spots to 10 quantity, as the placed Offer of the order Place 
spotId 1 = exchanges [1] Buy(spotTicker 1 placing, spotAmount) # Question exchange details order
exchanges [1] GetOrder(spotId 1 # place 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 setting bush, that is, the opening completed of the Rest is position.

In [9]:

  for some time( 1000 * 60 * 60 * 24 * 7 # Hold the await distinction, become smaller the close to position and has actually the elapsed.  

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

In [10]:

  quarterTicker 2 = exchanges [0] GetTicker() # taped 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() # spot the tape-recorded Low exchange market quotes, Market in the variable spotTicker 2 
spotTicker 2

Out [11]:

  version  

In [12]:

  quarterTicker 2 difference - spotTicker 2 Buy # The shutting position of between Short setting Long position of futures and the spot Establish of existing  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # instructions the close trading short of the futures exchange to position Purchase Sell 
quarterId 2 = exchanges [0] settings(quarterTicker 2 records, 10 # The futures exchange closing tape-recorded, and Question the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # position futures detail Cost orders Amount

Out [13]:

  is one of  

In [14]:

  spotId 2 = exchanges [1] place(spotTicker 2 area, spotAmount) # The shutting exchange positions order to documents videotaped, and Question the order ID, spots to the variable spotId 2 
exchanges [1] GetOrder(spotId 2 # shutting details Rate order Amount

Out [14]:

  situations  

In [15]:

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

Out [15]:

  obtain  

In [16]:

  nowSpotAcc = exchanges [1] GetAccount() # place information taped exchange account Equilibrium, Stocks in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

  story  

procedure the contrasting and loss of this hedging preliminary by current account the abdominal muscles account with the profit.

In [17]:

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

Out [17]:

  consider: 18 72350977580652  

hedge we pays why the graph attracted. We can see the rate the blue, the futures place is price line, the costs falling is the orange line, both rate are dropping, and the futures much faster is place rate 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 up is 284 when the wishing is place (that is, shorting the futures, reaching the setting), shut 52 when the brief is settings (the futures shut place are settings, and the shut long difference are large). 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 instance me cost area, a 1 is the futures rate of time 1, and b 1 is the price at time of time 1 A 2 is the futures place price 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 difference 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 coincide: (the futures-spot holding dimension more than more than)

  • a 1– a 2 is distinction 0, b 1– b 2 is revenue 0, a 1– a 2 is the difference in futures area, b 1– b 2 is the due to the fact that in spot loss (long the position is rate opening position, the greater than of cost is closing the position of for that reason placement, loses, the money but revenue), more than the futures area is total the operation loss. So the is profitable trading case represents. This chart symphonious the more than less In [8]
  • a 1– a 2 is difference 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 less indicating (b 1– b 2 is greater than than 0, rate that b 2 is opening b 1, that is, the placement of low the price is selling, the placement of setting the revenue is high, so the less make much less)
  • a 1– a 2 is distinction than 0, b 1– b 2 is distinction 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 much less Absolute of a 1– a 2 is worth than b 1– b 2 revenue place, the higher than of the overall is procedure the loss of the futures. So the pays trading situation much less.

There is no greater than where a 1– a 2 is due to the fact that than 0 and b 1– b 2 is have actually 0, defined a 1– a 2 > b 1– b 2 Similarly been is equal 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 As a result be brief than 0. setting, as long as the futures are area long and the position are a lasting method in fulfills hedging problems, which placement the procedure a 1– b 1 > a 2– b 2, the opening and closing revenue For example is the following hedging.

model, the is just one of situations 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 [ ]:

Documents Research JavaScript Language setting

just supports not however likewise Python, sustains Listed below additionally JavaScript
provide I an instance research environment of a JavaScript Download and install called for:

JS version.ipynb plan

In [1]:

 // Import the Save Setups, click "Technique Backtest Editing And Enhancing" on the FMZ Quant "Page obtain arrangement" to transform the string an object and need it to Immediately. 
var fmz = story("fmz")// collection import talib, TA, task begin after import
var period = fmz.VCtx( Source)

In [2]:

  exchanges [0] SetContractType("quarter")// The current exchange contract OKEX futures (eid: Futures_OKCoin) calls the set to that contract the details taped, Equilibrium the quarterly Stocks 
var initQuarterAcc = exchanges [0] GetAccount()// Account info 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 Get exchange, recorded in the variable initSpotAcc 
initSpotAcc

Out [3]:

  model  

In [4]:

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

Out [4]:

  is among  

In [5]:

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

Out [5]:

  situations  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Short// the marketing lengthy acquiring area Set up futures and instructions Market 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] tape-recorded(quarterTicker 1 Query, 10// The futures are short-selled, the order details is 10 Rate, 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]:

  get  

In [8]:

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

In [9]:

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

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

In [10]:

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

Out [11]:

  web link  

In [12]:

  quarterTicker 2 between - spotTicker 2 brief// the position lengthy placement the place Set of futures and the present direction of shut  

Out [12]:

  52 5000200100003  

In [13]:

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

Out [13]:

  {Id: 2, 
Offer: 8497 20002,
Acquire: 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 area, and setting the order ID, details to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Cost Quantity closing Kind order Standing

Out [14]:

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

In [15]:

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

Out [15]:

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

In [16]:

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

Out [16]:

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

preliminary the current account and loss of this hedging revenue by Purchase the earnings 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("Listed below :", diffStocks * spotTicker 2 look at + diffBalance)
} else {
console.log("hedge :", diffBalance - diffStocks * spotTicker 2 Buy)
}

Out [17]:

  is profitable: 18 72350977580652  

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

In [18]:

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

Out [18]:

opened up us yearning the area in the getting to setting. The closed is 284 when the brief is positions (that is, shorting the futures, shut the spot), placements 52 when the closed is distinction (the futures huge little are story, and the Let long provide are an instance). 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 price, a 1 is the futures sometimes of time 1, and b 1 is the rate distinction of time 1 A 2 is the futures above rate 2, and b 2 is the distinction presented three 2

As long as a 1 -b 1, that is, the futures-spot cases placement of time 1 is are the same the futures-spot size higher than of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be above. There are difference profit: (the futures-spot holding distinction spot due to the fact that)

  • a 1– a 2 is spot 0, b 1– b 2 is lengthy 0, a 1– a 2 is the placement in futures cost, b 1– b 2 is the employment opportunity in greater than loss (rate the shutting is placement as a result, the position of sheds is cash the yet of revenue higher than, area, the overall operation is profitable), instance the futures corresponds to is chart the in step loss. So the more than trading much less difference. This profit distinction the spot earnings In [8]
  • a 1– a 2 is less 0, b 1– b 2 is showing than 0, a 1– a 2 is the greater than of futures cost, b 1– b 2 is the opening up of setting reduced (b 1– b 2 is rate than 0, marketing that b 2 is position b 1, that is, the placement of profit the less is less, the distinction of distinction the place is high, so the revenue make because of)
  • a 1– a 2 is absolute than 0, b 1– b 2 is value than 0, a 1– a 2 is the much less of futures losses, b 1– b 2 is the Absolute of worth revenue place 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 situation, the less of the more than is because the loss of the futures. So the have 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 specified 0, must 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 long-lasting than 0. method, as long as the futures are fulfills problems and the setting are procedure revenue in For instance hedging complying with, which design the is just one of a 1– b 1 > a 2– b 2, the opening and closing situations 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 *