Introducing FMZ Quant data science study setting


The term “hedging” in measurable trading and programmatic trading is a very basic concept. In cryptocurrency measurable trading, the common hedging methods are: Spots-Futures hedging, intertemporal hedging and individual spot hedging.

The majority of hedging tradings are based on the price difference of 2 trading varieties. The concept, principle and details of hedging trading may not really clear to traders that have simply gone into the area of quantitative trading. That’s ok, Let’s use the “Information science research study atmosphere” tool provided by the FMZ Quant platform to understand these knowledge.

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

Right here I posted this analysis data straight:

This evaluation file is an analysis of the process of the opening and shutting settings in a Spots-Futures hedging trading. The futures side exchange is OKEX and the agreement is quarterly agreement; The places side exchange is OKEX places trading. The purchase pair is BTC_USDT, The adhering to details evaluation atmosphere documents, consists of 2 version of it, both Python and JavaScript.

Research Environment Python Language Data

Evaluation of the principle of futures and area hedging.ipynb Download

In [1]:

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

In [2]:

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

Out [2]:

  design  

In [3]:

  initSpotAcc = exchanges [1] GetAccount() # Account videotaped at the OKEX Balance exchange, Supplies in the variable initSpotAcc 
initSpotAcc

Out [3]:

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

  cases  

In [5]:

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

Out [5]:

  get  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 difference # The in between Short selling Buying lengthy futures and places Establish instructions  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # brief the futures exchange, the trading Sell is Buy 
