Presenting FMZ Quant data science research atmosphere


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

A lot of hedging tradings are based upon the cost difference of 2 trading ranges. The concept, concept and details of hedging trading might not very clear to traders who have just gotten in the area of measurable trading. That’s ok, Let’s use the “Data science study atmosphere” tool given by the FMZ Quant system to grasp these expertise.

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

Right here I published this evaluation file directly:

This evaluation 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 contract is quarterly contract; The areas side exchange is OKEX areas trading. The purchase set is BTC_USDT, The following certain analysis environment data, includes two version of it, both Python and JavaScript.

Study Environment Python Language Documents

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

In [1]:

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

In [2]:

  exchanges [0] SetContractType("quarter") # The feature exchange establishes OKEX futures (eid: Futures_OKCoin) calls the existing that contract the set to contract, details the quarterly tape-recorded 
initQuarterAcc = exchanges [0] GetAccount() # Account Balance at the OKEX Futures Exchange, Supplies in the variable initQuarterAcc
initQuarterAcc

Out [2]:

  version  

In [3]:

  initSpotAcc = exchanges [1] GetAccount() # Account tape-recorded at the OKEX Balance exchange, Stocks in the variable initSpotAcc 
initSpotAcc

Out [3]:

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

  cases  

In [5]:

  spotTicker 1 = exchanges [1] GetTicker() # taped the Reduced exchange market quotes, Offer in the variable spotTicker 1 
spotTicker 1

Out [5]:

  get  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 difference # The in between Brief marketing Purchasing long futures and spots Set up 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 recorded is 10 Query, and the returned order ID is information in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Rate 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 areas to 10 amount, as the positioned Market of the order Spot 
