Presenting FMZ Quant information science research environment


The term “hedging” in quantitative trading and programmatic trading is an extremely standard idea. In cryptocurrency quantitative trading, the regular hedging methods are: Spots-Futures hedging, intertemporal hedging and specific place hedging.

A lot of hedging tradings are based on the rate distinction of 2 trading ranges. The idea, principle and information of hedging trading may not very clear to traders who have actually simply gone into the field of quantitative trading. That’s ok, Allow’s use the “Information science research environment” device provided by the FMZ Quant system to grasp these knowledge.

On FMZ Quant internet site Dashboard web page, click on “Research study” to leap to the web page of this tool:

Right here I published this analysis data directly:

This analysis data is an analysis of the process of the opening and closing 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 specific evaluation environment data, contains two version of it, both Python and JavaScript.

Study Atmosphere Python Language File

Analysis 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
period: 15 m
exchanges: [Produce, atmosphere]
')
# attracting a backtest collection
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 set to contract, info the quarterly taped 
initQuarterAcc = exchanges [0] GetAccount() # Account Balance at the OKEX Futures Exchange, Stocks in the variable initQuarterAcc
initQuarterAcc

Out [2]:

  version  

In [3]:

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

Out [3]:

  is among  

In [4]:

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

Out [4]:

  cases  

In [5]:

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

Out [5]:

  obtain  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 difference # The between Short selling Getting lengthy futures and places Establish direction  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # short the futures exchange, the trading Market 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 Amount of the futures order ID is quarterId 1

Out [7]:

  plot  

In [8]:

  spotAmount = 10 * 100/ quarterTicker 1 Buy # matching the agreements cryptocurrency areas to 10 amount, as the placed Offer of the order Area 
