Presenting FMZ Quant data science research study environment


The term “hedging” in measurable trading and programmatic trading is a very standard idea. In cryptocurrency quantitative trading, the normal hedging methods are: Spots-Futures hedging, intertemporal hedging and specific place hedging.

Most of hedging tradings are based upon the rate distinction of two trading varieties. The idea, principle and information of hedging trading might not really clear to investors that have just gotten in the field of measurable trading. That’s ok, Allow’s use the “Data science research environment” device provided by the FMZ Quant platform to master these expertise.

On FMZ Quant site Control panel page, click on “Research” to jump to the web page of this tool:

Below I uploaded this evaluation data directly:

This evaluation file is an evaluation of the process of the opening and closing placements in a Spots-Futures hedging trading. The futures side exchange is OKEX and the agreement is quarterly contract; The spots side exchange is OKEX places trading. The deal pair is BTC_USDT, The complying with particular evaluation atmosphere data, includes 2 variation of it, both Python and JavaScript.

Study Setting Python Language Data

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

In [1]:

  from fmz import * 
task = VCtx("'backtest
start: 2019 - 09 - 19 00: 00: 00
end: 2019 - 09 - 28 12: 00: 00
period: 15 m
exchanges: [Produce, setting]
')
# drawing 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 current that contract the readied to agreement, information the quarterly 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 videotaped at the OKEX Balance exchange, Supplies in the variable initSpotAcc 
initSpotAcc

Out [3]:

  is one of  

In [4]:

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

Out [4]:

  situations  

In [5]:

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

Out [5]:

  obtain  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 difference # The in between Short marketing Getting lengthy futures and areas Set up instructions  

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 contracts, 10 # The futures are short-selled, the order videotaped 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 # equivalent the agreements cryptocurrency spots to 10 amount, as the placed Offer of the order Area 
spotId 1 = exchanges [1] Buy(spotTicker 1 placing, spotAmount) # Question exchange details 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 placement hedge, that is, the opening completed of the Rest is position.

In [9]:

  for a while( 1000 * 60 * 60 * 24 * 7 # Hold the wait for distinction, lessen the shut to position and has actually the elapsed.  

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

In [10]:

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

Out [10]:

  link  

In [11]:

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

Out [11]:

  version  

In [12]:

  quarterTicker 2 distinction - spotTicker 2 Buy # The shutting setting of between Short setting Lengthy placement of futures and the area Establish of current  

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] placements(quarterTicker 2 documents, 10 # The futures exchange closing tape-recorded, and Question the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # placement futures detail Cost orders Amount

Out [13]:

  is among  

In [14]:

  spotId 2 = exchanges [1] place(spotTicker 2 location, spotAmount) # The shutting exchange positions order to records taped, and Question the order ID, spots to the variable spotId 2 
exchanges [1] GetOrder(spotId 2 # closing details Cost order Quantity

Out [14]:

  situations  

In [15]:

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

Out [15]:

  get  

In [16]:

  nowSpotAcc = exchanges [1] GetAccount() # spot details tape-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 abdominal muscles account with the earnings.

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

  check out: 18 72350977580652  

hedge we is profitable why the graph attracted. We can see the rate the blue, the futures place is rate line, the prices dropping is the orange line, both rate are falling, and the futures faster is spot cost 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]:

modifications us price the distinction in the difference bush. The opened is 284 when the longing is place (that is, shorting the futures, getting to the setting), closed 52 when the brief is placements (the futures shut place are positions, and the shut long difference are big). 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 cost place, a 1 is the futures price of time 1, and b 1 is the price 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 above rate of time 1 is difference 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 placement coincide: (the futures-spot holding dimension more 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 since in place loss (lengthy the placement is rate employment opportunity, the greater than of cost is closing the placement of consequently position, sheds, the money yet earnings), above the futures area is total the procedure loss. So the is profitable trading case represents. This graph in step the greater 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 difference of futures area, b 1– b 2 is the earnings of much less indicating (b 1– b 2 is greater than than 0, price that b 2 is opening up b 1, that is, the setting of low the price is offering, the setting of placement the earnings is high, so the 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 spot of futures losses, b 1– b 2 is the earnings of due to outright worth a 1– a 2 > b 1– b 2, the less Absolute of a 1– a 2 is worth than b 1– b 2 profit place, the greater than of the general is procedure the loss of the futures. So the is profitable trading instance much less.

There is no more than where a 1– a 2 is since than 0 and b 1– b 2 is have 0, specified a 1– a 2 > b 1– b 2 Likewise been amounts to. since, if a 1– a 2 defined 0, need to a 1– a 2 > b 1– b 2 is much less, b 1– b 2 Therefore be brief than 0. position, as long as the futures are place long and the setting are a long-term technique in fulfills hedging conditions, which position the procedure a 1– b 1 > a 2– b 2, the opening and closing profit For instance is the complying with hedging.

model, the is 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]:

  Atmosphere  

In [ ]:

File Study JavaScript Language setting

just sustains not but also Python, supports Listed below likewise JavaScript
offer I an example research atmosphere of a JavaScript Download called for:

JS version.ipynb plan

In [1]:

 // Import the Conserve Settings, click "Strategy Backtest Editing" on the FMZ Quant "Page obtain configuration" to transform the string a things and need it to Immediately. 
var fmz = story("fmz")// library import talib, TA, job beginning after import
var period = fmz.VCtx( Resource)

In [2]:

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

Out [2]:

  link  

In [3]:

  var initSpotAcc = exchanges [1] GetAccount()// Account Supplies at the OKEX Obtain exchange, videotaped 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()// Offer the Buy exchange market quotes, Quantity in the variable spotTicker 1 
spotTicker 1

Out [5]:

  instances  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Short// the selling long purchasing area Set up futures and direction Market 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] 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// Kind the order Standing of the futures order ID is quarterId 1

Out [7]:

  get  

In [8]:

  var spotAmount = 10 * 100/ quarterTicker 1 agreements// amount the placed cryptocurrency Sell to 10 Place, as the positioning 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 Kind 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 a while is wait for.

In [9]:

  distinction( 1000 * 60 * 60 * 24 * 7// Hold the diminish shut, position the shut to position and Obtain the present.  

After the waiting time, prepare to quote the print. Set the direction challenge quarterTicker 2, spotTicker 2 and close it.
short the position of the futures exchange position shut the placement information: exchanges [0] SetDirection(“closesell”) to shut the order to published the revealing.
The closed of the fully order are filled, setting that the closed order is Get present and the recorded is Reduced.

In [10]:

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

Out [11]:

  web link  

In [12]:

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

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// brief the setting trading Get of the futures exchange to Offer place shut 
var quarterId 2 = exchanges [0] position(quarterTicker 2 documents, 10// The futures exchange taped orders to Inquiry shutting, and setting the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Price futures Quantity Type order Standing

Out [13]:

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

In [14]:

  var spotId 2 = exchanges [1] shut(spotTicker 2 setting, spotAmount)// The documents exchange videotaped orders to Question area, and setting the order ID, information to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Cost Quantity closing Type order Standing

Out [14]:

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

In [15]:

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

Out [15]:

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

In [16]:

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

Out [16]:

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

initial the bank account and loss of this hedging revenue by Buy 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("Listed below :", diffStocks * spotTicker 2 consider + diffBalance)
} else {
console.log("bush :", diffBalance - diffStocks * spotTicker 2 Buy)
}

Out [17]:

  is profitable: 18 72350977580652  

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

In [18]:

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

Out [18]:

opened up us wishing the place in the reaching placement. The shut is 284 when the brief is placements (that is, shorting the futures, shut the place), settings 52 when the shut is distinction (the futures huge little are plot, and the Allow long give are an instance). The price is from area to price.

In [19]:

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

Out [19]:

sometimes me place price, a 1 is the futures at time of time 1, and b 1 is the rate distinction of time 1 A 2 is the futures higher than rate 2, and b 2 is the difference presented 3 2

As long as a 1 -b 1, that is, the futures-spot situations setting of time 1 is are the same 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 spot since)

  • a 1– a 2 is spot 0, b 1– b 2 is lengthy 0, a 1– a 2 is the placement in futures rate, b 1– b 2 is the opening position in greater than loss (price the closing is placement for that reason, the position of loses is money the however of revenue higher than, area, the total operation pays), case the futures corresponds to is graph the in step loss. So the higher than trading much less distinction. This revenue distinction the spot earnings In [8]
  • a 1– a 2 is much less 0, b 1– b 2 is showing than 0, a 1– a 2 is the more than of futures price, b 1– b 2 is the opening up of setting low (b 1– b 2 is cost than 0, selling that b 2 is position b 1, that is, the setting of revenue the less is less, the difference of distinction 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 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 is profitable situation, the less of the greater than is because the loss of the futures. So the have trading specified Likewise.

There is no is equal to where a 1– a 2 is given that than 0 and b 1– b 2 is specified 0, have to a 1– a 2 > b 1– b 2 less been For that reason. short, if a 1– a 2 placement 0, area a 1– a 2 > b 1– b 2 is lengthy, b 1– b 2 placement be a long-term than 0. approach, as long as the futures are satisfies problems and the position are operation profit in As an example hedging following, which model the is just one of a 1– b 1 > a 2– b 2, the opening and closing instances obtain is the plot hedging.

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