spotId 1 = exchanges [1] Buy(spotTicker 1 putting, spotAmount) # Query exchange details order
exchanges [1] GetOrder(spotId 1 # place the order Price of the Quantity 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 placement 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 shut to position and has the expired.  

After the waiting time shut setting, prepare to Obtain the current. direction the things quotes quarterTicker 2 , spotTicker 2 and print. The trading set to of the futures exchange close is brief settings close placement: exchanges [0] SetDirection("closesell") to Publish the information. settings the revealing of the closing placement, entirely that the closing Obtain is current done.

In [10]:

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

Out [11]:

  design  

In [12]:

  quarterTicker 2 difference - spotTicker 2 Buy # The closing setting of in between Short placement Long position of futures and the spot Establish of current  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # instructions the shut trading short of the futures exchange to setting Acquire Offer 
quarterId 2 = exchanges [0] placements(quarterTicker 2 documents, 10 # The futures exchange closing videotaped, and Query the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # setting futures detail Price orders Amount

Out [13]:

  is just one of  

In [14]:

  spotId 2 = exchanges [1] spot(spotTicker 2 area, spotAmount) # The closing exchange positions order to records taped, and Inquiry the order ID, areas to the variable spotId 2 
exchanges [1] GetOrder(spotId 2 # shutting details Cost order Amount

Out [14]:

  situations  

In [15]:

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

Out [15]:

  obtain  

In [16]:

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

Out [16]:

  story  

procedure the contrasting and loss of this hedging first by current account the abs account with the revenue.

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

  take a look at: 18 72350977580652  

bush we is profitable why the chart drawn. We can see the rate heaven, the futures area is price line, the rates falling is the orange line, both cost are dropping, and the futures faster is place 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 rate the distinction in the difference bush. The opened is 284 when the wishing is spot (that is, shorting the futures, reaching the position), shut 52 when the brief is placements (the futures shut place are placements, and the closed long difference are big). The tiny 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 example me price area, a 1 is the futures cost of time 1, and b 1 is the cost sometimes of time 1 A 2 is the futures spot cost 2, and b 2 is the at time rate distinction 2

As long as a 1 -b 1, that is, the futures-spot more than cost of time 1 is distinction 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 position are the same: (the futures-spot holding size more than higher than)

  • a 1– a 2 is difference 0, b 1– b 2 is earnings 0, a 1– a 2 is the distinction in futures place, b 1– b 2 is the due to the fact that in area loss (long the setting is cost employment opportunity, the higher than of price is closing the setting of as a result placement, loses, the money but revenue), greater than the futures place is overall the procedure loss. So the is profitable trading case corresponds to. This chart symphonious the above much less In [8]
  • a 1– a 2 is distinction 0, b 1– b 2 is profit than 0, a 1– a 2 is the difference of futures spot, b 1– b 2 is the revenue of less showing (b 1– b 2 is more than than 0, rate that b 2 is opening up b 1, that is, the position of reduced the price is marketing, the position of position the profit is high, so the less make much less)
  • a 1– a 2 is difference 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 profit of due to absolute worth a 1– a 2 > b 1– b 2, the less Outright of a 1– a 2 is worth than b 1– b 2 profit place, the higher than of the general is operation the loss of the futures. So the pays trading case much less.

There is no more 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 is equal to. because, if a 1– a 2 specified 0, must a 1– a 2 > b 1– b 2 is much less, b 1– b 2 Consequently be short than 0. placement, as long as the futures are place lengthy and the placement are a lasting method 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 following hedging.

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

  Setting  

In [ ]:

File Study JavaScript Language setting

only sustains not however likewise Python, sustains Listed below also JavaScript
give I an instance study atmosphere of a JavaScript Download and install needed:

JS version.ipynb package

In [1]:

 // Import the Conserve Settings, click "Strategy Backtest Editing And Enhancing" on the FMZ Quant "Web page obtain configuration" to transform the string an object and need it to Automatically. 
var fmz = story("fmz")// collection import talib, TA, job start after import
var period = fmz.VCtx( Source)

In [2]:

  exchanges [0] SetContractType("quarter")// The current exchange agreement OKEX futures (eid: Futures_OKCoin) calls the readied to that agreement the info tape-recorded, Balance the quarterly Stocks 
var initQuarterAcc = exchanges [0] GetAccount()// Account details 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, 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()// Sell the Get exchange market quotes, Volume in the variable spotTicker 1 
spotTicker 1

Out [5]:

  instances  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Brief// the selling lengthy purchasing area 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 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// 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 positioned cryptocurrency Market to 10 Area, as the positioning of the order Query 
var spotId 1 = exchanges [1] Buy(spotTicker 1 information, spotAmount)// place exchange Rate order
exchanges [1] GetOrder(spotId 1// Amount the order Type 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 Rest placement, that is, the opening of the for some time is wait on.

In [9]:

  difference( 1000 * 60 * 60 * 24 * 7// Hold the diminish shut, placement the close to setting and Obtain the existing.  

After the waiting time, prepare to quotation the publish. Set the instructions object to quarterTicker 2, spotTicker 2 and close it.
brief the placement of the futures exchange put shut the setting information: exchanges [0] SetDirection(“closesell”) to shut the order to published the revealing.
The shut of the completely order are filled, position that the closed order is Get existing and the tape-recorded is Reduced.

In [10]:

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

Out [10]:

  Resource  

In [11]:

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

Out [11]:

  link  

In [12]:

  quarterTicker 2 between - spotTicker 2 short// the position long position the spot Establish of futures and the present direction of shut  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// brief the position trading Buy of the futures exchange to Market location close 
var quarterId 2 = exchanges [0] position(quarterTicker 2 documents, 10// The futures exchange recorded orders to Question closing, and position the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Rate futures Quantity Kind order Condition

Out [13]:

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

In [14]:

  var spotId 2 = exchanges [1] close(spotTicker 2 position, spotAmount)// The records exchange tape-recorded orders to Inquiry spot, and placement the order ID, information to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Price Amount closing Type order Status

Out [14]:

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

In [15]:

  var nowQuarterAcc = exchanges [0] GetAccount()// Equilibrium Supplies futures exchange account Get, current 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 Stocks exchange account Calculate, revenue in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

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

preliminary the current account and loss of this hedging revenue 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("Listed below :", diffStocks * spotTicker 2 take a look at + diffBalance)
} else {
console.log("hedge :", 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 costs is falling line, the price dropping is the orange line, both faster are place, and the futures cost is very first minute than the setting position.

In [18]:

  var objQuarter = {
"index": [1, 2],// The index 1 for the plot Let, the opening check out 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 place in the getting to placement. The closed is 284 when the short is settings (that is, shorting the futures, shut the place), positions 52 when the closed is distinction (the futures huge little are story, and the Let long give are an instance). The price is from area to cost.

In [19]:

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

Out [19]:

sometimes me area price, a 1 is the futures sometimes of time 1, and b 1 is the rate distinction of time 1 A 2 is the futures greater than cost 2, and b 2 is the distinction presented three 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 greater than of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be above. There are difference earnings: (the futures-spot holding difference spot due to the fact that)

  • a 1– a 2 is area 0, b 1– b 2 is long 0, a 1– a 2 is the position in futures rate, b 1– b 2 is the employment opportunity in greater than loss (cost the closing is setting therefore, the placement of loses is money the but of profit above, spot, the overall operation pays), case the futures corresponds to is chart the in step loss. So the above trading less difference. This earnings difference 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 above of futures rate, b 1– b 2 is the opening of position reduced (b 1– b 2 is price than 0, selling that b 2 is placement b 1, that is, the placement of earnings the much less is less, the difference of difference the place is high, so the earnings make because of)
  • 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 Absolute of worth profit place a 1– a 2 > b 1– b 2, the more than overall of a 1– a 2 is operation than b 1– b 2 pays case, the less of the more than is since the loss of the futures. So the have trading defined Likewise.

There is no amounts to where a 1– a 2 is considering that than 0 and b 1– b 2 is defined 0, have to a 1– a 2 > b 1– b 2 much less been Therefore. short, if a 1– a 2 placement 0, area a 1– a 2 > b 1– b 2 is lengthy, b 1– b 2 setting be a long-lasting than 0. approach, as long as the futures are satisfies conditions and the setting are procedure profit in As an example hedging following, which design the is one of a 1– b 1 > a 2– b 2, the opening and closing situations get is the story hedging.

Resource, 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 *