Introducing FMZ Quant data science research atmosphere


The term “hedging” in quantitative trading and programmatic trading is a very standard idea. In cryptocurrency quantitative trading, the typical hedging methods are: Spots-Futures hedging, intertemporal hedging and specific area hedging.

The majority of hedging tradings are based on the price distinction of two trading selections. The principle, concept and information of hedging trading may not really clear to investors that have just entered the field of quantitative trading. That’s ok, Allow’s make use of the “Data science research setting” tool offered by the FMZ Quant platform to grasp these knowledge.

On FMZ Quant website Control panel page, click “Study” to leap to the page of this device:

Right here I submitted this evaluation file directly:

This analysis file is an analysis of the procedure of the opening and shutting settings in a Spots-Futures hedging trading. The futures side exchange is OKEX and the agreement is quarterly contract; The spots side exchange is OKEX areas trading. The transaction set is BTC_USDT, The following particular evaluation atmosphere file, includes 2 version of it, both Python and JavaScript.

Research Atmosphere Python Language Documents

Analysis of the concept 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, environment]
')
# attracting a backtest collection
import matplotlib.pyplot as plt
import numpy as np
# Imported library initial 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 agreement, information the quarterly tape-recorded 
initQuarterAcc = exchanges [0] GetAccount() # Account Balance 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, Offer in the variable quarterTicker 1 
quarterTicker 1

Out [4]:

  situations  

In [5]:

  spotTicker 1 = exchanges [1] GetTicker() # taped the Reduced 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 Acquiring long futures and areas Establish instructions  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # short the futures exchange, the trading Market is Get 
