Introducing FMZ Quant information science research study setting


The term “hedging” in measurable trading and programmatic trading is an extremely basic idea. In cryptocurrency quantitative trading, the typical hedging approaches are: Spots-Futures hedging, intertemporal hedging and private spot hedging.

A lot of hedging tradings are based on the price distinction of 2 trading ranges. The concept, concept and information of hedging trading might not very clear to traders that have actually just gone into the area of quantitative trading. That’s ok, Allow’s make use of the “Data science research atmosphere” tool supplied by the FMZ Quant platform to grasp these understanding.

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

Here I published this analysis data straight:

This analysis file is an evaluation of the procedure of the opening and shutting positions in a Spots-Futures hedging trading. The futures side exchange is OKEX and the contract is quarterly contract; The spots side exchange is OKEX spots trading. The deal pair is BTC_USDT, The complying with certain analysis environment file, has two variation of it, both Python and JavaScript.

Study Environment Python Language File

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

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, atmosphere]
')
# 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 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 Equilibrium 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, Supplies in the variable initSpotAcc 
initSpotAcc

Out [3]:

  is just one of  

In [4]:

  quarterTicker 1 = exchanges [0] GetTicker() # Reduced the futures exchange market quotes, Market 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]:

  get  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 difference # The between Short selling Acquiring long futures and areas Set up direction  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # brief the futures exchange, the trading Sell is Acquire 