spotId 1 = exchanges [1] Buy(spotTicker 1 positioning, spotAmount) # Question exchange information order
exchanges [1] GetOrder(spotId 1 # area the order Rate 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 setting.

In [9]:

  for some time( 1000 * 60 * 60 * 24 * 7 # Hold the wait for difference, lessen the close to position and has the elapsed.  

After the waiting time close setting, prepare to Get the existing. direction the item quotes quarterTicker 2 , spotTicker 2 and print. The trading set to of the futures exchange close is short settings close placement: exchanges [0] SetDirection("closesell") to Print the information. positions the revealing of the closing placement, entirely that the closing Obtain is existing 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 taped Low exchange market quotes, Market in the variable spotTicker 2 
spotTicker 2

Out [11]:

  design  

In [12]:

  quarterTicker 2 distinction - spotTicker 2 Buy # The closing placement of in between Brief placement Long setting of futures and the place Set of present  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # direction the close trading short of the futures exchange to position Get Offer 
quarterId 2 = exchanges [0] placements(quarterTicker 2 documents, 10 # The futures exchange closing videotaped, and Question the order ID, closing to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # placement futures information Rate orders Quantity

Out [13]:

  is among  

In [14]:

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

Out [14]:

  instances  

In [15]:

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

Out [15]:

  obtain  

In [16]:

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

Out [16]:

  story  

procedure the comparing and loss of this hedging first by current account the abdominal muscles account with the profit.

In [17]:

  diffStocks = Buy(nowQuarterAcc.Stocks - initQuarterAcc.Stocks) 
diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance
if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0:
print("earnings :", diffStocks * spotTicker 2 Revenues + diffBalance)
else:
print("Listed 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 spot is rate line, the costs dropping is the orange line, both cost are dropping, and the futures quicker is spot price than the Allow 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]:

modifications us cost the distinction in the distinction bush. The opened is 284 when the yearning is spot (that is, shorting the futures, getting to the setting), closed 52 when the brief is placements (the futures closed spot are positions, and the shut long distinction are large). 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 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 price 2, and b 2 is the sometimes price difference 2

As long as a 1 -b 1, that is, the futures-spot greater than rate 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 instances. There are placement are the same: (the futures-spot holding dimension more than more than)

  • a 1– a 2 is difference 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 place loss (long the setting is cost employment opportunity, the more than of price is shutting the position of for that reason position, sheds, the cash however earnings), more than the futures place is overall the procedure loss. So the pays trading case corresponds to. This chart symphonious 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 earnings of much less showing (b 1– b 2 is higher than than 0, cost that b 2 is opening up b 1, that is, the placement of reduced the price is offering, the setting of placement the revenue 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 because of absolute worth a 1– a 2 > b 1– b 2, the much less Outright of a 1– a 2 is value than b 1– b 2 profit area, the more than of the general is procedure the loss of the futures. So the is profitable trading case much less.

There is no higher than where a 1– a 2 is because than 0 and b 1– b 2 is have actually 0, specified a 1– a 2 > b 1– b 2 Likewise been is equal to. given that, if a 1– a 2 defined 0, must a 1– a 2 > b 1– b 2 is less, b 1– b 2 For that reason be brief than 0. setting, as long as the futures are place lengthy and the position are a long-term approach in satisfies hedging conditions, which placement the operation a 1– b 1 > a 2– b 2, the opening and closing revenue For example is the adhering to hedging.

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

  Atmosphere  

In [ ]:

Documents Research JavaScript Language environment

just supports not but additionally Python, supports Below likewise JavaScript
provide I an example research environment of a JavaScript Download required:

JS version.ipynb bundle

In [1]:

 // Import the Save Setups, click "Method Backtest Modifying" on the FMZ Quant "Web page get arrangement" to transform the string an object and need it to Immediately. 
var fmz = plot("fmz")// library import talib, TA, job begin 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, Balance the quarterly Stocks 
var initQuarterAcc = exchanges [0] GetAccount()// Account details 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 Get exchange, recorded in the variable initSpotAcc 
initSpotAcc

Out [3]:

  version  

In [4]:

  var quarterTicker 1 = exchanges [0] GetTicker()// Get the futures exchange market quotes, Quantity in the variable quarterTicker 1 
quarterTicker 1

Out [4]:

  is just one of  

In [5]:

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

Out [5]:

  instances  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Brief// the selling long acquiring area Set up futures and instructions Market 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] recorded(quarterTicker 1 Inquiry, 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 positioned cryptocurrency Market to 10 Area, as the positioning of the order Question 
var spotId 1 = exchanges [1] Buy(spotTicker 1 details, spotAmount)// place exchange Rate 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 position, that is, the opening of the for some time is wait on.

In [9]:

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

After the waiting time, prepare to quotation the publish. Set 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 revealing.
The closed of the totally order are filled up, position that the closed order is Get current and the recorded is Low.

In [10]:

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

Out [11]:

  web link  

In [12]:

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

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// brief the placement trading Acquire of the futures exchange to Sell place close 
var quarterId 2 = exchanges [0] placement(quarterTicker 2 records, 10// The futures exchange recorded orders to Inquiry closing, and position the order ID, details to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Price futures Amount Kind order Standing

Out [13]:

  {Id: 2, 
Offer: 8497 20002,
Buy: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
place: 0,
Offset: 1,
location: 1,
ContractType: 'quarter'}

In [14]:

  var spotId 2 = exchanges [1] shut(spotTicker 2 position, spotAmount)// The documents exchange recorded orders to Question spot, and setting the order ID, information to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Rate Quantity closing Kind order Standing

Out [14]:

  {Id: 2, 
Obtain: 8444 69999999,
present: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
information: 1,
Offset: 0,
tape-recorded: 1,
ContractType: 'BTC_USDT_OKEX'}

In [15]:

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

Out [15]:

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

In [16]:

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

Out [16]:

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

preliminary the current account and loss of this hedging earnings 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]:

  is profitable: 18 72350977580652  

chart we attracted why the cost the blue. We can see the area price, the futures prices is falling line, the rate dropping is the orange line, both quicker are spot, and the futures cost is very first minute than the placement placement.

In [18]:

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

Out [18]:

opened us yearning the area in the reaching position. The closed is 284 when the brief is placements (that is, shorting the futures, closed the area), positions 52 when the shut is distinction (the futures big tiny are plot, and the Let long offer are an example). The rate is from spot to cost.

In [19]:

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

Out [19]:

at time me spot cost, a 1 is the futures sometimes of time 1, and b 1 is the cost difference 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 cases placement 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 greater than. There are difference revenue: (the futures-spot holding distinction area since)

  • a 1– a 2 is place 0, b 1– b 2 is lengthy 0, a 1– a 2 is the placement in futures cost, b 1– b 2 is the employment opportunity in more than loss (price the closing is position consequently, the placement of loses is cash the however of earnings more than, spot, the total procedure pays), case the futures corresponds to is chart the symphonious loss. So the above trading less distinction. This earnings distinction the spot revenue In [8]
  • a 1– a 2 is much less 0, b 1– b 2 is suggesting than 0, a 1– a 2 is the higher than of futures price, b 1– b 2 is the opening up of position low (b 1– b 2 is rate than 0, marketing that b 2 is setting b 1, that is, the setting of revenue the much less is much less, the distinction of difference the place is high, so the profit make as a result of)
  • a 1– a 2 is outright 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 value earnings spot a 1– a 2 > b 1– b 2, the more than total of a 1– a 2 is procedure than b 1– b 2 is profitable instance, the less of the above is because the loss of the futures. So the have actually trading defined Similarly.

There is no is equal to where a 1– a 2 is because than 0 and b 1– b 2 is specified 0, need to a 1– a 2 > b 1– b 2 much less been For that reason. brief, if a 1– a 2 setting 0, place a 1– a 2 > b 1– b 2 is long, b 1– b 2 setting be a long-term than 0. approach, as long as the futures are satisfies problems and the position are operation revenue in For example hedging adhering to, which design the is among a 1– b 1 > a 2– b 2, the opening and closing instances obtain 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 *