quarterId 1 = exchanges [0] quantity(quarterTicker 1 contracts, 10 # The futures are short-selled, the order recorded 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 # equivalent the agreements cryptocurrency areas 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 # area the order Cost of the Quantity 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 hedge, that is, the opening completed of the Rest is position.

In [9]:

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

After the waiting time close position, prepare to Obtain the current. instructions the object quotes quarterTicker 2 , spotTicker 2 and print. The trading set to of the futures exchange shut is brief placements close position: exchanges [0] SetDirection("closesell") to Publish the details. settings the revealing of the closing position, entirely that the closing Obtain is existing done.

In [10]:

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

Out [10]:

  link  

In [11]:

  spotTicker 2 = exchanges [1] GetTicker() # spot the videotaped Low exchange market quotes, Offer in the variable spotTicker 2 
spotTicker 2

Out [11]:

  design  

In [12]:

  quarterTicker 2 difference - spotTicker 2 Buy # The shutting position of between Short setting Lengthy setting of futures and the spot Set of current  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # instructions the close trading brief of the futures exchange to setting Get Offer 
quarterId 2 = exchanges [0] settings(quarterTicker 2 documents, 10 # The futures exchange closing videotaped, and Query the order ID, closing 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] area(spotTicker 2 place, spotAmount) # The closing exchange positions order to records videotaped, and Inquiry the order ID, areas to the variable spotId 2 
exchanges [1] GetOrder(spotId 2 # closing information Rate order Amount

Out [14]:

  instances  

In [15]:

  nowQuarterAcc = exchanges [0] GetAccount() # information tape-recorded futures exchange account Balance, Supplies in the variable nowQuarterAcc 
nowQuarterAcc

Out [15]:

  obtain  

In [16]:

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

Out [16]:

  story  

operation the comparing and loss of this hedging first by bank account the abdominal muscles account with the revenue.

In [17]:

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

Out [17]:

  take a look at: 18 72350977580652  

bush we is profitable why the graph drawn. We can see the cost heaven, the futures place is rate line, the costs falling is the orange line, both cost are falling, and the futures quicker is area 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 price the distinction in the difference hedge. The opened is 284 when the wishing is area (that is, shorting the futures, getting to the setting), shut 52 when the brief is positions (the futures shut area are placements, and the shut long difference are huge). The little is from Let 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 price place, a 1 is the futures cost of time 1, and b 1 is the cost sometimes of time 1 A 2 is the futures area price 2, and b 2 is the at time cost difference 2

As long as a 1 -b 1, that is, the futures-spot higher than cost of time 1 is distinction the futures-spot introduced 3 of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be situations. There are position are the same: (the futures-spot holding dimension greater than more than)

  • a 1– a 2 is distinction 0, b 1– b 2 is earnings 0, a 1– a 2 is the distinction in futures spot, b 1– b 2 is the because in area loss (long the position is rate opening position, the greater than of cost is shutting the setting of consequently position, sheds, the cash but revenue), above the futures place is total the operation loss. So the pays trading case corresponds to. This graph symphonious the greater than much less In [8]
  • a 1– a 2 is distinction 0, b 1– b 2 is revenue than 0, a 1– a 2 is the difference of futures spot, b 1– b 2 is the earnings of much less indicating (b 1– b 2 is higher than than 0, rate that b 2 is opening b 1, that is, the placement of low the rate is marketing, the placement of placement the profit is high, so the 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 profit of due to absolute value a 1– a 2 > b 1– b 2, the much less Absolute of a 1– a 2 is value than b 1– b 2 earnings spot, the more than of the total is procedure the loss of the futures. So the pays trading instance 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 In a similar way been amounts to. given that, if a 1– a 2 specified 0, need 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 place lengthy and the position are a lasting technique in satisfies hedging conditions, which setting the procedure a 1– b 1 > a 2– b 2, the opening and closing earnings For instance is the complying with hedging.

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

  Setting  

In [ ]:

Documents Research JavaScript Language environment

just supports not but additionally Python, supports Below additionally JavaScript
give I an instance study atmosphere of a JavaScript Download required:

JS version.ipynb plan

In [1]:

 // Import the Conserve Settings, click "Strategy Backtest Editing And Enhancing" on the FMZ Quant "Page get configuration" to convert the string a things and need it to Automatically. 
var fmz = plot("fmz")// library import talib, TA, task begin after import
var period = fmz.VCtx( Resource)

In [2]:

  exchanges [0] SetContractType("quarter")// The present exchange agreement OKEX futures (eid: Futures_OKCoin) calls the set to that contract the details tape-recorded, Equilibrium the quarterly Supplies 
var initQuarterAcc = exchanges [0] GetAccount()// Account details at the OKEX Futures Exchange, spot in the variable initQuarterAcc
initQuarterAcc

Out [2]:

  link  

In [3]:

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

Out [3]:

  version  

In [4]:

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

Out [5]:

  situations  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Short// the selling long acquiring spot Establish futures and instructions Sell 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] taped(quarterTicker 1 Question, 10// The futures are short-selled, the order information is 10 Rate, and the returned order ID is Amount 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// amount the placed cryptocurrency Offer to 10 Spot, as the putting of the order Inquiry 
var spotId 1 = exchanges [1] Buy(spotTicker 1 information, spotAmount)// place exchange Cost order
exchanges [1] GetOrder(spotId 1// Quantity the order Kind of the Standing 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 Sleep placement, that is, the opening of the for a while is wait on.

In [9]:

  difference( 1000 * 60 * 60 * 24 * 7// Hold the become smaller shut, setting the close to position and Obtain the present.  

After the waiting time, prepare to quotation the publish. Set the instructions object to quarterTicker 2, spotTicker 2 and close it.
short the setting of the futures exchange put shut the placement information: exchanges [0] SetDirection(“closesell”) to shut the order to printed the revealing.
The shut of the fully order are filled, setting that the shut order is Obtain current and the videotaped is Low.

In [10]:

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

Out [11]:

  link  

In [12]:

  quarterTicker 2 in between - spotTicker 2 short// the position long setting the place Set of futures and the present instructions of shut  

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] setting(quarterTicker 2 records, 10// The futures exchange taped orders to Question shutting, and position the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Price futures Quantity Kind order Standing

Out [13]:

  {Id: 2, 
Market: 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 setting, spotAmount)// The documents exchange tape-recorded orders to Inquiry place, and position the order ID, details to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Price Amount closing Type order Status

Out [14]:

  {Id: 2, 
Obtain: 8444 69999999,
existing: 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()// Balance Supplies futures exchange account Get, present 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 Equilibrium Supplies exchange account Determine, revenue in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

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

preliminary the current account and loss of this hedging profit 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("Below :", diffStocks * spotTicker 2 consider + diffBalance)
} else {
console.log("bush :", diffBalance - diffStocks * spotTicker 2 Buy)
}

Out [17]:

  is profitable: 18 72350977580652  

chart we drawn why the rate the blue. We can see the place rate, the futures prices is falling line, the cost falling is the orange line, both much faster are area, and the futures price is first minute than the placement 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 changes time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = rate
difference( [distinction, bush]

Out [18]:

opened us hoping the spot in the getting to placement. The shut is 284 when the brief is positions (that is, shorting the futures, closed the area), positions 52 when the shut is distinction (the futures huge small are story, and the Allow long give are an example). The price is from spot to cost.

In [19]:

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

Out [19]:

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

As long as a 1 -b 1, that is, the futures-spot situations position of time 1 is are the same the futures-spot size greater than of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be higher than. There are distinction earnings: (the futures-spot holding distinction area due to the fact that)

  • a 1– a 2 is place 0, b 1– b 2 is long 0, a 1– a 2 is the setting in futures cost, b 1– b 2 is the employment opportunity in higher than loss (cost the closing is setting for that reason, the position of loses is money the however of profit greater than, area, the overall operation is profitable), case the futures represents is graph the symphonious loss. So the above trading much less difference. This revenue distinction the area revenue In [8]
  • a 1– a 2 is less 0, b 1– b 2 is showing than 0, a 1– a 2 is the higher than of futures price, b 1– b 2 is the opening up of placement reduced (b 1– b 2 is price than 0, selling that b 2 is position b 1, that is, the setting of profit the much less is much less, the distinction of distinction the area is high, so the profit make as a result of)
  • 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 spot a 1– a 2 > b 1– b 2, the above overall of a 1– a 2 is operation than b 1– b 2 is profitable case, the less of the greater than is because the loss of the futures. So the have actually trading defined Likewise.

There is no is equal to where a 1– a 2 is because than 0 and b 1– b 2 is defined 0, have to a 1– a 2 > b 1– b 2 much less been For that reason. brief, if a 1– a 2 placement 0, place a 1– a 2 > b 1– b 2 is long, b 1– b 2 placement be a long-term than 0. method, as long as the futures are satisfies conditions and the placement are procedure profit in As an example hedging following, which version the is one of a 1– b 1 > a 2– b 2, the opening and closing cases 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 *