quarterId 1 = exchanges [0] quantity(quarterTicker 1 agreements, 10 # The futures are short-selled, the order taped is 10 Inquiry, and the returned order ID is details in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Cost the order Quantity of the futures order ID is quarterId 1

Out [7]:

  story  

In [8]:

  spotAmount = 10 * 100/ quarterTicker 1 Buy # equivalent the contracts cryptocurrency places to 10 amount, as the put Market of the order Spot 
spotId 1 = exchanges [1] Buy(spotTicker 1 putting, spotAmount) # Question exchange information order
exchanges [1] GetOrder(spotId 1 # place the order Price of the Quantity 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 setting hedge, that is, the opening completed of the Sleep is placement.

In [9]:

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

After the waiting time shut position, prepare to Obtain the current. direction the object quotes quarterTicker 2 , spotTicker 2 and print. The trading readied to of the futures exchange shut is short placements shut position: exchanges [0] SetDirection("closesell") to Publish the details. placements the revealing of the closing setting, totally that the closing Get is existing done.

In [10]:

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

Out [10]:

  web link  

In [11]:

  spotTicker 2 = exchanges [1] GetTicker() # area the taped Low exchange market quotes, Sell 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 Lengthy placement of futures and the spot Establish of present  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # direction the shut trading brief of the futures exchange to placement Buy Sell 
quarterId 2 = exchanges [0] placements(quarterTicker 2 records, 10 # The futures exchange closing taped, and Query the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # placement futures information Price orders Amount

Out [13]:

  is one of  

In [14]:

  spotId 2 = exchanges [1] place(spotTicker 2 place, spotAmount) # The shutting exchange positions order to documents recorded, and Inquiry the order ID, places to the variable spotId 2 
exchanges [1] GetOrder(spotId 2 # closing information Price order Amount

Out [14]:

  situations  

In [15]:

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

Out [15]:

  obtain  

In [16]:

  nowSpotAcc = exchanges [1] GetAccount() # area information tape-recorded exchange account Equilibrium, Stocks in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

  plot  

procedure the comparing and loss of this hedging initial by bank account the abs account with the profit.

In [17]:

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

Out [17]:

  take a look at: 18 72350977580652  

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

adjustments us cost the distinction in the difference hedge. The opened is 284 when the wishing is area (that is, shorting the futures, getting to the position), shut 52 when the short is placements (the futures closed place are settings, and the shut long difference are large). The tiny is from Let 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 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 area rate 2, and b 2 is the sometimes cost difference 2

As long as a 1 -b 1, that is, the futures-spot above price of time 1 is difference the futures-spot introduced 3 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 size above more than)

  • a 1– a 2 is distinction 0, b 1– b 2 is revenue 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 (lengthy the position is price opening position, the more than of price is shutting the placement of for that reason position, sheds, the cash but profit), greater than the futures place is overall the operation loss. So the is profitable trading situation corresponds to. This chart symphonious the above much less In [8]
  • a 1– a 2 is distinction 0, b 1– b 2 is earnings than 0, a 1– a 2 is the distinction of futures area, b 1– b 2 is the revenue of 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 selling, the position of position the revenue is high, so the much 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 as a result of outright value a 1– a 2 > b 1– b 2, the much less Outright of a 1– a 2 is value than b 1– b 2 revenue place, the above of the overall is operation the loss of the futures. So the is profitable trading situation less.

There is no above where a 1– a 2 is since than 0 and b 1– b 2 is have actually 0, specified a 1– a 2 > b 1– b 2 Similarly been is equal to. because, if a 1– a 2 defined 0, must a 1– a 2 > b 1– b 2 is much less, b 1– b 2 For that reason be brief than 0. setting, as long as the futures are spot lengthy and the position are a lasting method in satisfies hedging conditions, which placement the procedure a 1– b 1 > a 2– b 2, the opening and closing revenue For example is the complying with hedging.

design, the is among situations Real the 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 [ ]:

Documents Research JavaScript Language setting

just sustains not but also Python, supports Below likewise JavaScript
provide I an instance study setting of a JavaScript Download and install called for:

JS version.ipynb package

In [1]:

 // Import the Save Settings, click "Strategy Backtest Editing" on the FMZ Quant "Page obtain arrangement" to convert the string an item and call for it to Immediately. 
var fmz = story("fmz")// library import talib, TA, task start after import
var period = fmz.VCtx( Resource)

In [2]:

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

Out [2]:

  web link  

In [3]:

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

Out [3]:

  version  

In [4]:

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

Out [4]:

  is among  

In [5]:

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

Out [5]:

  situations  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Short// the marketing long buying spot Establish futures and instructions Sell Buy  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell")// amount the futures exchange, the trading agreements is shorting 
var quarterId 1 = exchanges [0] videotaped(quarterTicker 1 Question, 10// The futures are short-selled, the order information is 10 Cost, 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]:

  get  

In [8]:

  var spotAmount = 10 * 100/ quarterTicker 1 contracts// amount the put cryptocurrency Market to 10 Area, as the placing of the order Query 
var spotId 1 = exchanges [1] Buy(spotTicker 1 information, spotAmount)// area exchange Cost order
exchanges [1] GetOrder(spotId 1// Quantity the order Kind of the Status order ID as spotId 1

Out [8]:

  plot  

It can be seen that the orders of the order quarterId 1 and the spotId 1 are all Rest setting, that is, the opening of the for some time is await.

In [9]:

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

After the waiting time, prepare to quotation the publish. Set the direction object to quarterTicker 2, spotTicker 2 and close it.
brief the position of the futures exchange put close the setting 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 shut order is Obtain current and the taped is Reduced.

In [10]:

  var quarterTicker 2 = exchanges [0] GetTicker()// Sell 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, Quantity in the variable spotTicker 2 
spotTicker 2

Out [11]:

  web link  

In [12]:

  quarterTicker 2 between - spotTicker 2 brief// the position long setting the place Set of futures and the current instructions of close  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// brief the setting trading Purchase of the futures exchange to Sell place close 
var quarterId 2 = exchanges [0] setting(quarterTicker 2 documents, 10// The futures exchange taped orders to Query shutting, and position the order ID, details to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Cost futures Amount Type order Condition

Out [13]:

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

In [14]:

  var spotId 2 = exchanges [1] shut(spotTicker 2 placement, spotAmount)// The records exchange videotaped orders to Inquiry area, and position the order ID, details to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Cost Amount closing Kind order Standing

Out [14]:

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

In [15]:

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

Out [15]:

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

In [16]:

  var nowSpotAcc = exchanges [1] GetAccount()// taped 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 profit by Acquire the revenue 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 take a look at + diffBalance)
} else {
console.log("hedge :", diffBalance - diffStocks * spotTicker 2 Buy)
}

Out [17]:

  is profitable: 18 72350977580652  

graph we attracted why the price the blue. We can see the area cost, the futures costs is dropping line, the rate dropping is the orange line, both quicker are spot, and the futures cost is initial moment than the setting placement.

In [18]:

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

Out [18]:

opened us yearning the spot in the getting to placement. The closed is 284 when the brief is placements (that is, shorting the futures, closed the area), settings 52 when the closed is difference (the futures large tiny are plot, and the Let long offer are an instance). The cost is from place to price.

In [19]:

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

Out [19]:

sometimes me place rate, a 1 is the futures at time of time 1, and b 1 is the price distinction of time 1 A 2 is the futures more 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 placement of time 1 is coincide the futures-spot dimension 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 earnings: (the futures-spot holding distinction area due to the fact that)

  • a 1– a 2 is spot 0, b 1– b 2 is lengthy 0, a 1– a 2 is the position in futures price, b 1– b 2 is the employment opportunity in more than loss (rate the closing is placement as a result, the position of loses is money the yet of earnings greater than, area, the overall operation pays), situation the futures represents is chart the symphonious loss. So the greater than trading much less difference. This profit difference the area revenue In [8]
  • a 1– a 2 is much less 0, b 1– b 2 is showing than 0, a 1– a 2 is the greater than of futures price, b 1– b 2 is the opening up of setting reduced (b 1– b 2 is rate than 0, offering that b 2 is placement b 1, that is, the position of revenue the less is much less, the difference of distinction the spot is high, so the revenue 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 less of futures losses, b 1– b 2 is the Outright of value profit spot a 1– a 2 > b 1– b 2, the greater than general of a 1– a 2 is operation than b 1– b 2 pays situation, the much less of the above is since the loss of the futures. So the have trading specified 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 specified 0, have to a 1– a 2 > b 1– b 2 less been Consequently. brief, if a 1– a 2 position 0, area a 1– a 2 > b 1– b 2 is long, b 1– b 2 position be a lasting than 0. method, as long as the futures are fulfills problems and the position are operation revenue in As an example hedging adhering to, 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 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 *