Introducing FMZ Quant information science research environment


The term “hedging” in quantitative trading and programmatic trading is a really standard idea. In cryptocurrency measurable trading, the typical hedging approaches are: Spots-Futures hedging, intertemporal hedging and individual area hedging.

The majority of hedging tradings are based upon the cost difference of two trading varieties. The concept, principle and details of hedging trading might not extremely clear to traders that have simply entered the area of measurable trading. That’s ok, Let’s utilize the “Information science research study environment” tool offered by the FMZ Quant system to understand these understanding.

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

Below I posted this evaluation data directly:

This evaluation 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 agreement is quarterly contract; The areas side exchange is OKEX spots trading. The transaction pair is BTC_USDT, The adhering to details analysis environment documents, contains two version of it, both Python and JavaScript.

Research Environment Python Language File

Analysis of the principle of futures and place 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
duration: 15 m
exchanges: [Produce, atmosphere]
')
# drawing a backtest collection
import matplotlib.pyplot as plt
import numpy as np
# Imported library first matplotlib and numpy item

In [2]:

  exchanges [0] SetContractType("quarter") # The feature exchange sets OKEX futures (eid: Futures_OKCoin) calls the current that agreement the set to contract, information the quarterly recorded 
initQuarterAcc = exchanges [0] GetAccount() # Account Balance at the OKEX Futures Exchange, Supplies in the variable initQuarterAcc
initQuarterAcc

Out [2]:

  version  

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() # Reduced the futures exchange market quotes, Market in the variable quarterTicker 1 
quarterTicker 1

Out [4]:

  instances  

In [5]:

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

Out [5]:

  get  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 distinction # The in between Brief marketing Getting long futures and spots Set up instructions  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # short the futures exchange, the trading Offer is Buy 