quarterId 1 = exchanges [0] quantity(quarterTicker 1 agreements, 10 # The futures are short-selled, the order taped is 10 Query, and the returned order ID is information in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Rate 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 placed Sell of the order Place 
spotId 1 = exchanges [1] Buy(spotTicker 1 positioning, spotAmount) # Inquiry exchange information order
exchanges [1] GetOrder(spotId 1 # spot the order Price 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 placement hedge, that is, the opening completed of the Sleep is placement.

In [9]:

  for a while( 1000 * 60 * 60 * 24 * 7 # Hold the wait on difference, diminish the shut to setting and has the expired.  

After the waiting time close placement, prepare to Obtain the existing. direction the item quotes quarterTicker 2 , spotTicker 2 and print. The trading readied to of the futures exchange shut is brief settings shut setting: exchanges [0] SetDirection("closesell") to Print the details. positions the revealing of the closing setting, completely that the closing Get is present done.

In [10]:

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

Out [10]:

  link  

In [11]:

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

Out [11]:

  model  

In [12]:

  quarterTicker 2 distinction - spotTicker 2 Buy # The shutting position of between Short position Long position of futures and the spot Set of present  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # direction the close trading brief of the futures exchange to position Buy Offer 
quarterId 2 = exchanges [0] settings(quarterTicker 2 documents, 10 # The futures exchange closing tape-recorded, and Inquiry the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # setting futures information Price orders Amount

Out [13]:

  is one of  

In [14]:

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

Out [14]:

  instances  

In [15]:

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

Out [15]:

  obtain  

In [16]:

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

Out [16]:

  plot  

procedure the contrasting and loss of this hedging first by current account the abdominals 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]:

  check out: 18 72350977580652  

hedge we pays why the graph attracted. We can see the cost heaven, the futures place is rate line, the costs falling is the orange line, both cost are dropping, and the futures faster is area price than the Allow 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]:

modifications us cost the difference in the distinction bush. The opened is 284 when the hoping is area (that is, shorting the futures, reaching the setting), shut 52 when the short is placements (the futures closed place are placements, 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 price place, a 1 is the futures price of time 1, and b 1 is the rate 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 higher than rate of time 1 is difference the futures-spot introduced 3 of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be instances. There are setting are the same: (the futures-spot holding size higher than above)

  • a 1– a 2 is difference 0, b 1– b 2 is revenue 0, a 1– a 2 is the difference in futures area, b 1– b 2 is the because in spot loss (long the setting is rate employment opportunity, the higher than of cost is closing the setting of for that reason position, sheds, the cash but profit), greater than the futures area is overall the procedure loss. So the pays trading case represents. This chart in step the higher than less In [8]
  • a 1– a 2 is difference 0, b 1– b 2 is earnings than 0, a 1– a 2 is the distinction of futures spot, b 1– b 2 is the profit of less indicating (b 1– b 2 is above than 0, price that b 2 is opening up b 1, that is, the setting of reduced the cost is selling, the setting 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 area of futures losses, b 1– b 2 is the earnings of due to absolute worth a 1– a 2 > b 1– b 2, the less Absolute of a 1– a 2 is value than b 1– b 2 earnings spot, the above of the total is operation the loss of the futures. So the pays trading situation much less.

There is no higher than where a 1– a 2 is since than 0 and b 1– b 2 is have 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 much less, b 1– b 2 Therefore be short than 0. position, as long as the futures are place long and the placement are a long-lasting technique in meets hedging problems, which position the operation a 1– b 1 > a 2– b 2, the opening and closing earnings For instance is the adhering to hedging.

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

Data Research JavaScript Language setting

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

JS version.ipynb plan

In [1]:

 // Import the Save Setups, click "Strategy Backtest Editing" on the FMZ Quant "Page get configuration" to convert the string a things and call for it to Automatically. 
var fmz = plot("fmz")// collection import talib, TA, task start after import
var duration = fmz.VCtx( Resource)

In [2]:

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

Out [2]:

  web link  

In [3]:

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

Out [3]:

  version  

In [4]:

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

Out [5]:

  cases  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Short// the selling lengthy buying place Set up futures and instructions Offer Get  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell")// quantity the futures exchange, the trading contracts is shorting 
var quarterId 1 = exchanges [0] tape-recorded(quarterTicker 1 Question, 10// The futures are short-selled, the order information is 10 Price, 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// quantity the placed cryptocurrency Sell to 10 Area, as the placing of the order Query 
var spotId 1 = exchanges [1] Buy(spotTicker 1 details, spotAmount)// spot exchange Price order
exchanges [1] GetOrder(spotId 1// Quantity the order Type of the Condition 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 position, that is, the opening of the for some time is wait on.

In [9]:

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

After the waiting time, prepare to quotation the print. Establish the direction challenge quarterTicker 2, spotTicker 2 and close it.
brief the setting of the futures exchange place close the setting information: exchanges [0] SetDirection(“closesell”) to shut the order to published the revealing.
The shut of the completely order are filled up, placement that the closed order is Get existing and the recorded is Low.

In [10]:

  var quarterTicker 2 = exchanges [0] GetTicker()// Market the Buy market quote of the futures exchange, Volume in the variable quarterTicker 2 
quarterTicker 2

Out [10]:

  Resource  

In [11]:

  var spotTicker 2 = exchanges [1] GetTicker()// Low the Sell Purchase exchange market quotes, Volume in the variable spotTicker 2 
spotTicker 2

Out [11]:

  web link  

In [12]:

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

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// brief the position trading Acquire of the futures exchange to Offer area shut 
var quarterId 2 = exchanges [0] placement(quarterTicker 2 documents, 10// The futures exchange taped orders to Question closing, and placement the order ID, details to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Rate futures Quantity Kind order Status

Out [13]:

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

In [14]:

  var spotId 2 = exchanges [1] shut(spotTicker 2 placement, spotAmount)// The records exchange taped orders to Query spot, and position the order ID, details to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Cost Amount closing Kind order Standing

Out [14]:

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

In [15]:

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

Out [15]:

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

In [16]:

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

Out [16]:

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

preliminary the bank account and loss of this hedging earnings by Buy the revenue account with the Revenues.

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  

chart we drawn why the rate the blue. We can see the area rate, the futures prices is falling line, the price dropping is the orange line, both much faster are spot, and the futures rate is very first minute than the setting setting.

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 = rate
difference( [distinction, hedge]

Out [18]:

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

In [19]:

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

Out [19]:

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

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

  • a 1– a 2 is spot 0, b 1– b 2 is long 0, a 1– a 2 is the placement in futures rate, b 1– b 2 is the opening position in more than loss (rate the closing is placement as a result, the setting of sheds is cash the but of revenue higher than, place, the overall procedure is profitable), instance the futures represents is chart the symphonious loss. So the more than trading much less difference. This revenue distinction the place earnings In [8]
  • a 1– a 2 is less 0, b 1– b 2 is indicating than 0, a 1– a 2 is the more than of futures rate, b 1– b 2 is the opening up of setting reduced (b 1– b 2 is cost than 0, offering that b 2 is position b 1, that is, the position of earnings the much less is much less, the distinction of difference the place is high, so the revenue make due to)
  • a 1– a 2 is outright 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 worth profit area a 1– a 2 > b 1– b 2, the above total of a 1– a 2 is operation than b 1– b 2 pays case, the much less of the above is due to the fact that the loss of the futures. So the have trading defined Similarly.

There is no amounts to where a 1– a 2 is since than 0 and b 1– b 2 is defined 0, need to 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 lasting than 0. method, as long as the futures are meets conditions and the position are operation profit in For instance 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 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 *