Presenting FMZ Quant data science study atmosphere


The term “hedging” in measurable trading and programmatic trading is a very basic principle. In cryptocurrency quantitative trading, the regular hedging methods are: Spots-Futures hedging, intertemporal hedging and private spot hedging.

A lot of hedging tradings are based on the rate distinction of two trading ranges. The idea, principle and details of hedging trading may not very clear to investors who have actually simply entered the area of measurable trading. That’s ok, Allow’s make use of the “Data science research environment” device provided by the FMZ Quant platform to grasp these understanding.

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

Right here I published this analysis documents straight:

This evaluation file is an evaluation of the procedure of the opening and closing positions in a Spots-Futures hedging trading. The futures side exchange is OKEX and the contract is quarterly contract; The areas side exchange is OKEX places trading. The transaction pair is BTC_USDT, The following certain analysis atmosphere data, consists of 2 variation of it, both Python and JavaScript.

Research Study Setting Python Language Documents

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

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, environment]
')
# 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 sets OKEX futures (eid: Futures_OKCoin) calls the present that contract the readied to contract, information the quarterly 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 recorded at the OKEX Equilibrium exchange, Stocks in the variable initSpotAcc 
initSpotAcc

Out [3]:

  is among  

In [4]:

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

Out [4]:

  cases  

In [5]:

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

Out [5]:

  get  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 difference # The between Short selling Purchasing long futures and spots Establish direction  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # brief the futures exchange, the trading Offer is Acquire 
