Presenting FMZ Quant information science study environment


The term “hedging” in quantitative trading and programmatic trading is a very standard principle. In cryptocurrency quantitative trading, the typical hedging strategies are: Spots-Futures hedging, intertemporal hedging and private area hedging.

The majority of hedging tradings are based upon the cost difference of two trading varieties. The principle, principle and information of hedging trading might not really clear to investors who have actually simply gotten in the field of measurable trading. That’s ok, Let’s utilize the “Data science study setting” tool offered by the FMZ Quant system to master these knowledge.

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

Here I submitted this evaluation file straight:

This evaluation data is an evaluation of the process of the opening and shutting placements in a Spots-Futures hedging trading. The futures side exchange is OKEX and the agreement is quarterly agreement; The areas side exchange is OKEX places trading. The transaction set is BTC_USDT, The following particular analysis atmosphere data, consists of two version of it, both Python and JavaScript.

Research Atmosphere Python Language Documents

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

In [1]:

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

In [2]:

  exchanges [0] SetContractType("quarter") # The function exchange establishes OKEX futures (eid: Futures_OKCoin) calls the current that agreement the set to contract, information the quarterly 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 tape-recorded at the OKEX Equilibrium exchange, Supplies in the variable initSpotAcc 
initSpotAcc

Out [3]:

  is just one of  

In [4]:

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

Out [4]:

  situations  

In [5]:

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

Out [5]:

  obtain  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 difference # The between Brief marketing Getting lengthy futures and spots Set up instructions  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell") # short the futures exchange, the trading Offer is Purchase 
quarterId 1 = exchanges [0] amount(quarterTicker 1 agreements, 10 # The futures are short-selled, the order videotaped is 10 Query, and the returned order ID is information in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Rate the order Amount of the futures order ID is quarterId 1

Out [7]:

  plot  

In [8]:

  spotAmount = 10 * 100/ quarterTicker 1 Buy # equivalent the contracts cryptocurrency areas to 10 amount, as the placed Market of the order Spot 
spotId 1 = exchanges [1] Buy(spotTicker 1 placing, spotAmount) # Query exchange information order
exchanges [1] GetOrder(spotId 1 # spot the order Cost 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 position bush, that is, the opening finished of the Sleep is setting.

In [9]:

  for some time( 1000 * 60 * 60 * 24 * 7 # Hold the await difference, diminish the shut to setting and has actually the expired.  

After the waiting time close setting, prepare to Get the existing. instructions the item quotes quarterTicker 2 , spotTicker 2 and print. The trading readied to of the futures exchange close is brief settings shut position: exchanges [0] SetDirection("closesell") to Publish the information. settings the revealing of the closing setting, completely that the closing Get is present done.

In [10]:

  quarterTicker 2 = exchanges [0] GetTicker() # taped 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() # place 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 position of in between Short setting Long placement of futures and the place Set of current  

Out [12]:

  52 5000200100003  

In [13]:

  exchanges [0] SetDirection("closesell") # instructions the shut trading short of the futures exchange to placement Purchase Market 
quarterId 2 = exchanges [0] positions(quarterTicker 2 documents, 10 # The futures exchange closing taped, and Question the order ID, closing to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # position futures detail Price orders Amount

Out [13]:

  is one of  

In [14]:

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

Out [14]:

  situations  

In [15]:

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

Out [15]:

  obtain  

In [16]:

  nowSpotAcc = exchanges [1] GetAccount() # spot details tape-recorded exchange account Balance, Supplies in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

  plot  

procedure the comparing and loss of this hedging first by current 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("earnings :", diffStocks * spotTicker 2 Revenues + diffBalance)
else:
print("Listed below :", diffBalance - diffStocks * spotTicker 2 Buy)

Out [17]:

  consider: 18 72350977580652  

hedge we is profitable why the graph attracted. We can see the cost heaven, the futures area is cost line, the costs dropping is the orange line, both cost are dropping, and the futures faster is spot rate 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 rate the difference in the distinction hedge. The opened up is 284 when the yearning is place (that is, shorting the futures, reaching the position), shut 52 when the brief is placements (the futures closed spot are settings, and the shut long distinction 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 cost place, a 1 is the futures rate of time 1, and b 1 is the cost at time of time 1 A 2 is the futures place cost 2, and b 2 is the sometimes cost 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 cases. There are setting are the same: (the futures-spot holding size more than more 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 since in place loss (lengthy the position is cost employment opportunity, the greater than of cost is shutting the setting of therefore position, sheds, the cash but profit), greater than the futures place is overall the procedure loss. So the pays trading case represents. This chart symphonious the higher than less In [8]
  • a 1– a 2 is distinction 0, b 1– b 2 is revenue than 0, a 1– a 2 is the difference of futures spot, b 1– b 2 is the revenue of less showing (b 1– b 2 is above than 0, rate that b 2 is opening up b 1, that is, the setting of low the price is selling, the setting of position the earnings 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 profit of due to absolute worth a 1– a 2 > b 1– b 2, the much less Outright of a 1– a 2 is value than b 1– b 2 earnings place, the greater than of the total is procedure the loss of the futures. So the pays trading instance less.

There is no more than where a 1– a 2 is due to the fact that than 0 and b 1– b 2 is have 0, defined a 1– a 2 > b 1– b 2 Similarly been amounts to. considering that, if a 1– a 2 specified 0, must a 1– a 2 > b 1– b 2 is less, b 1– b 2 Consequently be short than 0. setting, as long as the futures are place lengthy and the position are a lasting approach in fulfills hedging conditions, which setting the operation a 1– b 1 > a 2– b 2, the opening and closing earnings As an example is the complying with hedging.

version, the is among cases 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 [ ]:

Data Study JavaScript Language environment

just sustains not but also Python, sustains Below additionally JavaScript
give I an example study setting of a JavaScript Download required:

JS version.ipynb bundle

In [1]:

 // Import the Save Setups, click "Strategy Backtest Modifying" on the FMZ Quant "Web page get setup" to transform the string an item and need it to Immediately. 
var fmz = plot("fmz")// collection import talib, TA, job begin after import
var period = fmz.VCtx( Resource)

In [2]:

  exchanges [0] SetContractType("quarter")// The present exchange agreement OKEX futures (eid: Futures_OKCoin) calls the set to that contract the details videotaped, Equilibrium 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, tape-recorded in the variable initSpotAcc 
initSpotAcc

Out [3]:

  version  

In [4]:

  var quarterTicker 1 = exchanges [0] GetTicker()// Purchase 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()// Offer the Get exchange market quotes, Quantity in the variable spotTicker 1 
spotTicker 1

Out [5]:

  instances  

In [6]:

  quarterTicker 1 Buy - spotTicker 1 Short// the marketing lengthy acquiring place Set up futures and direction Market Purchase  

Out [6]:

  284 64999997999985  

In [7]:

  exchanges [0] SetDirection("sell")// amount 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 information is 10 Rate, and the returned order ID is Quantity in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1// Kind the order Condition of the futures order ID is quarterId 1

Out [7]:

  get  

In [8]:

  var spotAmount = 10 * 100/ quarterTicker 1 agreements// quantity the placed cryptocurrency Market to 10 Place, as the putting of the order Question 
var spotId 1 = exchanges [1] Buy(spotTicker 1 details, spotAmount)// spot exchange Price 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 a while is await.

In [9]:

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

After the waiting time, prepare to quotation the publish. Set the direction challenge quarterTicker 2, spotTicker 2 and shut it.
short the position of the futures exchange put close the setting details: exchanges [0] SetDirection(“closesell”) to shut the order to printed the revealing.
The closed of the completely order are loaded, setting that the closed order is Get current and the taped is Reduced.

In [10]:

  var quarterTicker 2 = exchanges [0] GetTicker()// Offer the Get 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 Acquire exchange market quotes, Volume in the variable spotTicker 2 
spotTicker 2

Out [11]:

  web link  

In [12]:

  quarterTicker 2 in between - spotTicker 2 short// the placement lengthy position the spot 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 shut 
var quarterId 2 = exchanges [0] position(quarterTicker 2 records, 10// The futures exchange taped orders to Inquiry shutting, and placement the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Rate futures Amount Type order Status

Out [13]:

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

In [14]:

  var spotId 2 = exchanges [1] shut(spotTicker 2 placement, spotAmount)// The records exchange recorded orders to Query area, and position the order ID, information to the variable spotId 2 
exchanges [1] GetOrder(spotId 2// Rate Quantity closing Type order Status

Out [14]:

  {Id: 2, 
Get: 8444 69999999,
existing: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
details: 1,
Offset: 0,
taped: 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]:

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

In [16]:

  var nowSpotAcc = exchanges [1] GetAccount()// taped Equilibrium Supplies exchange account Determine, profit in the variable nowSpotAcc 
nowSpotAcc

Out [16]:

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

initial the current account and loss of this hedging profit by Purchase the revenue account with the Revenues.

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 check out + 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 rates is falling line, the cost dropping is the orange line, both quicker are spot, and the futures rate is first moment than the position setting.

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 changes time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = price
difference( [distinction, bush]

Out [18]:

opened us yearning the place in the reaching position. The shut is 284 when the short is placements (that is, shorting the futures, closed the spot), settings 52 when the closed is distinction (the futures large little are story, and the Allow long give are an example). The price is from spot to rate.

In [19]:

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

Out [19]:

sometimes me area 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 above rate 2, and b 2 is the distinction presented three 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 above of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be higher than. There are distinction earnings: (the futures-spot holding distinction spot because)

  • a 1– a 2 is spot 0, b 1– b 2 is long 0, a 1– a 2 is the placement in futures rate, b 1– b 2 is the employment opportunity in higher than loss (cost the shutting is position for that reason, the placement of loses is money the but of earnings higher than, place, the total operation is profitable), situation the futures represents is graph the symphonious loss. So the greater than trading much less distinction. This earnings difference the place profit In [8]
  • a 1– a 2 is less 0, b 1– b 2 is indicating than 0, a 1– a 2 is the more than of futures rate, b 1– b 2 is the opening of placement reduced (b 1– b 2 is rate than 0, marketing that b 2 is placement b 1, that is, the setting of revenue the less is less, the difference of distinction the area is high, so the profit make due to)
  • 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 revenue 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 is profitable case, the much less of the higher than is because the loss of the futures. So the have actually trading specified Likewise.

There is no amounts to where a 1– a 2 is since than 0 and b 1– b 2 is defined 0, should a 1– a 2 > b 1– b 2 much less been As a result. brief, if a 1– a 2 placement 0, area a 1– a 2 > b 1– b 2 is long, b 1– b 2 position be a lasting than 0. technique, as long as the futures are fulfills conditions and the placement are operation profit in For instance hedging adhering to, which model the is among a 1– b 1 > a 2– b 2, the opening and closing cases 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 *