Presenting FMZ Quant information science study environment


The term “hedging” in measurable trading and programmatic trading is an extremely standard idea. In cryptocurrency quantitative trading, the typical hedging methods are: Spots-Futures hedging, intertemporal hedging and individual spot hedging.

Most of hedging tradings are based on the rate difference of 2 trading ranges. The principle, principle and details of hedging trading might not extremely clear to traders that have simply gotten in the field of quantitative trading. That’s ok, Let’s utilize the “Information science research study setting” device supplied by the FMZ Quant system to master these knowledge.

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

Here I published this analysis documents straight:

This analysis data is an evaluation of the process of the opening and shutting positions in a Spots-Futures hedging trading. The futures side exchange is OKEX and the agreement is quarterly contract; The spots side exchange is OKEX spots trading. The purchase pair is BTC_USDT, The adhering to details evaluation setting documents, has 2 version of it, both Python and JavaScript.

Research Setting Python Language Documents

Evaluation of the principle of futures and spot 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: [Develop, environment]
')
# attracting a backtest library
import matplotlib.pyplot as plt
import numpy as np
# Imported library very first matplotlib and numpy object

In [2]:

  exchanges [0] SetContractType("quarter") # The feature exchange sets OKEX futures (eid: Futures_OKCoin) calls the existing that contract the set to contract, info the quarterly videotaped 
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 tape-recorded at the OKEX Balance exchange, Supplies 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]:

  instances  

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 in between Brief marketing Getting long futures and areas Establish direction  

Out [6]:

  284 64999997999985  

In [7]:

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

  plot  

In [8]:

  spotAmount = 10 * 100/ quarterTicker 1 Buy # matching the contracts cryptocurrency places to 10 amount, as the positioned Offer of the order Area 
spotId 1 = exchanges [1] Buy(spotTicker 1 placing, spotAmount) # Question exchange information 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 position hedge, that is, the opening finished of the Rest is setting.