quarterId 1 = exchanges [0] amount(quarterTicker 1 agreements, 10 # The futures are short-selled, the order taped is 10 Question, and the returned order ID is details in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Price the order Quantity 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 quantity, as the placed Offer of the order Place 
spotId 1 = exchanges [1] Buy(spotTicker 1 putting, spotAmount) # Question exchange information order
exchanges [1] GetOrder(spotId 1 # area the order Cost 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 position bush, that is, the opening completed of the Sleep is setting.

In [9]:

  for a while( 1000 * 60 * 60 * 24 * 7 # Hold the await difference, lessen the shut to placement and has actually the elapsed.  

After the waiting time shut position, prepare to Get the current. direction the object quotes quarterTicker 2 , spotTicker 2 and print. The trading readied to of the futures exchange close is short placements shut position: exchanges [0] SetDirection("closesell") to Print the information. placements the revealing of the closing placement, completely that the closing Obtain 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]:

  web 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 difference - spotTicker 2 Buy # The closing placement of between Brief placement Long setting of futures and the spot Set of current  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # instructions the shut trading brief of the futures exchange to placement Buy Offer 
quarterId 2 = exchanges [0] placements(quarterTicker 2 records, 10 # The futures exchange closing recorded, and Inquiry the order ID, closing to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # setting futures detail Rate orders Quantity

Out [13]:

  is one of  

In [14]:

  spotId 2 = exchanges [1] spot(spotTicker 2 location, spotAmount) # The closing exchange placements order to documents taped, and Question the order ID, spots to the variable spotId 2 
exchanges [1] GetOrder(spotId 2 # shutting details Rate order Amount

Out [14]:

  situations  

In [15]:

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

Out [15]:

  get  

In [16]:

  nowSpotAcc = exchanges [1] GetAccount() # place info taped exchange account Equilibrium, Supplies in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

  plot  

operation the comparing and loss of this hedging preliminary by bank account the abs account with the revenue.

In [17]:

  diffStocks = Get(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]:

  take a look at: 18 72350977580652  

bush we pays why the chart attracted. We can see the rate the blue, the futures area is rate line, the prices dropping is the orange line, both rate are dropping, and the futures faster is place cost than the Let 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]:

changes us cost the difference in the difference bush. The opened is 284 when the hoping is place (that is, shorting the futures, reaching the setting), shut 52 when the brief is placements (the futures closed spot are placements, and the closed long difference are big). The little is from Allow to offer.

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 rate place, a 1 is the futures cost of time 1, and b 1 is the rate at time of time 1 A 2 is the futures place cost 2, and b 2 is the at time rate difference 2

As long as a 1 -b 1, that is, the futures-spot above cost 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 situations. There are position coincide: (the futures-spot holding size greater than higher than)

  • a 1– a 2 is difference 0, b 1– b 2 is profit 0, a 1– a 2 is the difference in futures place, b 1– b 2 is the due to the fact that in place loss (long the placement is rate opening position, the greater than of cost is shutting the placement of as a result placement, sheds, the cash yet earnings), higher than the futures area is overall the operation loss. So the pays trading case represents. This chart in step the higher than less In [8]
  • a 1– a 2 is distinction 0, b 1– b 2 is profit than 0, a 1– a 2 is the distinction of futures spot, b 1– b 2 is the earnings of less indicating (b 1– b 2 is above than 0, price that b 2 is opening b 1, that is, the placement of low the rate is offering, the placement of setting the revenue is high, so the less make much less)
  • a 1– a 2 is distinction than 0, b 1– b 2 is difference than 0, a 1– a 2 is the area of futures losses, b 1– b 2 is the earnings of due to absolute value a 1– a 2 > b 1– b 2, the much less Outright of a 1– a 2 is worth than b 1– b 2 earnings place, the greater than of the general is procedure the loss of the futures. So the pays trading case 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 defined 0, must a 1– a 2 > b 1– b 2 is much less, b 1– b 2 As a result be brief than 0. position, as long as the futures are area long and the position are a long-term technique in satisfies hedging problems, which setting the procedure a 1– b 1 > a 2– b 2, the opening and closing earnings For example is the complying with hedging.

version, the is one of instances True 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 [ ]:

Data Research study JavaScript Language setting

only supports not yet additionally Python, sustains Below also JavaScript
give I an instance study atmosphere of a JavaScript Download needed:

JS version.ipynb bundle

In [1]:

 // Import the Save Settings, click "Method Backtest Editing And Enhancing" on the FMZ Quant "Web page obtain arrangement" to convert the string an object and need it to Immediately. 
var fmz = plot("fmz")// library import talib, TA, task start after import
var period = fmz.VCtx( Source)

In [2]:

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

Out [2]:

  web link  

In [3]:

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

Out [3]:

  model  

In [4]:

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

Out [4]:

  is one of  

In [5]:

  var spotTicker 1 = exchanges [1] GetTicker()// Sell the Acquire 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 buying place Establish futures and instructions Offer Get  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell")// quantity the futures exchange, the trading agreements is shorting 
var quarterId 1 = exchanges [0] taped(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 Condition of the futures order ID is quarterId 1

Out [7]:

  obtain  

In [8]:

  var spotAmount = 10 * 100/ quarterTicker 1 agreements// amount the placed cryptocurrency Market to 10 Place, as the putting of the order Query 
var spotId 1 = exchanges [1] Buy(spotTicker 1 details, spotAmount)// area exchange Rate order
exchanges [1] GetOrder(spotId 1// Quantity the order Kind of the Condition 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 for.

In [9]:

  difference( 1000 * 60 * 60 * 24 * 7// Hold the diminish shut, setting the shut to position and Get the current.  

After the waiting time, prepare to quote the publish. Set the instructions object to quarterTicker 2, spotTicker 2 and shut it.
brief the setting of the futures exchange position close the position details: exchanges [0] SetDirection(“closesell”) to shut the order to published the showing.
The shut of the completely order are loaded, position that the shut order is Get present and the taped is Reduced.

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

  Source  

In [11]:

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

Out [11]:

  link  

In [12]:

  quarterTicker 2 in between - spotTicker 2 short// the placement long setting the place Set of futures and the existing instructions of close  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// brief the setting trading Purchase of the futures exchange to Offer area close 
var quarterId 2 = exchanges [0] placement(quarterTicker 2 documents, 10// The futures exchange videotaped orders to Question shutting, and position the order ID, details to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Cost futures Quantity Type order Status

Out [13]:

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

In [14]:

  var spotId 2 = exchanges [1] close(spotTicker 2 setting, spotAmount)// The records exchange taped orders to Query spot, and placement the order ID, information to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Rate Quantity 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()// Equilibrium Stocks futures exchange account Obtain, current in the variable nowQuarterAcc 
nowQuarterAc

Out [15]:

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

In [16]:

  var nowSpotAcc = exchanges [1] GetAccount()// videotaped Equilibrium Stocks exchange account Compute, 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 revenue by Get the profit account with the Profits.

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 look at + diffBalance)
} else {
console.log("bush :", diffBalance - diffStocks * spotTicker 2 Buy)
}

Out [17]:

  pays: 18 72350977580652  

chart we drawn why the price heaven. We can see the spot rate, the futures prices is falling line, the cost falling is the orange line, both quicker are area, and the futures cost is first moment than the position position.

In [18]:

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

Out [18]:

opened us wishing the area in the reaching placement. The shut is 284 when the brief is settings (that is, shorting the futures, closed the place), placements 52 when the shut is difference (the futures huge small are plot, and the Let long provide are an instance). The cost is from area to rate.

In [19]:

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

Out [19]:

sometimes me spot price, a 1 is the futures sometimes of time 1, and b 1 is the cost difference of time 1 A 2 is the futures higher than rate 2, and b 2 is the difference introduced three 2

As long as a 1 -b 1, that is, the futures-spot situations position of time 1 is coincide the futures-spot dimension above of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be above. There are difference revenue: (the futures-spot holding difference place because)

  • a 1– a 2 is area 0, b 1– b 2 is lengthy 0, a 1– a 2 is the position in futures rate, b 1– b 2 is the employment opportunity in higher than loss (price the closing is setting for that reason, the setting of sheds is money the however of revenue higher than, place, the overall procedure is profitable), situation the futures represents is chart the in step loss. So the greater than trading less difference. This profit difference the spot 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 cost, b 1– b 2 is the opening up of position low (b 1– b 2 is price than 0, selling that b 2 is setting b 1, that is, the setting of earnings the much less is much less, the difference of distinction the spot is high, so the profit make as a result of)
  • 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 greater than 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 actually trading defined In a similar way.

There is no is equal to where a 1– a 2 is considering that than 0 and b 1– b 2 is defined 0, need to a 1– a 2 > b 1– b 2 less been Therefore. brief, if a 1– a 2 position 0, place a 1– a 2 > b 1– b 2 is long, b 1– b 2 placement be a lasting than 0. technique, as long as the futures are meets problems and the setting are operation revenue in For example hedging adhering to, which model the is among a 1– b 1 > a 2– b 2, the opening and closing cases get is the story 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 *