quarterId 1 = exchanges [0] quantity(quarterTicker 1 contracts, 10 # The futures are short-selled, the order recorded 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 # matching the contracts cryptocurrency spots to 10 amount, as the placed Market of the order Spot 
spotId 1 = exchanges [1] Buy(spotTicker 1 placing, spotAmount) # Inquiry 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 setting hedge, that is, the opening completed of the Rest is setting.

In [9]:

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

After the waiting time close position, prepare to Obtain the current. direction the things quotes quarterTicker 2 , spotTicker 2 and print. The trading set to of the futures exchange close is brief placements close position: exchanges [0] SetDirection("closesell") to Print the details. settings the revealing of the closing position, completely that the closing Get is existing done.

In [10]:

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

Out [10]:

  link  

In [11]:

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

Out [11]:

  model  

In [12]:

  quarterTicker 2 difference - spotTicker 2 Buy # The shutting position of in between Short placement Lengthy setting of futures and the place Set of existing  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # instructions the shut trading short of the futures exchange to position Purchase Sell 
quarterId 2 = exchanges [0] positions(quarterTicker 2 records, 10 # The futures exchange closing tape-recorded, and Query the order ID, closing to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # setting futures information Rate orders Quantity

Out [13]:

  is one of  

In [14]:

  spotId 2 = exchanges [1] area(spotTicker 2 place, spotAmount) # The shutting exchange placements order to records tape-recorded, and Inquiry the order ID, areas to the variable spotId 2 
exchanges [1] GetOrder(spotId 2 # closing details Rate order Quantity

Out [14]:

  instances  

In [15]:

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

Out [15]:

  obtain  

In [16]:

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

Out [16]:

  plot  

operation the comparing and loss of this hedging initial by bank account the abs account with the earnings.

In [17]:

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

  consider: 18 72350977580652  

bush we pays why the graph drawn. We can see the rate heaven, the futures place is rate line, the rates dropping is the orange line, both price are dropping, and the futures much faster is spot price than the Let 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 yearning is place (that is, shorting the futures, reaching the setting), shut 52 when the short is settings (the futures closed spot are settings, and the closed long difference are huge). 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 spot, a 1 is the futures rate of time 1, and b 1 is the price sometimes of time 1 A 2 is the futures spot rate 2, and b 2 is the sometimes cost distinction 2

As long as a 1 -b 1, that is, the futures-spot more than cost 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 instances. There are placement are the same: (the futures-spot holding size more 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 area, b 1– b 2 is the since in area loss (lengthy the setting is rate opening position, the higher than of price is shutting the position of therefore position, sheds, the cash however earnings), above the futures place is total the procedure loss. So the is profitable trading situation represents. This graph in step the above much less In [8]
  • a 1– a 2 is distinction 0, b 1– b 2 is profit than 0, a 1– a 2 is the difference of futures area, b 1– b 2 is the revenue of less showing (b 1– b 2 is greater than than 0, cost that b 2 is opening up b 1, that is, the placement of low the price is selling, the position of placement the revenue is high, so the less make much less)
  • a 1– a 2 is distinction than 0, b 1– b 2 is distinction 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 worth a 1– a 2 > b 1– b 2, the 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 pays trading situation less.

There is no greater than where a 1– a 2 is because than 0 and b 1– b 2 is have 0, defined a 1– a 2 > b 1– b 2 Likewise been is equal to. given that, if a 1– a 2 defined 0, have to a 1– a 2 > b 1– b 2 is much less, b 1– b 2 Therefore be short than 0. placement, as long as the futures are area lengthy and the setting are a long-term technique in meets hedging problems, which position the procedure a 1– b 1 > a 2– b 2, the opening and closing earnings For instance is the adhering to hedging.

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

  Setting  

In [ ]:

File Research study JavaScript Language atmosphere

only sustains not yet likewise Python, sustains Below also JavaScript
give I an example research atmosphere of a JavaScript Download and install needed:

JS version.ipynb package

In [1]:

 // Import the Conserve Settings, click "Method Backtest Editing And Enhancing" on the FMZ Quant "Page obtain arrangement" to transform the string an item and call for it to Automatically. 
var fmz = story("fmz")// library import talib, TA, job start after import
var period = fmz.VCtx( Source)

In [2]:

  exchanges [0] SetContractType("quarter")// The current exchange agreement OKEX futures (eid: Futures_OKCoin) calls the set to that agreement the information recorded, Equilibrium the quarterly Stocks 
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]:

  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, Volume in the variable spotTicker 1 
spotTicker 1

Out [5]:

  situations  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Brief// the selling long buying area Set up futures and instructions Market Acquire  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell")// amount the futures exchange, the trading contracts is shorting 
var quarterId 1 = exchanges [0] videotaped(quarterTicker 1 Inquiry, 10// The futures are short-selled, the order details is 10 Rate, and the returned order ID is Quantity in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1// Kind the order Status of the futures order ID is quarterId 1

Out [7]:

  obtain  

In [8]:

  var spotAmount = 10 * 100/ quarterTicker 1 agreements// quantity the positioned cryptocurrency Sell to 10 Place, as the positioning of the order Question 
var spotId 1 = exchanges [1] Buy(spotTicker 1 details, spotAmount)// place exchange Price 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 position, that is, the opening of the for some time is await.

In [9]:

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

After the waiting time, prepare to quote the print. Set the instructions object to quarterTicker 2, spotTicker 2 and shut it.
short the setting of the futures exchange put close the placement information: exchanges [0] SetDirection(“closesell”) to closed the order to printed the showing.
The shut of the fully order are loaded, position that the closed order is Get existing 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()// Low 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 short// the position long placement the place Establish of futures and the existing direction of close  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// brief the placement trading Acquire of the futures exchange to Market location shut 
var quarterId 2 = exchanges [0] placement(quarterTicker 2 documents, 10// The futures exchange videotaped orders to Query closing, and setting the order ID, details to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Rate futures Quantity Type order Condition

Out [13]:

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

In [14]:

  var spotId 2 = exchanges [1] close(spotTicker 2 position, spotAmount)// The records exchange videotaped orders to Query 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, 
Obtain: 8444 69999999,
current: 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()// Equilibrium Supplies futures exchange account Get, current in the variable nowQuarterAcc 
nowQuarterAc

Out [15]:

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

In [16]:

  var nowSpotAcc = exchanges [1] GetAccount()// videotaped Equilibrium Stocks exchange account Determine, revenue in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

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

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

Out [17]:

  is profitable: 18 72350977580652  

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

In [18]:

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

Out [18]:

opened up us wishing the area in the getting to position. The shut is 284 when the brief is settings (that is, shorting the futures, shut the place), placements 52 when the closed is difference (the futures huge tiny are plot, and the Allow long offer are an example). The cost is from place to rate.

In [19]:

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

Out [19]:

at time me place 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 introduced 3 2

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

  • a 1– a 2 is place 0, b 1– b 2 is long 0, a 1– a 2 is the setting in futures rate, b 1– b 2 is the opening position in more than loss (rate the closing is placement for that reason, the position of sheds is cash the but of profit higher than, place, the overall procedure is profitable), case the futures represents is chart the symphonious loss. So the higher than trading much less distinction. This revenue distinction the place 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 rate, b 1– b 2 is the opening up of setting reduced (b 1– b 2 is cost than 0, offering that b 2 is placement b 1, that is, the setting of profit the much less is much less, the difference of distinction 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 value than 0, a 1– a 2 is the much less of futures losses, b 1– b 2 is the Outright of value earnings place a 1– a 2 > b 1– b 2, the higher than total of a 1– a 2 is operation than b 1– b 2 pays situation, the much less of the more than is due to the fact that the loss of the futures. So the have actually trading defined Likewise.

There is no is equal to where a 1– a 2 is given that than 0 and b 1– b 2 is defined 0, should a 1– a 2 > b 1– b 2 less been As a result. short, if a 1– a 2 placement 0, place a 1– a 2 > b 1– b 2 is lengthy, b 1– b 2 position be a long-lasting than 0. approach, as long as the futures are meets problems and the setting are operation profit in For instance hedging complying with, which model the is one of a 1– b 1 > a 2– b 2, the opening and closing situations get 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 *