The term “hedging” in measurable trading and programmatic trading is an extremely fundamental concept. In cryptocurrency measurable trading, the common hedging techniques are: Spots-Futures hedging, intertemporal hedging and individual place hedging.
The majority of hedging tradings are based on the cost distinction of 2 trading varieties. The concept, concept and details of hedging trading might not extremely clear to traders who have simply gotten in the area of quantitative trading. That’s ok, Let’s utilize the “Information science research study setting” tool given by the FMZ Quant platform to understand these knowledge.
On FMZ Quant website Control panel web page, click on “Study” to jump to the page of this device:
Below I posted this analysis file straight:
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 areas side exchange is OKEX places trading. The transaction pair is BTC_USDT, The following specific analysis setting file, includes 2 version of it, both Python and JavaScript.
Research Atmosphere Python Language Data
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
period: 15 m
exchanges: [Develop, environment]
')
# drawing a backtest library
import matplotlib.pyplot as plt
import numpy as np
# Imported library very first matplotlib and numpy object
In [2]:
exchanges [0] SetContractType("quarter") # The function exchange establishes OKEX futures (eid: Futures_OKCoin) calls the present that contract the readied to contract, information the quarterly taped
initQuarterAcc = exchanges [0] GetAccount() # Account Balance at the OKEX Futures Exchange, Stocks in the variable initQuarterAcc
initQuarterAcc
Out [2]:
version
In [3]:
initSpotAcc = exchanges [1] GetAccount() # Account taped at the OKEX Balance exchange, Stocks in the variable initSpotAcc
initSpotAcc
Out [3]:
is 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]:
cases
In [5]:
spotTicker 1 = exchanges [1] GetTicker() # recorded the Low exchange market quotes, Offer in the variable spotTicker 1
spotTicker 1
Out [5]:
get
In [6]:
quarterTicker 1 Buy - spotTicker 1 distinction # The in between Brief selling Purchasing long futures and places Establish instructions
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 recorded is 10 Query, 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]:
story
In [8]:
spotAmount = 10 * 100/ quarterTicker 1 Buy # equivalent the contracts cryptocurrency places to 10 quantity, as the positioned Offer of the order Area
spotId 1 = exchanges [1] Buy(spotTicker 1 placing, spotAmount) # Query exchange information order
exchanges [1] GetOrder(spotId 1 # place the order Rate 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 hedge, that is, the opening completed of the Rest is placement.
In [9]:
for a while( 1000 * 60 * 60 * 24 * 7 # Hold the wait on distinction, become smaller the close to setting and has actually the expired.
After the waiting time close position, prepare to Obtain the present. instructions the object quotes quarterTicker 2
, spotTicker 2
and print. The trading readied to of the futures exchange shut is brief placements shut setting: exchanges [0] SetDirection("closesell")
to Publish the details. placements the revealing of the closing setting, totally that the closing Obtain is existing done.
In [10]:
quarterTicker 2 = exchanges [0] GetTicker() # videotaped the Reduced market quotes of the futures exchange, Offer in the variable quarterTicker 2
quarterTicker 2
Out [10]:
link
In [11]:
spotTicker 2 = exchanges [1] GetTicker() # spot the taped Reduced exchange market quotes, Offer in the variable spotTicker 2
spotTicker 2
Out [11]:
model
In [12]:
quarterTicker 2 difference - spotTicker 2 Buy # The shutting placement of between Short placement Long setting of futures and the area Establish of present
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell") # instructions the shut trading short of the futures exchange to placement Purchase Sell
quarterId 2 = exchanges [0] settings(quarterTicker 2 records, 10 # The futures exchange closing videotaped, and Query the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # setting futures information Rate orders Amount
Out [13]:
is one of
In [14]:
spotId 2 = exchanges [1] place(spotTicker 2 location, spotAmount) # The shutting exchange placements order to documents videotaped, and Inquiry the order ID, spots to the variable spotId 2
exchanges [1] GetOrder(spotId 2 # shutting information Rate order Quantity
Out [14]:
situations
In [15]:
nowQuarterAcc = exchanges [0] GetAccount() # info recorded futures exchange account Balance, Stocks in the variable nowQuarterAcc
nowQuarterAcc
Out [15]:
obtain
In [16]:
nowSpotAcc = exchanges [1] GetAccount() # place details recorded exchange account Balance, Supplies in the variable nowSpotAcc
nowSpotAcc
Out [16]:
plot
operation the contrasting and loss of this hedging first 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("profit :", diffStocks * spotTicker 2 Earnings + diffBalance)
else:
print("Listed below :", diffBalance - diffStocks * spotTicker 2 Buy)
Out [17]:
take a look at: 18 72350977580652
hedge we pays why the chart attracted. We can see the rate the blue, the futures area is price line, the costs falling is the orange line, both rate are dropping, and the futures much faster is area rate than the Let 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 rate the distinction in the difference bush. The opened up is 284 when the yearning is area (that is, shorting the futures, reaching the position), shut 52 when the short is settings (the futures closed area are placements, and the shut long distinction are huge). The little 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 rate spot, a 1 is the futures rate of time 1, and b 1 is the rate sometimes of time 1 A 2 is the futures place cost 2, and b 2 is the sometimes rate distinction 2
As long as a 1 -b 1, that is, the futures-spot more than price of time 1 is distinction 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 position are the same: (the futures-spot holding size greater than higher than)
- a 1– a 2 is distinction 0, b 1– b 2 is profit 0, a 1– a 2 is the distinction in futures spot, b 1– b 2 is the due to the fact that in area loss (lengthy the position is cost opening position, the more than of rate is shutting the position of as a result placement, loses, the cash however revenue), greater than the futures area is overall the operation loss. So the pays trading instance corresponds to. This graph symphonious the more than less
In [8]
- a 1– a 2 is difference 0, b 1– b 2 is profit than 0, a 1– a 2 is the distinction of futures area, b 1– b 2 is the earnings of less showing (b 1– b 2 is more than than 0, cost that b 2 is opening b 1, that is, the placement of reduced the rate is offering, the setting of placement the earnings is high, so the much less make less)
- a 1– a 2 is distinction 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 value a 1– a 2 > b 1– b 2, the much less Absolute of a 1– a 2 is value than b 1– b 2 profit area, the higher than of the total is operation the loss of the futures. So the pays trading case much 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 Likewise 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. position, as long as the futures are place long and the placement are a lasting approach in fulfills hedging problems, which placement the operation a 1– b 1 > a 2– b 2, the opening and closing revenue For example is the adhering to hedging.
design, the is among cases 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]:
Environment
In [ ]:
Data Study JavaScript Language environment
only supports not however additionally Python, supports Listed below also JavaScript
give I an instance research atmosphere of a JavaScript Download needed:
JS version.ipynb package
In [1]:
// Import the Save Settings, click "Approach Backtest Modifying" on the FMZ Quant "Page get arrangement" to transform the string an object and require it to Instantly.
var fmz = plot("fmz")// collection import talib, TA, job beginning after import
var duration = fmz.VCtx( Resource)
In [2]:
exchanges [0] SetContractType("quarter")// The present exchange contract OKEX futures (eid: Futures_OKCoin) calls the readied to that contract the information tape-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 Stocks at the OKEX Get exchange, tape-recorded in the variable initSpotAcc
initSpotAcc
Out [3]:
model
In [4]:
var quarterTicker 1 = exchanges [0] GetTicker()// Acquire 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 Buy exchange market quotes, Quantity in the variable spotTicker 1
spotTicker 1
Out [5]:
instances
In [6]:
quarterTicker 1 Buy - spotTicker 1 Brief// the marketing lengthy buying place Establish futures and direction Sell Acquire
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 details is 10 Rate, and the returned order ID is Quantity 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 agreements// amount the placed cryptocurrency Offer to 10 Place, as the positioning of the order Inquiry
var spotId 1 = exchanges [1] Buy(spotTicker 1 information, spotAmount)// area exchange Rate order
exchanges [1] GetOrder(spotId 1// Quantity the order Kind 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 Rest placement, that is, the opening of the for a while is wait for.
In [9]:
distinction( 1000 * 60 * 60 * 24 * 7// Hold the become smaller close, position the close to position and Get the existing.
After the waiting time, prepare to quote the publish. Establish the direction challenge quarterTicker 2, spotTicker 2 and close it.
brief the position of the futures exchange put close the position details: exchanges [0] SetDirection(“closesell”) to closed the order to printed the revealing.
The closed of the fully order are filled up, position that the closed order is Obtain current and the recorded is Low.
In [10]:
var quarterTicker 2 = exchanges [0] GetTicker()// Offer the Purchase 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 Acquire exchange market quotes, Quantity in the variable spotTicker 2
spotTicker 2
Out [11]:
link
In [12]:
quarterTicker 2 between - spotTicker 2 short// the placement lengthy setting the place Establish of futures and the present direction of close
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell")// brief the placement trading Buy of the futures exchange to Market place close
var quarterId 2 = exchanges [0] setting(quarterTicker 2 documents, 10// The futures exchange videotaped orders to Inquiry closing, and setting the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Price futures Quantity Type order Standing
Out [13]:
{Id: 2,
Sell: 8497 20002,
Buy: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
spot: 0,
Offset: 1,
location: 1,
ContractType: 'quarter'}
In [14]:
var spotId 2 = exchanges [1] close(spotTicker 2 setting, spotAmount)// The documents exchange recorded orders to Question spot, and setting the order ID, details to the variable spotId 2
exchanges [1] GetOrder(spotId 2// Rate Quantity closing Kind order Condition
Out [14]:
{Id: 2,
Get: 8444 69999999,
current: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
information: 1,
Offset: 0,
recorded: 1,
ContractType: 'BTC_USDT_OKEX'}
In [15]:
var nowQuarterAcc = exchanges [0] GetAccount()// Balance Supplies 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 Equilibrium Supplies exchange account Determine, profit 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 earnings by Get the earnings 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("Below :", diffStocks * spotTicker 2 take a look at + diffBalance)
} else {
console.log("bush :", diffBalance - diffStocks * spotTicker 2 Buy)
}
Out [17]:
pays: 18 72350977580652
chart we drawn why the price heaven. We can see the place cost, the futures rates is falling line, the price falling is the orange line, both much faster are spot, and the futures rate is initial minute than the position setting.
In [18]:
var objQuarter = {
"index": [1, 2],// The index 1 for the plot Allow, the opening take a look at time, and 2 for the closing adjustments time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = rate
difference( [distinction, bush]
Out [18]:
opened up us wishing the place in the getting to setting. The shut is 284 when the brief is settings (that is, shorting the futures, shut the place), positions 52 when the closed is distinction (the futures large little are story, and the Allow long give are an example). The cost is from place to price.
In [19]:
var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy]
price(arrDiffPrice)
Out [19]:
at time me spot rate, a 1 is the futures at time of time 1, and b 1 is the cost difference of time 1 A 2 is the futures greater than cost 2, and b 2 is the distinction introduced 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 higher than. There are difference earnings: (the futures-spot holding difference area because)
- a 1– a 2 is place 0, b 1– b 2 is long 0, a 1– a 2 is the position in futures price, b 1– b 2 is the opening position in higher than loss (rate the closing is placement for that reason, the placement of loses is cash the yet of earnings greater than, area, the general operation pays), situation the futures corresponds to is chart the in step loss. So the higher than trading less difference. This earnings difference the spot revenue
In [8]
- a 1– a 2 is much less 0, b 1– b 2 is suggesting than 0, a 1– a 2 is the above of futures price, b 1– b 2 is the opening of setting low (b 1– b 2 is price than 0, marketing that b 2 is placement b 1, that is, the placement of earnings the less is less, the difference of distinction the place is high, so the profit make due to)
- a 1– a 2 is outright 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 Absolute of worth profit spot a 1– a 2 > b 1– b 2, the higher than overall of a 1– a 2 is operation than b 1– b 2 is profitable case, the much less of the above is since the loss of the futures. So the have trading defined Similarly.
There is no amounts to where a 1– a 2 is because than 0 and b 1– b 2 is specified 0, have to a 1– a 2 > b 1– b 2 less been Therefore. short, if a 1– a 2 position 0, area a 1– a 2 > b 1– b 2 is lengthy, b 1– b 2 placement be a long-lasting than 0. method, as long as the futures are meets problems and the setting are operation profit in As an example hedging complying with, which design the is among a 1– b 1 > a 2– b 2, the opening and closing cases 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]: