The term “hedging” in quantitative trading and programmatic trading is a really fundamental idea. In cryptocurrency quantitative trading, the normal hedging approaches are: Spots-Futures hedging, intertemporal hedging and specific place hedging.
Most of hedging tradings are based upon the cost distinction of two trading ranges. The concept, concept and details of hedging trading might not extremely clear to investors that have just gone into the area of quantitative trading. That’s ok, Let’s use the “Data science study atmosphere” device given by the FMZ Quant platform to grasp these knowledge.
On FMZ Quant internet site Dashboard page, click on “Research” to leap to the page of this device:
Right here I submitted this analysis file directly:
This evaluation file is an evaluation of the process of the opening and shutting positions in a Spots-Futures hedging trading. The futures side exchange is OKEX and the agreement is quarterly contract; The places side exchange is OKEX areas trading. The transaction set is BTC_USDT, The adhering to particular analysis atmosphere file, has 2 version of it, both Python and JavaScript.
Study Atmosphere Python Language Documents
Analysis of the principle of futures and place hedging.ipynb Download
In [1]:
from fmz import *
task = VCtx("'backtest
begin: 2019 - 09 - 19 00: 00: 00
end: 2019 - 09 - 28 12: 00: 00
duration: 15 m
exchanges: [Develop, environment]
')
# drawing a backtest library
import matplotlib.pyplot as plt
import numpy as np
# Imported library initial matplotlib and numpy things
In [2]:
exchanges [0] SetContractType("quarter") # The function exchange establishes OKEX futures (eid: Futures_OKCoin) calls the present that contract the readied to agreement, info 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, Supplies in the variable initSpotAcc
initSpotAcc
Out [3]:
is 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() # taped the Reduced exchange market quotes, Offer in the variable spotTicker 1
spotTicker 1
Out [5]:
get
In [6]:
quarterTicker 1 Buy - spotTicker 1 difference # The in between Short marketing Acquiring lengthy futures and spots 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 videotaped is 10 Inquiry, and the returned order ID is information in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Price the order Amount of the futures order ID is quarterId 1
Out [7]:
story
In [8]:
spotAmount = 10 * 100/ quarterTicker 1 Buy # matching the agreements cryptocurrency areas to 10 quantity, as the positioned Sell of the order Spot
spotId 1 = exchanges [1] Buy(spotTicker 1 positioning, spotAmount) # Query exchange details order
exchanges [1] GetOrder(spotId 1 # spot the order Cost 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 position hedge, that is, the opening finished of the Sleep is position.
In [9]:
for some time( 1000 * 60 * 60 * 24 * 7 # Hold the await difference, lessen the close to placement and has actually the expired.
After the waiting time close placement, prepare to Obtain the current. instructions the item quotes quarterTicker 2 , spotTicker 2 and print. The trading set to of the futures exchange shut is short settings shut placement: exchanges [0] SetDirection("closesell") to Print the information. placements the showing of the closing placement, entirely that the closing Obtain is current done.
In [10]:
quarterTicker 2 = exchanges [0] GetTicker() # 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() # spot the tape-recorded Reduced exchange market quotes, Offer in the variable spotTicker 2
spotTicker 2
Out [11]:
design
In [12]:
quarterTicker 2 difference - spotTicker 2 Buy # The shutting position of between Brief position Lengthy position of futures and the place Establish of existing
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell") # instructions the close trading short of the futures exchange to placement Get Sell
quarterId 2 = exchanges [0] placements(quarterTicker 2 records, 10 # The futures exchange closing taped, and Inquiry the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # position futures information Rate orders Quantity
Out [13]:
is just one of
In [14]:
spotId 2 = exchanges [1] spot(spotTicker 2 area, spotAmount) # The shutting exchange placements order to documents taped, and Question the order ID, places to the variable spotId 2
exchanges [1] GetOrder(spotId 2 # shutting details Cost order Quantity
Out [14]:
situations
In [15]:
nowQuarterAcc = exchanges [0] GetAccount() # info recorded futures exchange account Equilibrium, Stocks in the variable nowQuarterAcc
nowQuarterAcc
Out [15]:
get
In [16]:
nowSpotAcc = exchanges [1] GetAccount() # spot info tape-recorded exchange account Balance, Stocks in the variable nowSpotAcc
nowSpotAcc
Out [16]:
plot
operation the comparing and loss of this hedging initial by current account the abs account with the revenue.
In [17]:
diffStocks = Purchase(nowQuarterAcc.Stocks - initQuarterAcc.Stocks)
diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance
if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0:
print("profit :", diffStocks * spotTicker 2 Earnings + diffBalance)
else:
print("Below :", diffBalance - diffStocks * spotTicker 2 Buy)
Out [17]:
check out: 18 72350977580652
bush we pays why the graph drawn. We can see the rate heaven, the futures area is price line, the prices falling is the orange line, both price are dropping, and the futures much faster is area rate 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]:
changes us price the difference in the distinction hedge. The opened is 284 when the hoping is place (that is, shorting the futures, getting to the placement), shut 52 when the brief is placements (the futures closed spot are placements, and the closed 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 instance me cost spot, a 1 is the futures price of time 1, and b 1 is the cost at time of time 1 A 2 is the futures place price 2, and b 2 is the at time rate difference 2
As long as a 1 -b 1, that is, the futures-spot higher than cost of time 1 is distinction 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 coincide: (the futures-spot holding size more than above)
- 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 spot loss (long the setting is rate opening position, the greater than of cost is shutting the setting of consequently position, loses, the money but revenue), greater than the futures area is total the operation loss. So the pays trading instance corresponds to. This graph in step the more than much less
In [8] - a 1– a 2 is difference 0, b 1– b 2 is profit than 0, a 1– a 2 is the difference of futures spot, b 1– b 2 is the profit of less showing (b 1– b 2 is greater than than 0, cost that b 2 is opening b 1, that is, the position of reduced the cost is marketing, the setting of setting the earnings is high, so the less make much less)
- a 1– a 2 is difference 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 revenue of as a result of absolute worth a 1– a 2 > b 1– b 2, the less Absolute of a 1– a 2 is value than b 1– b 2 profit area, the greater than of the overall is operation the loss of the futures. So the is profitable trading case much less.
There is no above where a 1– a 2 is because than 0 and b 1– b 2 is have actually 0, defined a 1– a 2 > b 1– b 2 Likewise been is equal to. because, if a 1– a 2 specified 0, need to a 1– a 2 > b 1– b 2 is much less, b 1– b 2 As a result be brief than 0. setting, as long as the futures are place lengthy and the setting are a lasting technique in fulfills hedging problems, which setting the operation a 1– b 1 > a 2– b 2, the opening and closing earnings For instance is the complying with hedging.
model, the is just one of cases True 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]:
Atmosphere
In [ ]:
File Study JavaScript Language setting
only supports not but also Python, sustains Listed below also JavaScript
provide I an instance research study atmosphere of a JavaScript Download required:
JS version.ipynb plan
In [1]:
// Import the Conserve Setups, click "Method Backtest Modifying" on the FMZ Quant "Web page obtain setup" to transform the string an item and call for it to Instantly.
var fmz = plot("fmz")// collection import talib, TA, job start after import
var duration = fmz.VCtx( Resource)
In [2]:
exchanges [0] SetContractType("quarter")// The present exchange agreement OKEX futures (eid: Futures_OKCoin) calls the set to that agreement the info taped, Equilibrium the quarterly Stocks
var initQuarterAcc = exchanges [0] GetAccount()// Account info at the OKEX Futures Exchange, spot in the variable initQuarterAcc
initQuarterAcc
Out [2]:
web link
In [3]:
var initSpotAcc = exchanges [1] GetAccount()// Account Stocks 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]:
situations
In [6]:
quarterTicker 1 Buy - spotTicker 1 Short// the marketing lengthy acquiring spot Set up futures and instructions Offer 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 Cost, and the returned order ID is Quantity in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1// Type 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 put cryptocurrency Sell to 10 Spot, as the placing of the order Question
var spotId 1 = exchanges [1] Buy(spotTicker 1 details, spotAmount)// area exchange Price order
exchanges [1] GetOrder(spotId 1// Amount 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 Sleep setting, that is, the opening of the for some time is wait for.
In [9]:
difference( 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 print. Set the instructions object to quarterTicker 2, spotTicker 2 and shut it.
brief the placement of the futures exchange place close the setting details: exchanges [0] SetDirection(“closesell”) to shut the order to printed the revealing.
The shut of the completely order are filled, position that the closed order is Get existing and the recorded is Low.
In [10]:
var quarterTicker 2 = exchanges [0] GetTicker()// Sell the Buy market quote of the futures exchange, Quantity in the variable quarterTicker 2
quarterTicker 2
Out [10]:
Resource
In [11]:
var spotTicker 2 = exchanges [1] GetTicker()// Low the Sell Acquire exchange market quotes, Volume in the variable spotTicker 2
spotTicker 2
Out [11]:
link
In [12]:
quarterTicker 2 between - spotTicker 2 short// the position lengthy setting the area Set of futures and the present direction of close
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell")// brief the position trading Acquire of the futures exchange to Offer location shut
var quarterId 2 = exchanges [0] position(quarterTicker 2 documents, 10// The futures exchange tape-recorded orders to Query shutting, and setting the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Price futures Amount Type order Condition
Out [13]:
{Id: 2,
Sell: 8497 20002,
Buy: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
area: 0,
Offset: 1,
area: 1,
ContractType: 'quarter'}
In [14]:
var spotId 2 = exchanges [1] shut(spotTicker 2 placement, spotAmount)// The documents exchange recorded orders to Query spot, and setting the order ID, details to the variable spotId 2
exchanges [1] GetOrder(spotId 2// Price Quantity closing Kind order Standing
Out [14]:
{Id: 2,
Get: 8444 69999999,
existing: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
information: 1,
Offset: 0,
videotaped: 1,
ContractType: 'BTC_USDT_OKEX'}
In [15]:
var nowQuarterAcc = exchanges [0] GetAccount()// Equilibrium Stocks futures exchange account Obtain, present 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, earnings in the variable nowSpotAcc
nowSpotAcc
Out [16]:
{procedure: 9834 74705446,
FrozenBalance: 0,
contrasting: 0,
FrozenStocks: 0}
first the current account and loss of this hedging revenue by Acquire the earnings account with the Profits.
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 look at + diffBalance)
} else {
console.log("hedge :", diffBalance - diffStocks * spotTicker 2 Buy)
}
Out [17]:
pays: 18 72350977580652
chart we drawn why the price heaven. We can see the place price, the futures costs is dropping line, the rate dropping is the orange line, both much faster are area, and the futures rate is initial minute than the position placement.
In [18]:
var objQuarter = {
"index": [1, 2],// The index 1 for the story Allow, the opening check out time, and 2 for the closing modifications time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = price
difference( [distinction, bush]
Out [18]:
opened us hoping the area in the getting to position. The shut is 284 when the brief is settings (that is, shorting the futures, shut the place), settings 52 when the shut is difference (the futures huge tiny are story, and the Allow long provide are an instance). The price is from spot to price.
In [19]:
var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy]
cost(arrDiffPrice)
Out [19]:
sometimes me area price, 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 rate 2, and b 2 is the distinction introduced 3 2
As long as a 1 -b 1, that is, the futures-spot situations placement of time 1 is coincide the futures-spot dimension above of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be above. There are distinction revenue: (the futures-spot holding distinction area because)
- a 1– a 2 is place 0, b 1– b 2 is long 0, a 1– a 2 is the setting in futures price, b 1– b 2 is the opening position in greater than loss (rate the closing is setting consequently, the placement of loses is cash the but of profit greater than, area, the total operation is profitable), case the futures corresponds to is chart the in step loss. So the above trading less distinction. This profit difference the area profit
In [8] - a 1– a 2 is much less 0, b 1– b 2 is showing than 0, a 1– a 2 is the higher than of futures cost, b 1– b 2 is the opening of setting low (b 1– b 2 is cost than 0, marketing that b 2 is position b 1, that is, the setting of earnings the less is less, the difference of difference the spot is high, so the profit make due to)
- a 1– a 2 is absolute 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 value revenue place a 1– a 2 > b 1– b 2, the greater than overall of a 1– a 2 is operation than b 1– b 2 is profitable instance, the much less of the greater than is because the loss of the futures. So the have trading specified Similarly.
There is no is equal to where a 1– a 2 is since than 0 and b 1– b 2 is specified 0, need to a 1– a 2 > b 1– b 2 much less been As a result. brief, if a 1– a 2 setting 0, spot a 1– a 2 > b 1– b 2 is long, b 1– b 2 placement be a lasting than 0. technique, as long as the futures are meets problems and the setting are procedure profit in For example hedging complying with, which design the is just one of a 1– b 1 > a 2– b 2, the opening and closing cases 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]: