Presenting FMZ Quant information science study setting


The term “hedging” in measurable trading and programmatic trading is an extremely standard concept. In cryptocurrency quantitative trading, the regular hedging techniques are: Spots-Futures hedging, intertemporal hedging and private spot hedging.

The majority of hedging tradings are based upon the rate distinction of two trading varieties. The idea, concept and information of hedging trading may not extremely clear to traders who have actually just gone into the field of quantitative trading. That’s ok, Let’s use the “Information science study atmosphere” tool offered by the FMZ Quant platform to master these understanding.

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

Here I posted this evaluation documents directly:

This analysis documents 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 contract is quarterly agreement; The places side exchange is OKEX places trading. The deal pair is BTC_USDT, The adhering to details evaluation atmosphere file, contains two version of it, both Python and JavaScript.

Research Environment Python Language Documents

Evaluation of the concept of futures and spot hedging.ipynb Download and install

In [1]:

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

In [2]:

  exchanges [0] SetContractType("quarter") # The feature exchange establishes OKEX futures (eid: Futures_OKCoin) calls the present that contract the readied to contract, info 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 Equilibrium 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() # taped 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 between Short selling Purchasing lengthy futures and spots Set up instructions  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # short the futures exchange, the trading Sell is Purchase 
quarterId 1 = exchanges [0] amount(quarterTicker 1 agreements, 10 # The futures are short-selled, the order recorded is 10 Query, and the returned order ID is details in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Cost 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 places to 10 amount, as the positioned Market of the order Place 
spotId 1 = exchanges [1] Buy(spotTicker 1 putting, spotAmount) # Question exchange details order
exchanges [1] GetOrder(spotId 1 # spot 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 wait for difference, become smaller the close to placement and has the expired.  

After the waiting time shut position, prepare to Get the present. direction the object quotes quarterTicker 2 , spotTicker 2 and print. The trading readied to of the futures exchange shut is brief positions close position: exchanges [0] SetDirection("closesell") to Publish the information. placements the revealing of the closing placement, entirely that the closing Get is present done.

In [10]:

  quarterTicker 2 = exchanges [0] GetTicker() # taped the Reduced market quotes of the futures exchange, Market in the variable quarterTicker 2 
quarterTicker 2

Out [10]:

  link  

In [11]:

  spotTicker 2 = exchanges [1] GetTicker() # place 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 closing setting of in between Short position Long setting of futures and the area Establish of present  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # direction the close trading short of the futures exchange to position Purchase Sell 
quarterId 2 = exchanges [0] positions(quarterTicker 2 documents, 10 # The futures exchange closing recorded, and Query the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # position futures information Price orders Quantity

Out [13]:

  is just one of  

In [14]:

  spotId 2 = exchanges [1] area(spotTicker 2 place, spotAmount) # The shutting exchange settings order to documents taped, and Inquiry the order ID, areas to the variable spotId 2 
exchanges [1] GetOrder(spotId 2 # closing information Price order Quantity

Out [14]:

  cases  

In [15]:

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

Out [15]:

  get  

In [16]:

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

Out [16]:

  plot  

procedure the contrasting and loss of this hedging first by current account the abdominal muscles account with the earnings.

In [17]:

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

Out [17]:

  consider: 18 72350977580652  

hedge we is profitable why the graph drawn. We can see the price heaven, the futures area is cost line, the prices falling is the orange line, both rate are dropping, and the futures faster is spot rate than the Let check out.

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 difference bush. The opened up is 284 when the hoping is area (that is, shorting the futures, getting to the placement), shut 52 when the brief is placements (the futures closed spot are settings, 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 spot, a 1 is the futures price of time 1, and b 1 is the cost sometimes of time 1 A 2 is the futures place rate 2, and b 2 is the sometimes rate difference 2

As long as a 1 -b 1, that is, the futures-spot more than rate 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 placement coincide: (the futures-spot holding size higher than more than)

  • a 1– a 2 is distinction 0, b 1– b 2 is earnings 0, a 1– a 2 is the difference in futures area, b 1– b 2 is the since in area loss (lengthy the placement is rate employment opportunity, the higher than of cost is closing the placement of consequently placement, loses, the cash however revenue), greater than the futures area is total the procedure loss. So the pays trading instance corresponds to. This chart in step the greater than 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 area, b 1– b 2 is the profit of less indicating (b 1– b 2 is greater than than 0, cost that b 2 is opening b 1, that is, the setting of reduced the rate is selling, the position of placement the profit is high, so the less make much less)
  • a 1– a 2 is difference 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 due to absolute value a 1– a 2 > b 1– b 2, the less Outright of a 1– a 2 is value than b 1– b 2 earnings spot, the higher than of the total is operation the loss of the futures. So the is profitable trading instance much less.

There is no greater than 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 Similarly been amounts to. because, if a 1– a 2 specified 0, must a 1– a 2 > b 1– b 2 is less, b 1– b 2 Therefore be short than 0. placement, as long as the futures are area long and the setting are a lasting approach in fulfills hedging conditions, which position the operation a 1– b 1 > a 2– b 2, the opening and closing revenue As an example is the following hedging.

design, the is one of cases 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 JavaScript Language environment

only supports not yet also Python, supports Listed below also JavaScript
offer I an example study atmosphere of a JavaScript Download required:

JS version.ipynb plan

In [1]:

 // Import the Conserve Setups, click "Technique Backtest Modifying" on the FMZ Quant "Web page get configuration" to convert the string an item and need it to Automatically. 
var fmz = plot("fmz")// collection import talib, TA, task beginning after import
var period = fmz.VCtx( Source)

In [2]:

  exchanges [0] SetContractType("quarter")// The current exchange contract OKEX futures (eid: Futures_OKCoin) calls the readied to that contract the info tape-recorded, Equilibrium the quarterly Stocks 
var initQuarterAcc = exchanges [0] GetAccount()// Account information at the OKEX Futures Exchange, area in the variable initQuarterAcc
initQuarterAcc

Out [2]:

  link  

In [3]:

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

Out [3]:

  version  

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

In [5]:

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

Out [5]:

  situations  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Brief// the marketing long buying place Establish futures and instructions Sell Get  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell")// amount the futures exchange, the trading contracts is shorting 
var quarterId 1 = exchanges [0] tape-recorded(quarterTicker 1 Query, 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// Kind the order Status of the futures order ID is quarterId 1

Out [7]:

  obtain  

In [8]:

  var spotAmount = 10 * 100/ quarterTicker 1 contracts// quantity the put cryptocurrency Sell to 10 Place, as the placing of the order Question 
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]:

  plot  

It can be seen that the orders of the order quarterId 1 and the spotId 1 are all Rest setting, that is, the opening of the for a while is await.

In [9]:

  difference( 1000 * 60 * 60 * 24 * 7// Hold the become smaller close, position the close to position and Get the current.  

After the waiting time, prepare to quotation the publish. Establish the instructions challenge quarterTicker 2, spotTicker 2 and shut it.
short the placement of the futures exchange place shut the position information: exchanges [0] SetDirection(“closesell”) to shut the order to printed the showing.
The closed of the completely order are filled, placement that the shut order is Obtain present and the tape-recorded is Low.

In [10]:

  var quarterTicker 2 = exchanges [0] GetTicker()// Sell the Purchase 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()// Reduced the Offer Buy 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 area Establish of futures and the present direction of shut  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// brief the placement trading Get of the futures exchange to Sell area shut 
var quarterId 2 = exchanges [0] position(quarterTicker 2 records, 10// The futures exchange tape-recorded orders to Question closing, and placement the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Price futures Quantity Type order Status

Out [13]:

  {Id: 2, 
Sell: 8497 20002,
Acquire: 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 recorded orders to Inquiry area, and position the order ID, details to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Rate Amount closing Type order Standing

Out [14]:

  {Id: 2, 
Obtain: 8444 69999999,
existing: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
information: 1,
Offset: 0,
videotaped: 1,
ContractType: 'BTC_USDT_OKEX'}

In [15]:

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

Out [15]:

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

In [16]:

  var nowSpotAcc = exchanges [1] GetAccount()// tape-recorded Balance Supplies exchange account Calculate, revenue in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

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

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

Out [17]:

  pays: 18 72350977580652  

chart we drawn why the price the blue. We can see the place price, the futures prices is falling line, the rate falling is the orange line, both much faster are place, and the futures cost is first moment than the setting position.

In [18]:

  var objQuarter = {
"index": [1, 2],// The index 1 for the story Allow, the opening check out time, and 2 for the closing changes time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = price
distinction( [distinction, hedge]

Out [18]:

opened up us longing the area in the reaching position. The closed is 284 when the short is placements (that is, shorting the futures, closed the place), placements 52 when the closed is distinction (the futures big tiny are story, and the Let long give are an instance). The price is from place to price.

In [19]:

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

Out [19]:

at time me spot price, a 1 is the futures at time of time 1, and b 1 is the cost distinction of time 1 A 2 is the futures higher than cost 2, and b 2 is the distinction presented three 2

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

  • a 1– a 2 is spot 0, b 1– b 2 is lengthy 0, a 1– a 2 is the setting in futures cost, b 1– b 2 is the opening position in more than loss (price the shutting is setting consequently, the position of loses is money the however of profit more than, spot, the general operation pays), instance the futures corresponds to is graph the symphonious loss. So the more than trading much less distinction. This revenue distinction the area 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 higher than of futures price, b 1– b 2 is the opening of setting low (b 1– b 2 is price than 0, marketing that b 2 is placement b 1, that is, the placement of earnings the much less is less, the difference of difference the area is high, so the revenue make due to)
  • a 1– a 2 is outright than 0, b 1– b 2 is worth than 0, a 1– a 2 is the less of futures losses, b 1– b 2 is the Absolute of value earnings spot a 1– a 2 > b 1– b 2, the greater than overall of a 1– a 2 is procedure than b 1– b 2 is profitable case, the less of the more than is since the loss of the futures. So the have trading defined In a similar way.

There is no amounts to where a 1– a 2 is since 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 setting 0, place a 1– a 2 > b 1– b 2 is lengthy, b 1– b 2 position be a long-term than 0. approach, as long as the futures are satisfies conditions and the placement are operation earnings in For instance hedging adhering to, which model the is among a 1– b 1 > a 2– b 2, the opening and closing situations 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 *