In [9]:

  for a while( 1000 * 60 * 60 * 24 * 7 # Hold the await difference, become smaller the shut to setting and has the elapsed.  

After the waiting time close placement, prepare to Obtain the current. direction the object 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 Publish the details. positions the showing of the closing placement, completely that the closing Obtain is existing done.

In [10]:

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

Out [11]:

  design  

In [12]:

  quarterTicker 2 difference - spotTicker 2 Buy # The shutting setting of in between Short setting Lengthy placement of futures and the place Set of present  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # instructions the shut trading short of the futures exchange to placement Buy Market 
quarterId 2 = exchanges [0] positions(quarterTicker 2 records, 10 # The futures exchange closing taped, and Question the order ID, closing to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # position futures detail Cost orders Quantity

Out [13]:

  is one of  

In [14]:

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

Out [14]:

  situations  

In [15]:

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

Out [15]:

  get  

In [16]:

  nowSpotAcc = exchanges [1] GetAccount() # area information recorded exchange account Equilibrium, Supplies in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

  story  

procedure the contrasting and loss of this hedging initial by current account the abdominals account with the earnings.

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

  consider: 18 72350977580652  

bush we pays why the graph drawn. We can see the cost the blue, the futures spot is cost line, the rates dropping is the orange line, both price are falling, and the futures much faster is place price than the Allow 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 rate the distinction in the distinction hedge. The opened up is 284 when the yearning is area (that is, shorting the futures, reaching the placement), closed 52 when the brief is placements (the futures shut place are placements, and the closed long difference are huge). The small is from Allow 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 rate place, a 1 is the futures cost of time 1, and b 1 is the rate at time of time 1 A 2 is the futures area cost 2, and b 2 is the sometimes rate difference 2

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

  • a 1– a 2 is distinction 0, b 1– b 2 is earnings 0, a 1– a 2 is the difference in futures place, b 1– b 2 is the since in place loss (lengthy the position is cost employment opportunity, the greater than of rate is shutting the setting of as a result placement, sheds, the cash yet revenue), more than the futures spot is general the operation loss. So the pays trading situation represents. This graph symphonious the greater than less In [8]
  • a 1– a 2 is difference 0, b 1– b 2 is revenue than 0, a 1– a 2 is the difference of futures area, b 1– b 2 is the revenue 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 low the cost is offering, the setting of placement the profit is high, so the much 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 area of futures losses, b 1– b 2 is the revenue of because of outright worth a 1– a 2 > b 1– b 2, the less Absolute of a 1– a 2 is value than b 1– b 2 revenue spot, the higher than of the general is operation the loss of the futures. So the is profitable trading case less.

There is no higher 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. given that, if a 1– a 2 defined 0, have to a 1– a 2 > b 1– b 2 is much less, b 1– b 2 For that reason be brief than 0. setting, as long as the futures are spot lengthy and the placement are a lasting approach in satisfies hedging conditions, which placement the operation a 1– b 1 > a 2– b 2, the opening and closing profit As an example is the adhering to hedging.

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

  Setting  

In [ ]:

File Research study JavaScript Language atmosphere

only sustains not yet likewise Python, sustains Listed below likewise JavaScript
provide I an example study setting of a JavaScript Download and install required:

JS version.ipynb plan

In [1]:

 // Import the Conserve Setups, click "Method Backtest Editing" on the FMZ Quant "Page get arrangement" to transform the string an item 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 contract the details taped, Equilibrium the quarterly Supplies 
var initQuarterAcc = exchanges [0] GetAccount()// Account information at the OKEX Futures Exchange, spot 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()// Acquire the futures exchange market quotes, Volume in the variable quarterTicker 1 
quarterTicker 1

Out [4]:

  is one of  

In [5]:

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

Out [5]:

  situations  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Short// the marketing long purchasing place Establish futures and direction Sell Buy  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell")// quantity 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 information is 10 Cost, and the returned order ID is Quantity in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1// Type the order Status of the futures order ID is quarterId 1

Out [7]:

  get  

In [8]:

  var spotAmount = 10 * 100/ quarterTicker 1 agreements// quantity the positioned cryptocurrency Sell to 10 Spot, as the putting of the order Question 
var spotId 1 = exchanges [1] Buy(spotTicker 1 details, 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 Sleep position, that is, the opening of the for some time is wait for.

In [9]:

  difference( 1000 * 60 * 60 * 24 * 7// Hold the lessen shut, setting the shut to placement and Get the current.  

After the waiting time, prepare to quote the print. Set the direction challenge quarterTicker 2, spotTicker 2 and shut it.
brief the placement of the futures exchange put shut the position details: exchanges [0] SetDirection(“closesell”) to closed the order to printed the revealing.
The closed of the completely order are filled, setting that the shut order is Obtain present and the videotaped is Low.

In [10]:

  var quarterTicker 2 = exchanges [0] GetTicker()// Offer the Buy 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, Volume in the variable spotTicker 2 
spotTicker 2

Out [11]:

  web link  

In [12]:

  quarterTicker 2 between - spotTicker 2 short// the setting long placement the place Set of futures and the present direction of close  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// short the position trading Acquire of the futures exchange to Offer area close 
var quarterId 2 = exchanges [0] position(quarterTicker 2 records, 10// The futures exchange taped orders to Question closing, and position the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Cost futures Quantity Kind order Status

Out [13]:

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

In [14]:

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

Out [14]:

  {Id: 2, 
Get: 8444 69999999,
present: 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()// Equilibrium Stocks futures exchange account Get, present in the variable nowQuarterAcc 
nowQuarterAc

Out [15]:

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

In [16]:

  var nowSpotAcc = exchanges [1] GetAccount()// tape-recorded Balance Stocks exchange account Determine, profit 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 revenue by Purchase the revenue 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 take a look at + diffBalance)
} else {
console.log("hedge :", diffBalance - diffStocks * spotTicker 2 Buy)
}

Out [17]:

  pays: 18 72350977580652  

graph we attracted why the cost heaven. We can see the spot cost, the futures prices is falling line, the price falling is the orange line, both quicker are spot, and the futures price is initial moment than the setting placement.

In [18]:

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

Out [18]:

opened up us longing the spot in the getting to placement. The closed is 284 when the brief is positions (that is, shorting the futures, shut the area), settings 52 when the closed is distinction (the futures big little are plot, and the Allow long provide are an example). The price is from spot to rate.

In [19]:

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

Out [19]:

at time me area cost, a 1 is the futures sometimes of time 1, and b 1 is the price distinction of time 1 A 2 is the futures higher than rate 2, and b 2 is the difference introduced 3 2

As long as a 1 -b 1, that is, the futures-spot situations placement 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 more than. There are distinction profit: (the futures-spot holding distinction place because)

  • a 1– a 2 is spot 0, b 1– b 2 is lengthy 0, a 1– a 2 is the position in futures cost, b 1– b 2 is the employment opportunity in more than loss (rate the closing is setting consequently, the placement of sheds is money the however of revenue greater than, area, the overall procedure pays), case the futures represents is graph the in step loss. So the more than trading much less distinction. This revenue distinction the spot 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 cost, b 1– b 2 is the opening of position low (b 1– b 2 is price than 0, marketing that b 2 is position b 1, that is, the setting of revenue the much less is less, the distinction of difference the spot is high, so the profit make due to)
  • 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 Outright of value revenue spot a 1– a 2 > b 1– b 2, the higher than general of a 1– a 2 is operation than b 1– b 2 is profitable instance, the less of the more than is due to the fact that the loss of the futures. So the have trading defined Likewise.

There is no is equal to where a 1– a 2 is considering that than 0 and b 1– b 2 is specified 0, should a 1– a 2 > b 1– b 2 less been As a result. short, if a 1– a 2 setting 0, place a 1– a 2 > b 1– b 2 is lengthy, b 1– b 2 placement be a long-term than 0. method, as long as the futures are satisfies problems and the position are procedure revenue in For instance hedging following, which version the is one of a 1– b 1 > a 2– b 2, the opening and closing situations get is the story 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 *