The term “hedging” in quantitative trading and programmatic trading is a really standard concept. In cryptocurrency measurable trading, the normal hedging methods are: Spots-Futures hedging, intertemporal hedging and private area hedging.
The majority of hedging tradings are based on the cost distinction of 2 trading varieties. The principle, concept and information of hedging trading may not really clear to traders who have just gone into the field of measurable trading. That’s ok, Allow’s utilize the “Data science research study atmosphere” device given by the FMZ Quant platform to understand these knowledge.
On FMZ Quant website Dashboard web page, click on “Research” to leap to the web page of this tool:
Here I published this analysis file straight:
This analysis file is an analysis of the process of the opening and closing settings in a Spots-Futures hedging trading. The futures side exchange is OKEX and the contract is quarterly contract; The areas side exchange is OKEX areas trading. The purchase set is BTC_USDT, The following certain analysis setting data, contains two version of it, both Python and JavaScript.
Study Setting Python Language Documents
Analysis of the concept of futures and area 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: [Develop, environment]
')
# attracting a backtest collection
import matplotlib.pyplot as plt
import numpy as np
# Imported collection first matplotlib and numpy things
In [2]:
exchanges [0] SetContractType("quarter") # The function exchange sets OKEX futures (eid: Futures_OKCoin) calls the existing that contract the readied to agreement, info the quarterly videotaped
initQuarterAcc = exchanges [0] GetAccount() # Account Balance at the OKEX Futures Exchange, Stocks in the variable initQuarterAcc
initQuarterAcc
Out [2]:
model
In [3]:
initSpotAcc = exchanges [1] GetAccount() # Account taped at the OKEX Balance 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, Offer in the variable quarterTicker 1
quarterTicker 1
Out [4]:
cases
In [5]:
spotTicker 1 = exchanges [1] GetTicker() # tape-recorded the Low exchange market quotes, Sell in the variable spotTicker 1
spotTicker 1
Out [5]:
get
In [6]:
quarterTicker 1 Buy - spotTicker 1 distinction # The between Brief marketing Acquiring lengthy futures and places Establish direction
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell") # brief the futures exchange, the trading Market is Purchase
quarterId 1 = exchanges [0] quantity(quarterTicker 1 agreements, 10 # The futures are short-selled, the order taped is 10 Query, and the returned order ID is information in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Rate the order Quantity of the futures order ID is quarterId 1
Out [7]:
story
In [8]:
spotAmount = 10 * 100/ quarterTicker 1 Buy # matching the agreements cryptocurrency places to 10 amount, as the put Market of the order Place
spotId 1 = exchanges [1] Buy(spotTicker 1 putting, spotAmount) # Question exchange information 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 setting hedge, that is, the opening completed of the Sleep is placement.
In [9]:
for some time( 1000 * 60 * 60 * 24 * 7 # Hold the wait on distinction, become smaller the close to placement and has the expired.
After the waiting time shut placement, prepare to Obtain the existing. instructions the item quotes quarterTicker 2 , spotTicker 2 and print. The trading readied to of the futures exchange close is brief placements shut setting: exchanges [0] SetDirection("closesell") to Print the details. placements the showing of the closing setting, entirely that the closing Get 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]:
link
In [11]:
spotTicker 2 = exchanges [1] GetTicker() # area the recorded Reduced exchange market quotes, Sell in the variable spotTicker 2
spotTicker 2
Out [11]:
version
In [12]:
quarterTicker 2 difference - spotTicker 2 Buy # The shutting setting of between Short position Long position of futures and the spot Set of present
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell") # direction the shut trading brief of the futures exchange to position Get Market
quarterId 2 = exchanges [0] placements(quarterTicker 2 records, 10 # The futures exchange closing recorded, and Inquiry the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # setting futures information Price orders Amount
Out [13]:
is one of
In [14]:
spotId 2 = exchanges [1] spot(spotTicker 2 place, spotAmount) # The shutting exchange settings order to records videotaped, and Inquiry the order ID, places to the variable spotId 2
exchanges [1] GetOrder(spotId 2 # closing details 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]:
get
In [16]:
nowSpotAcc = exchanges [1] GetAccount() # area information videotaped exchange account Equilibrium, Stocks in the variable nowSpotAcc
nowSpotAcc
Out [16]:
story
operation the comparing and loss of this hedging preliminary by bank account the abdominal muscles account with the earnings.
In [17]:
diffStocks = Get(nowQuarterAcc.Stocks - initQuarterAcc.Stocks)
diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance
if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0:
print("profit :", diffStocks * spotTicker 2 Profits + diffBalance)
else:
print("Listed below :", diffBalance - diffStocks * spotTicker 2 Buy)
Out [17]:
take a look at: 18 72350977580652
hedge we pays why the graph attracted. We can see the rate heaven, the futures place is price line, the costs dropping is the orange line, both rate are falling, and the futures faster is spot cost 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]:
adjustments us cost the difference in the distinction bush. The opened up is 284 when the hoping is area (that is, shorting the futures, reaching the setting), closed 52 when the brief is settings (the futures closed spot are settings, and the closed long distinction are big). The little is from Allow to provide.
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 rate place, a 1 is the futures price 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 at time rate distinction 2
As long as a 1 -b 1, that is, the futures-spot greater 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 situations. There are setting coincide: (the futures-spot holding dimension 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 because in area loss (lengthy the position is cost employment opportunity, the greater than of cost is closing the position of as a result setting, loses, the money but profit), higher than the futures spot is total the operation loss. So the is profitable 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 earnings than 0, a 1– a 2 is the distinction of futures place, b 1– b 2 is the earnings of much less showing (b 1– b 2 is above than 0, rate that b 2 is opening up b 1, that is, the placement of low the price is selling, the position of setting the earnings is high, so the much less make much less)
- a 1– a 2 is distinction 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 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 profit spot, the greater than of the total is procedure the loss of the futures. So the pays trading instance less.
There is no greater than where a 1– a 2 is since than 0 and b 1– b 2 is have actually 0, specified a 1– a 2 > b 1– b 2 In a similar way been amounts to. given that, if a 1– a 2 specified 0, have to a 1– a 2 > b 1– b 2 is much less, b 1– b 2 Therefore be short than 0. setting, as long as the futures are area long and the placement are a long-term method in meets hedging problems, which position the procedure a 1– b 1 > a 2– b 2, the opening and closing revenue As an example is the adhering to hedging.
model, the is one of situations 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]:
Environment
In [ ]:
Documents Research study JavaScript Language environment
only supports not however likewise Python, sustains Below likewise JavaScript
offer I an example research study setting of a JavaScript Download needed:
JS version.ipynb bundle
In [1]:
// Import the Conserve Setups, click "Method Backtest Editing" on the FMZ Quant "Page obtain configuration" to transform the string an object and call for it to Instantly.
var fmz = story("fmz")// collection import talib, TA, job begin after import
var period = fmz.VCtx( Source)
In [2]:
exchanges [0] SetContractType("quarter")// The present exchange agreement OKEX futures (eid: Futures_OKCoin) calls the set to that agreement the information videotaped, Equilibrium the quarterly Supplies
var initQuarterAcc = exchanges [0] GetAccount()// Account information at the OKEX Futures Exchange, area in the variable initQuarterAcc
initQuarterAcc
Out [2]:
web link
In [3]:
var initSpotAcc = exchanges [1] GetAccount()// Account Supplies at the OKEX Get exchange, recorded 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 lengthy purchasing place Set up futures and direction Sell Buy
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell")// quantity 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 information is 10 Price, 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 contracts// amount the positioned cryptocurrency Sell to 10 Spot, as the positioning of the order Inquiry
var spotId 1 = exchanges [1] Buy(spotTicker 1 details, spotAmount)// spot exchange Price order
exchanges [1] GetOrder(spotId 1// Quantity the order Kind of the Condition 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 position, that is, the opening of the for a while is wait for.
In [9]:
difference( 1000 * 60 * 60 * 24 * 7// Hold the lessen shut, placement the shut to placement and Get the current.
After the waiting time, prepare to quote the print. Set the direction object to quarterTicker 2, spotTicker 2 and close it.
brief the setting of the futures exchange position close the setting information: exchanges [0] SetDirection(“closesell”) to shut the order to published the revealing.
The closed of the completely order are loaded, placement that the shut order is Obtain current and the recorded is Low.
In [10]:
var quarterTicker 2 = exchanges [0] GetTicker()// Offer the Buy 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 Sell Purchase exchange market quotes, Quantity in the variable spotTicker 2
spotTicker 2
Out [11]:
web link
In [12]:
quarterTicker 2 in between - spotTicker 2 brief// the position lengthy setting the spot Set of futures and the existing instructions of close
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell")// brief the position trading Acquire of the futures exchange to Sell place close
var quarterId 2 = exchanges [0] placement(quarterTicker 2 documents, 10// The futures exchange recorded orders to Inquiry closing, and position 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,
Acquire: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
area: 0,
Offset: 1,
location: 1,
ContractType: 'quarter'}
In [14]:
var spotId 2 = exchanges [1] close(spotTicker 2 placement, spotAmount)// The records exchange tape-recorded orders to Question place, and placement 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,
present: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
info: 1,
Offset: 0,
recorded: 1,
ContractType: 'BTC_USDT_OKEX'}
In [15]:
var nowQuarterAcc = exchanges [0] GetAccount()// Equilibrium Stocks futures exchange account Get, present in the variable nowQuarterAcc
nowQuarterAc
Out [15]:
{spot: 0,
FrozenBalance: 0,
info: 1 021786026184,
FrozenStocks: 0}
In [16]:
var nowSpotAcc = exchanges [1] GetAccount()// videotaped Balance Stocks exchange account Calculate, earnings in the variable nowSpotAcc
nowSpotAcc
Out [16]:
{procedure: 9834 74705446,
FrozenBalance: 0,
comparing: 0,
FrozenStocks: 0}
preliminary the bank account and loss of this hedging earnings by Purchase 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("Below :", diffStocks * spotTicker 2 check out + 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 cost, the futures prices is falling line, the rate dropping is the orange line, both faster are area, and the futures rate is very first moment than the placement setting.
In [18]:
var objQuarter = {
"index": [1, 2],// The index 1 for the story Let, the opening look at time, and 2 for the closing changes time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = rate
distinction( [distinction, hedge]
Out [18]:
opened us wishing the place in the getting to setting. The shut is 284 when the short is positions (that is, shorting the futures, shut the spot), settings 52 when the shut is difference (the futures big small are plot, and the Allow long offer are an example). The rate is from spot to rate.
In [19]:
var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy]
price(arrDiffPrice)
Out [19]:
sometimes me spot rate, a 1 is the futures sometimes of time 1, and b 1 is the cost difference of time 1 A 2 is the futures more than price 2, and b 2 is the difference 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 dimension above of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be above. There are distinction earnings: (the futures-spot holding distinction place since)
- a 1– a 2 is spot 0, b 1– b 2 is lengthy 0, a 1– a 2 is the position in futures rate, b 1– b 2 is the opening position in greater than loss (cost the shutting is position consequently, the position of sheds is money the but of revenue more than, place, the total procedure pays), situation the futures represents is graph the symphonious loss. So the greater than trading much less difference. This revenue distinction the place revenue
In [8] - a 1– a 2 is much less 0, b 1– b 2 is indicating than 0, a 1– a 2 is the above of futures cost, b 1– b 2 is the opening of position low (b 1– b 2 is price than 0, offering that b 2 is setting b 1, that is, the position of profit the much less is much less, the distinction of distinction the spot 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 worth earnings area a 1– a 2 > b 1– b 2, the above total of a 1– a 2 is operation than b 1– b 2 pays case, the less of the greater than is since the loss of the futures. So the have trading specified Similarly.
There is no is equal to where a 1– a 2 is because than 0 and b 1– b 2 is specified 0, should a 1– a 2 > b 1– b 2 less been Therefore. short, if a 1– a 2 setting 0, place a 1– a 2 > b 1– b 2 is long, b 1– b 2 position be a lasting than 0. method, as long as the futures are satisfies problems and the setting are procedure earnings in For example hedging adhering to, which version the is among a 1– b 1 > a 2– b 2, the opening and closing instances obtain 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]: