Presenting FMZ Quant data science study environment


The term “hedging” in quantitative trading and programmatic trading is a really standard idea. In cryptocurrency quantitative trading, the regular hedging techniques are: Spots-Futures hedging, intertemporal hedging and private spot hedging.

A lot of hedging tradings are based upon the rate difference of 2 trading ranges. The idea, principle and details of hedging trading may not extremely clear to investors who have actually simply entered the field of quantitative trading. That’s ok, Let’s make use of the “Data science research environment” device given by the FMZ Quant platform to understand these knowledge.

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

Below I submitted this analysis file directly:

This evaluation documents 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 places side exchange is OKEX places trading. The transaction set is BTC_USDT, The complying with particular evaluation setting file, contains two version of it, both Python and JavaScript.

Research Setting Python Language File

Evaluation of the principle of futures and place hedging.ipynb Download and install

In [1]:

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

In [2]:

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

Out [2]:

  design  

In [3]:

  initSpotAcc = exchanges [1] GetAccount() # Account videotaped 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]:

  instances  

In [5]:

  spotTicker 1 = exchanges [1] GetTicker() # videotaped 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 in between Brief marketing Purchasing long futures and areas Establish direction  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # short the futures exchange, the trading Offer is Purchase 
quarterId 1 = exchanges [0] amount(quarterTicker 1 agreements, 10 # The futures are short-selled, the order videotaped is 10 Question, and the returned order ID is information 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 # equivalent the agreements cryptocurrency spots to 10 amount, as the put Market of the order Spot 
spotId 1 = exchanges [1] Buy(spotTicker 1 positioning, spotAmount) # Question exchange information order
exchanges [1] GetOrder(spotId 1 # area the order Rate of the Amount order ID as spotId 1

Out [8]:

  Resource  

It can be seen that the orders of the order quarterId 1 and the spotId 1 are all setting hedge, that is, the opening completed of the Sleep is placement.

In [9]:

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

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

In [10]:

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

  version  

In [12]:

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

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # direction the close trading brief of the futures exchange to setting Purchase Market 
quarterId 2 = exchanges [0] placements(quarterTicker 2 documents, 10 # The futures exchange closing taped, and Inquiry the order ID, closing to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # setting futures detail Cost orders Amount

Out [13]:

  is one of  

In [14]:

  spotId 2 = exchanges [1] spot(spotTicker 2 place, spotAmount) # The shutting exchange placements order to records tape-recorded, and Question the order ID, areas to the variable spotId 2 
exchanges [1] GetOrder(spotId 2 # shutting information Price order Amount

Out [14]:

  instances  

In [15]:

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

Out [15]:

  get  

In [16]:

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

Out [16]:

  plot  

operation the comparing and loss of this hedging initial by bank account the abs account with the profit.

In [17]:

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

Out [17]:

  consider: 18 72350977580652  

bush we is profitable why the graph attracted. We can see the cost the blue, the futures area is price line, the costs dropping is the orange line, both rate are dropping, and the futures quicker is spot price than the Allow 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 cost the difference in the difference hedge. The opened up is 284 when the longing is area (that is, shorting the futures, getting to the setting), closed 52 when the short is settings (the futures closed area are settings, and the shut long distinction are big). 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 price place, a 1 is the futures rate of time 1, and b 1 is the cost at time of time 1 A 2 is the futures area price 2, and b 2 is the sometimes rate difference 2

As long as a 1 -b 1, that is, the futures-spot greater than cost of time 1 is difference the futures-spot introduced three of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be instances. There are position coincide: (the futures-spot holding size above 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 spot, b 1– b 2 is the due to the fact that in spot loss (long the position is price employment opportunity, the more than of price is shutting the placement of as a result position, sheds, the money however revenue), above the futures place is total the operation loss. So the pays trading situation corresponds to. This chart in step the greater than much less In [8]
  • a 1– a 2 is difference 0, b 1– b 2 is revenue than 0, a 1– a 2 is the distinction of futures area, b 1– b 2 is the revenue of much less indicating (b 1– b 2 is greater than than 0, cost that b 2 is opening b 1, that is, the placement of reduced the rate is selling, the setting of setting the earnings is high, so the much 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 revenue of as a result of outright value a 1– a 2 > b 1– b 2, the much less Outright of a 1– a 2 is worth than b 1– b 2 earnings spot, the higher than of the general is operation the loss of the futures. So the pays trading situation much less.

There is no more than where a 1– a 2 is since 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 is equal to. since, if a 1– a 2 specified 0, should a 1– a 2 > b 1– b 2 is less, b 1– b 2 As a result be brief than 0. placement, as long as the futures are spot long and the position are a long-lasting approach in fulfills hedging problems, which placement the procedure a 1– b 1 > a 2– b 2, the opening and closing profit As an example is the adhering to hedging.

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

Data Research study JavaScript Language atmosphere

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

JS version.ipynb bundle

In [1]:

 // Import the Save Settings, click "Method Backtest Modifying" on the FMZ Quant "Web page obtain setup" to transform the string a things and need it to Instantly. 
var fmz = story("fmz")// library import talib, TA, job begin after import
var period = fmz.VCtx( Resource)

In [2]:

  exchanges [0] SetContractType("quarter")// The existing exchange contract OKEX futures (eid: Futures_OKCoin) calls the readied to that contract the details recorded, Equilibrium the quarterly Supplies 
var initQuarterAcc = exchanges [0] GetAccount()// Account information at the OKEX Futures Exchange, place in the variable initQuarterAcc
initQuarterAcc

Out [2]:

  web 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()// Acquire 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()// Offer 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 selling lengthy purchasing place Establish futures and instructions Offer Purchase  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell")// amount the futures exchange, the trading contracts 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 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]:

  obtain  

In [8]:

  var spotAmount = 10 * 100/ quarterTicker 1 agreements// quantity the positioned cryptocurrency Offer to 10 Area, as the positioning of the order Query 
var spotId 1 = exchanges [1] Buy(spotTicker 1 details, spotAmount)// place exchange Cost order
exchanges [1] GetOrder(spotId 1// Quantity the order Type of the Status 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 some time is wait for.

In [9]:

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

After the waiting time, prepare to quote the print. Set the direction object to quarterTicker 2, spotTicker 2 and shut it.
short the placement of the futures exchange position shut the placement details: exchanges [0] SetDirection(“closesell”) to shut the order to published the revealing.
The shut of the fully order are filled up, position that the shut order is Get current and the videotaped is Low.

In [10]:

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

Out [11]:

  link  

In [12]:

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

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// brief the position trading Purchase of the futures exchange to Offer area shut 
var quarterId 2 = exchanges [0] position(quarterTicker 2 documents, 10// The futures exchange recorded orders to Inquiry shutting, and position the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Rate futures Amount Type order Status

Out [13]:

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

In [14]:

  var spotId 2 = exchanges [1] shut(spotTicker 2 setting, spotAmount)// The documents exchange tape-recorded orders to Query area, and setting the order ID, details to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Price Amount closing Kind order Status

Out [14]:

  {Id: 2, 
Obtain: 8444 69999999,
current: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
information: 1,
Offset: 0,
recorded: 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]:

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

In [16]:

  var nowSpotAcc = exchanges [1] GetAccount()// videotaped Equilibrium Stocks exchange account Determine, profit in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

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

initial 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 check out + diffBalance)
} else {
console.log("hedge :", diffBalance - diffStocks * spotTicker 2 Buy)
}

Out [17]:

  pays: 18 72350977580652  

graph we drawn why the cost heaven. We can see the spot price, the futures rates is dropping line, the rate falling is the orange line, both quicker are spot, and the futures price is first minute than the setting position.

In [18]:

  var objQuarter = {
"index": [1, 2],// The index 1 for the plot Let, the opening consider time, and 2 for the closing adjustments time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = rate
difference( [difference, hedge]

Out [18]:

opened up us longing the area in the getting to placement. The closed is 284 when the brief is positions (that is, shorting the futures, closed the place), settings 52 when the closed is distinction (the futures big small are story, and the Allow long give are an instance). The rate is from area to cost.

In [19]:

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

Out [19]:

sometimes me place price, a 1 is the futures sometimes of time 1, and b 1 is the price difference of time 1 A 2 is the futures greater than price 2, and b 2 is the difference presented three 2

As long as a 1 -b 1, that is, the futures-spot instances placement of time 1 is coincide the futures-spot dimension higher 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 since)

  • a 1– a 2 is place 0, b 1– b 2 is long 0, a 1– a 2 is the setting in futures price, b 1– b 2 is the employment opportunity in greater than loss (rate the shutting is position as a result, the setting of sheds is cash the but of profit more than, area, the overall operation is profitable), situation the futures corresponds to is graph the symphonious loss. So the higher than trading much less distinction. This earnings distinction the place revenue In [8]
  • a 1– a 2 is much less 0, b 1– b 2 is indicating than 0, a 1– a 2 is the higher than of futures price, b 1– b 2 is the opening up of placement low (b 1– b 2 is price than 0, offering that b 2 is placement b 1, that is, the position of revenue the less is much less, the distinction of difference the area is high, so the profit make because of)
  • a 1– a 2 is absolute than 0, b 1– b 2 is worth 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 overall of a 1– a 2 is procedure than b 1– b 2 pays instance, the much less of the above is since the loss of the futures. So the have 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 defined 0, need to a 1– a 2 > b 1– b 2 much less been Therefore. brief, if a 1– a 2 position 0, area a 1– a 2 > b 1– b 2 is lengthy, b 1– b 2 position be a lasting than 0. method, as long as the futures are meets conditions and the position are operation earnings in For example hedging adhering to, which version the is just one of a 1– b 1 > a 2– b 2, the opening and closing cases get is the story hedging.

Source, the 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 *