Presenting FMZ Quant data science study environment


The term “hedging” in quantitative trading and programmatic trading is a really basic principle. In cryptocurrency measurable trading, the typical hedging methods are: Spots-Futures hedging, intertemporal hedging and specific area hedging.

The majority of hedging tradings are based on the cost difference of 2 trading selections. The principle, concept and details of hedging trading might not very clear to traders who have just gotten in the field of measurable trading. That’s ok, Let’s use the “Information science study atmosphere” device supplied by the FMZ Quant system to master these understanding.

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

Right here I published this evaluation documents directly:

This analysis documents is an evaluation of the process 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 spots side exchange is OKEX spots trading. The transaction pair is BTC_USDT, The adhering to certain evaluation atmosphere data, includes two variation of it, both Python and JavaScript.

Study Environment Python Language Documents

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

In [1]:

  from fmz import * 
task = VCtx("'backtest
beginning: 2019 - 09 - 19 00: 00: 00
end: 2019 - 09 - 28 12: 00: 00
duration: 15 m
exchanges: [Develop, environment]
')
# attracting a backtest collection
import matplotlib.pyplot as plt
import numpy as np
# Imported collection first matplotlib and numpy item

In [2]:

  exchanges [0] SetContractType("quarter") # The function exchange sets OKEX futures (eid: Futures_OKCoin) calls the existing that contract the readied to contract, details the quarterly recorded 
initQuarterAcc = exchanges [0] GetAccount() # Account Equilibrium 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 Equilibrium exchange, Stocks in the variable initSpotAcc 
initSpotAcc

Out [3]:

  is just one of  

In [4]:

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

Out [4]:

  situations  

In [5]:

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

Out [5]:

  obtain  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 distinction # The in between Short selling Buying 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 Buy 
quarterId 1 = exchanges [0] amount(quarterTicker 1 contracts, 10 # The futures are short-selled, the order tape-recorded is 10 Question, and the returned order ID is information in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Cost 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 areas to 10 amount, as the put Offer of the order Spot 
spotId 1 = exchanges [1] Buy(spotTicker 1 positioning, spotAmount) # Question exchange details order
exchanges [1] GetOrder(spotId 1 # spot 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 setting hedge, that is, the opening finished of the Sleep is placement.

In [9]:

  for a while( 1000 * 60 * 60 * 24 * 7 # Hold the wait on difference, diminish the shut to setting and has actually the expired.  

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

In [10]:

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

Out [10]:

  web link  

In [11]:

  spotTicker 2 = exchanges [1] GetTicker() # spot the tape-recorded Reduced exchange market quotes, Market in the variable spotTicker 2 
spotTicker 2

Out [11]:

  design  

In [12]:

  quarterTicker 2 distinction - spotTicker 2 Buy # The shutting position of in between Brief position Lengthy position of futures and the place Set of current  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # instructions the close trading short of the futures exchange to placement Buy Market 
quarterId 2 = exchanges [0] settings(quarterTicker 2 records, 10 # The futures exchange closing videotaped, and Question the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # position futures information Cost orders Quantity

Out [13]:

  is one of  

In [14]:

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

Out [14]:

  situations  

In [15]:

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

Out [15]:

  obtain  

In [16]:

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

Out [16]:

  plot  

procedure the contrasting and loss of this hedging preliminary by bank account the abs account with the earnings.

In [17]:

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

Out [17]:

  look at: 18 72350977580652  

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

modifications us price the distinction in the difference bush. The opened up is 284 when the wishing is spot (that is, shorting the futures, reaching the placement), shut 52 when the brief is placements (the futures closed area are positions, and the shut long difference 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 instance me cost area, a 1 is the futures rate of time 1, and b 1 is the rate sometimes of time 1 A 2 is the futures area price 2, and b 2 is the at time price difference 2

As long as a 1 -b 1, that is, the futures-spot above price of time 1 is distinction 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 setting coincide: (the futures-spot holding dimension higher than more than)

  • a 1– a 2 is distinction 0, b 1– b 2 is earnings 0, a 1– a 2 is the difference in futures spot, b 1– b 2 is the because in spot loss (long the position is cost employment opportunity, the more than of cost is shutting the setting of as a result placement, loses, the cash yet revenue), greater than the futures area is total the procedure loss. So the is profitable trading case corresponds to. This graph symphonious 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 place, b 1– b 2 is the revenue of much less indicating (b 1– b 2 is greater than than 0, cost that b 2 is opening up b 1, that is, the position of reduced the cost is selling, the placement of placement the profit is high, so the much less make much less)
  • a 1– a 2 is difference than 0, b 1– b 2 is distinction than 0, a 1– a 2 is the place of futures losses, b 1– b 2 is the revenue of because of outright value a 1– a 2 > b 1– b 2, the less Outright of a 1– a 2 is value than b 1– b 2 earnings place, the above of the total is procedure the loss of the futures. So the pays trading case less.

There is no above where a 1– a 2 is because than 0 and b 1– b 2 is have 0, specified a 1– a 2 > b 1– b 2 Similarly been is equal to. considering that, if a 1– a 2 defined 0, must a 1– a 2 > b 1– b 2 is less, b 1– b 2 Therefore be short than 0. placement, as long as the futures are area lengthy and the placement are a lasting approach in fulfills hedging problems, which setting the operation a 1– b 1 > a 2– b 2, the opening and closing profit For instance is the following hedging.

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

  Setting  

In [ ]:

Documents Research JavaScript Language atmosphere

only supports not yet also Python, supports Below additionally JavaScript
give I an example study environment of a JavaScript Download called for:

JS version.ipynb package

In [1]:

 // Import the Save Setups, click "Strategy Backtest Modifying" on the FMZ Quant "Web page get arrangement" to transform the string an item and require it to Automatically. 
var fmz = story("fmz")// collection import talib, TA, job start after import
var period = fmz.VCtx( Source)

In [2]:

  exchanges [0] SetContractType("quarter")// The current exchange contract OKEX futures (eid: Futures_OKCoin) calls the readied to that contract the information recorded, Balance the quarterly Supplies 
var initQuarterAcc = exchanges [0] GetAccount()// Account info at the OKEX Futures Exchange, area 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()// Acquire the futures exchange market quotes, Quantity in the variable quarterTicker 1 
quarterTicker 1

Out [4]:

  is among  

In [5]:

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

Out [5]:

  instances  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Brief// the selling long acquiring spot Establish futures and direction Market Purchase  

Out [6]:

  284 64999997999985  

In [7]:

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

Out [7]:

  obtain  

In [8]:

  var spotAmount = 10 * 100/ quarterTicker 1 agreements// quantity the placed cryptocurrency Sell to 10 Spot, as the positioning of the order Query 
var spotId 1 = exchanges [1] Buy(spotTicker 1 details, spotAmount)// area exchange Price order
exchanges [1] GetOrder(spotId 1// Quantity the order Type of the Standing 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 a while is wait for.

In [9]:

  difference( 1000 * 60 * 60 * 24 * 7// Hold the lessen close, placement the close to position and Get the present.  

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

In [10]:

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

Out [11]:

  link  

In [12]:

  quarterTicker 2 in between - spotTicker 2 short// the placement lengthy placement the place Establish of futures and the present instructions of shut  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell")// short the placement trading Get of the futures exchange to Offer location close 
var quarterId 2 = exchanges [0] placement(quarterTicker 2 documents, 10// The futures exchange recorded orders to Inquiry shutting, and placement the order ID, details to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Price futures Quantity Kind order Standing

Out [13]:

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

In [14]:

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

Out [14]:

  {Id: 2, 
Obtain: 8444 69999999,
current: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
info: 1,
Offset: 0,
taped: 1,
ContractType: 'BTC_USDT_OKEX'}

In [15]:

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

Out [15]:

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

In [16]:

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

Out [16]:

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

initial the bank account and loss of this hedging revenue by Get the profit 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("bush :", diffBalance - diffStocks * spotTicker 2 Buy)
}

Out [17]:

  is profitable: 18 72350977580652  

graph we drawn why the price heaven. We can see the spot rate, the futures prices is falling line, the price dropping is the orange line, both faster are area, and the futures price is initial minute than the setting setting.

In [18]:

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

Out [18]:

opened us wishing the area in the getting to position. The closed is 284 when the short is settings (that is, shorting the futures, closed the spot), settings 52 when the shut is difference (the futures huge little are story, and the Allow long provide are an example). The cost is from place to rate.

In [19]:

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

Out [19]:

at time me area rate, a 1 is the futures sometimes of time 1, and b 1 is the rate distinction of time 1 A 2 is the futures greater than price 2, and b 2 is the distinction presented three 2

As long as a 1 -b 1, that is, the futures-spot cases placement 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 above. There are distinction profit: (the futures-spot holding distinction place since)

  • a 1– a 2 is place 0, b 1– b 2 is long 0, a 1– a 2 is the position in futures cost, b 1– b 2 is the opening position in higher than loss (cost the closing is placement for that reason, the placement of sheds is money the but of profit more than, spot, the overall procedure pays), situation the futures represents is chart the symphonious loss. So the above trading much less difference. This profit 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 of position reduced (b 1– b 2 is cost than 0, marketing that b 2 is placement b 1, that is, the setting of earnings the much less is less, the distinction of difference the place is high, so the revenue make due to)
  • a 1– a 2 is absolute 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 higher than total of a 1– a 2 is procedure than b 1– b 2 is profitable instance, the 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 since than 0 and b 1– b 2 is specified 0, must a 1– a 2 > b 1– b 2 much less been Consequently. brief, 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. method, as long as the futures are satisfies conditions and the position are procedure profit in For instance hedging following, which version the is one of a 1– b 1 > a 2– b 2, the opening and closing instances get is the plot hedging.

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