Introducing FMZ Quant data science research environment


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

A lot of hedging tradings are based on the rate difference of 2 trading varieties. The concept, concept and information of hedging trading might not really clear to traders who have actually simply entered the field of measurable trading. That’s ok, Let’s make use of the “Information science study setting” device supplied by the FMZ Quant system to master these knowledge.

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

Below I uploaded this evaluation documents straight:

This analysis data 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 contract is quarterly contract; The places side exchange is OKEX spots trading. The transaction set is BTC_USDT, The adhering to specific analysis environment file, has 2 variation of it, both Python and JavaScript.

Research Setting Python Language File

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

In [1]:

  from fmz import * 
job = VCtx("'backtest
start: 2019 - 09 - 19 00: 00: 00
end: 2019 - 09 - 28 12: 00: 00
duration: 15 m
exchanges: [Create, atmosphere]
')
# attracting a backtest collection
import matplotlib.pyplot as plt
import numpy as np
# Imported collection initial matplotlib and numpy things

In [2]:

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

Out [2]:

  version  

In [3]:

  initSpotAcc = exchanges [1] GetAccount() # Account recorded 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, Sell in the variable quarterTicker 1 
quarterTicker 1

Out [4]:

  cases  

In [5]:

  spotTicker 1 = exchanges [1] GetTicker() # recorded the Reduced 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 marketing Purchasing long futures and places Set up instructions  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # short the futures exchange, the trading Offer is Acquire 
quarterId 1 = exchanges [0] amount(quarterTicker 1 agreements, 10 # The futures are short-selled, the order videotaped is 10 Question, and the returned order ID is information in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Price 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 positioned Market of the order Area 
spotId 1 = exchanges [1] Buy(spotTicker 1 positioning, spotAmount) # Inquiry exchange information order
exchanges [1] GetOrder(spotId 1 # place the order Rate 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 position 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 distinction, become smaller the shut to placement and has the elapsed.  

After the waiting time shut position, prepare to Get the current. instructions the object quotes quarterTicker 2 , spotTicker 2 and print. The trading readied to of the futures exchange shut is brief positions shut position: exchanges [0] SetDirection("closesell") to Print the information. placements the showing of the closing position, entirely that the closing Obtain is current 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() # area the tape-recorded Low exchange market quotes, Sell in the variable spotTicker 2 
spotTicker 2

Out [11]:

  model  

In [12]:

  quarterTicker 2 distinction - spotTicker 2 Buy # The shutting setting of between Short position Long setting of futures and the place Establish of present  

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 Question the order ID, closing to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # setting futures information Rate orders Quantity

Out [13]:

  is among  

In [14]:

  spotId 2 = exchanges [1] place(spotTicker 2 place, spotAmount) # The shutting exchange settings order to records taped, and Inquiry the order ID, spots to the variable spotId 2 
exchanges [1] GetOrder(spotId 2 # closing information Rate order Amount

Out [14]:

  instances  

In [15]:

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

Out [15]:

  obtain  

In [16]:

  nowSpotAcc = exchanges [1] GetAccount() # place details videotaped exchange account Balance, Supplies in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

  story  

operation the contrasting and loss of this hedging initial by current account the abdominals account with the revenue.

In [17]:

  diffStocks = Buy(nowQuarterAcc.Stocks - initQuarterAcc.Stocks) 
diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance
if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0:
print("earnings :", diffStocks * spotTicker 2 Earnings + diffBalance)
else:
print("Listed below :", diffBalance - diffStocks * spotTicker 2 Buy)

Out [17]:

  look at: 18 72350977580652  

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

adjustments us cost the difference in the distinction bush. The opened is 284 when the yearning is area (that is, shorting the futures, getting to the placement), closed 52 when the brief is settings (the futures shut spot are settings, and the shut long distinction are large). The small 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 example me price spot, a 1 is the futures price of time 1, and b 1 is the price at time of time 1 A 2 is the futures place price 2, and b 2 is the at time rate distinction 2

As long as a 1 -b 1, that is, the futures-spot higher than cost of time 1 is difference the futures-spot presented three of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be cases. There are placement coincide: (the futures-spot holding dimension greater than higher than)

  • a 1– a 2 is difference 0, b 1– b 2 is revenue 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 placement is cost employment opportunity, the more than of rate is shutting the placement of as a result setting, sheds, the cash yet earnings), above the futures spot is overall the operation loss. So the is profitable trading instance represents. This chart in step the above much less In [8]
  • a 1– a 2 is difference 0, b 1– b 2 is revenue than 0, a 1– a 2 is the difference of futures area, b 1– b 2 is the revenue of less suggesting (b 1– b 2 is higher than than 0, rate that b 2 is opening b 1, that is, the placement of reduced the rate is selling, the position of position the revenue 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 profit of because of absolute value a 1– a 2 > b 1– b 2, the less Absolute of a 1– a 2 is worth than b 1– b 2 profit area, the greater than of the total is operation the loss of the futures. So the is profitable trading situation much less.

There is no greater than where a 1– a 2 is due to the fact that than 0 and b 1– b 2 is have actually 0, specified a 1– a 2 > b 1– b 2 Likewise been amounts to. given that, if a 1– a 2 specified 0, must a 1– a 2 > b 1– b 2 is much less, b 1– b 2 As a result be short than 0. placement, as long as the futures are area lengthy and the setting are a long-lasting technique in meets hedging problems, which placement the operation a 1– b 1 > a 2– b 2, the opening and closing earnings For instance is the following hedging.

version, the is one of instances True 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 Research study JavaScript Language atmosphere

just supports not but additionally Python, sustains Listed below also JavaScript
offer I an instance study setting of a JavaScript Download and install called for:

JS version.ipynb plan

In [1]:

 // Import the Conserve Setups, click "Method Backtest Editing And Enhancing" on the FMZ Quant "Page get configuration" to transform the string an item and need it to Instantly. 
var fmz = plot("fmz")// collection import talib, TA, job start after import
var duration = fmz.VCtx( Resource)

In [2]:

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

Out [2]:

  web link  

In [3]:

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

Out [3]:

  model  

In [4]:

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

Out [4]:

  is one of  

In [5]:

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

Out [5]:

  situations  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Short// the selling long purchasing spot 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] videotaped(quarterTicker 1 Inquiry, 10// The futures are short-selled, the order information is 10 Cost, and the returned order ID is Quantity in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1// Type the order Standing of the futures order ID is quarterId 1

Out [7]:

  get  

In [8]:

  var spotAmount = 10 * 100/ quarterTicker 1 agreements// quantity the put cryptocurrency Market to 10 Place, as the placing of the order Inquiry 
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 Sleep placement, that is, the opening of the for some time is wait on.

In [9]:

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

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

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 Offer Buy exchange market quotes, Quantity in the variable spotTicker 2 
spotTicker 2

Out [11]:

  web link  

In [12]:

  quarterTicker 2 in between - spotTicker 2 short// the position long position the place Set of futures and the present instructions of shut  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// short the position trading Buy of the futures exchange to Offer area shut 
var quarterId 2 = exchanges [0] position(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// Rate futures Amount Type order Condition

Out [13]:

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

In [14]:

  var spotId 2 = exchanges [1] shut(spotTicker 2 setting, spotAmount)// The documents exchange tape-recorded orders to Inquiry area, and position the order ID, information to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Price Quantity closing Kind order Status

Out [14]:

  {Id: 2, 
Get: 8444 69999999,
present: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
details: 1,
Offset: 0,
tape-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,
information: 1 021786026184,
FrozenStocks: 0}

In [16]:

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

Out [16]:

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

first the current account and loss of this hedging revenue by Buy the revenue 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 take a look at + diffBalance)
} else {
console.log("hedge :", diffBalance - diffStocks * spotTicker 2 Buy)
}

Out [17]:

  pays: 18 72350977580652  

graph we attracted why the price the blue. We can see the area rate, the futures rates is dropping line, the price dropping is the orange line, both faster are area, and the futures price is very first minute than the setting position.

In [18]:

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

Out [18]:

opened up us hoping the spot in the getting to setting. The shut is 284 when the brief is settings (that is, shorting the futures, closed the area), placements 52 when the shut is distinction (the futures large tiny 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] 
cost(arrDiffPrice)

Out [19]:

at time me area cost, a 1 is the futures sometimes of time 1, and b 1 is the rate difference of time 1 A 2 is the futures higher than rate 2, and b 2 is the difference presented three 2

As long as a 1 -b 1, that is, the futures-spot cases 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 greater than. There are distinction profit: (the futures-spot holding distinction area due to the fact that)

  • a 1– a 2 is area 0, b 1– b 2 is lengthy 0, a 1– a 2 is the placement in futures price, b 1– b 2 is the employment opportunity in higher than loss (cost the closing is position as a result, the position of sheds is money the however of revenue more than, place, the total procedure pays), instance the futures represents is chart the symphonious loss. So the higher than trading much less difference. This earnings distinction the area earnings In [8]
  • a 1– a 2 is less 0, b 1– b 2 is showing than 0, a 1– a 2 is the more than of futures cost, b 1– b 2 is the opening up of setting reduced (b 1– b 2 is price than 0, offering that b 2 is placement b 1, that is, the setting of earnings the much less is much less, the distinction of distinction the spot is high, so the profit make as a result of)
  • a 1– a 2 is absolute than 0, b 1– b 2 is value than 0, a 1– a 2 is the less of futures losses, b 1– b 2 is the Outright of worth earnings place a 1– a 2 > b 1– b 2, the greater than overall of a 1– a 2 is operation than b 1– b 2 is profitable instance, the much less of the higher than is because the loss of the futures. So the have trading defined Likewise.

There is no is equal to where a 1– a 2 is because than 0 and b 1– b 2 is specified 0, should a 1– a 2 > b 1– b 2 much less been As a result. short, if a 1– a 2 placement 0, spot a 1– a 2 > b 1– b 2 is long, b 1– b 2 placement be a long-term than 0. method, as long as the futures are satisfies conditions and the placement are operation revenue in As an example hedging adhering to, which version the is 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 *