The term “hedging” in measurable trading and programmatic trading is an extremely basic idea. In cryptocurrency quantitative trading, the typical hedging approaches are: Spots-Futures hedging, intertemporal hedging and private spot hedging.
A lot of hedging tradings are based on the price distinction of 2 trading ranges. The concept, concept and information of hedging trading might not very clear to traders that have actually just gone into the area of quantitative trading. That’s ok, Allow’s make use of the “Data science research atmosphere” tool supplied by the FMZ Quant platform to grasp these understanding.
On FMZ Quant site Dashboard page, click “Research study” to leap to the page of this device:
Here I published this analysis data straight:
This analysis file is an evaluation of the procedure of the opening and shutting 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 deal pair is BTC_USDT, The complying with certain analysis environment file, has two variation of it, both Python and JavaScript.
Study Environment Python Language File
Analysis of the concept of futures and area hedging.ipynb Download and install
In [1]:
from fmz import *
task = VCtx("'backtest
begin: 2019 - 09 - 19 00: 00: 00
end: 2019 - 09 - 28 12: 00: 00
period: 15 m
exchanges: [Produce, atmosphere]
')
# drawing a backtest collection
import matplotlib.pyplot as plt
import numpy as np
# Imported collection very first matplotlib and numpy things
In [2]:
exchanges [0] SetContractType("quarter") # The feature exchange establishes OKEX futures (eid: Futures_OKCoin) calls the existing that contract the set to contract, details the quarterly tape-recorded
initQuarterAcc = exchanges [0] GetAccount() # Account Equilibrium at the OKEX Futures Exchange, Supplies in the variable initQuarterAcc
initQuarterAcc
Out [2]:
version
In [3]:
initSpotAcc = exchanges [1] GetAccount() # Account tape-recorded at the OKEX Balance exchange, Supplies in the variable initSpotAcc
initSpotAcc
Out [3]:
is just 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() # recorded the Reduced exchange market quotes, Market in the variable spotTicker 1
spotTicker 1
Out [5]:
get
In [6]:
quarterTicker 1 Buy - spotTicker 1 difference # The between Short selling Acquiring long futures and areas 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 taped is 10 Inquiry, and the returned order ID is details in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Cost the order Quantity 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 amount, as the put Market of the order Spot
spotId 1 = exchanges [1] Buy(spotTicker 1 putting, spotAmount) # Question exchange information order
exchanges [1] GetOrder(spotId 1 # place the order Price 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 setting hedge, that is, the opening completed of the Sleep is placement.
In [9]:
for a while( 1000 * 60 * 60 * 24 * 7 # Hold the wait for difference, lessen the close to position and has the elapsed.
After the waiting time shut position, prepare to Obtain the current. direction the object quotes quarterTicker 2
, spotTicker 2
and print. The trading readied to of the futures exchange shut is short placements shut position: exchanges [0] SetDirection("closesell")
to Publish the details. placements the revealing of the closing setting, totally that the closing Get is existing done.
In [10]:
quarterTicker 2 = exchanges [0] GetTicker() # recorded the Low market quotes of the futures exchange, Offer in the variable quarterTicker 2
quarterTicker 2
Out [10]:
web link
In [11]:
spotTicker 2 = exchanges [1] GetTicker() # area the taped Low exchange market quotes, Sell in the variable spotTicker 2
spotTicker 2
Out [11]:
design
In [12]:
quarterTicker 2 difference - spotTicker 2 Buy # The closing setting of in between Short placement Lengthy placement of futures and the spot Establish of present
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell") # direction the shut trading brief of the futures exchange to placement Buy Sell
quarterId 2 = exchanges [0] placements(quarterTicker 2 records, 10 # The futures exchange closing taped, and Query the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # placement futures information Price orders Amount
Out [13]:
is one of
In [14]:
spotId 2 = exchanges [1] place(spotTicker 2 place, spotAmount) # The shutting exchange positions order to documents recorded, and Inquiry the order ID, places to the variable spotId 2
exchanges [1] GetOrder(spotId 2 # closing information Price order Amount
Out [14]:
situations
In [15]:
nowQuarterAcc = exchanges [0] GetAccount() # details tape-recorded futures exchange account Equilibrium, Supplies in the variable nowQuarterAcc
nowQuarterAcc
Out [15]:
obtain
In [16]:
nowSpotAcc = exchanges [1] GetAccount() # area information tape-recorded exchange account Equilibrium, Stocks in the variable nowSpotAcc
nowSpotAcc
Out [16]:
plot
procedure the comparing and loss of this hedging initial by bank account the abs account with the profit.
In [17]:
diffStocks = Acquire(nowQuarterAcc.Stocks - initQuarterAcc.Stocks)
diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance
if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0:
print("revenue :", diffStocks * spotTicker 2 Profits + diffBalance)
else:
print("Listed below :", diffBalance - diffStocks * spotTicker 2 Buy)
Out [17]:
take a look at: 18 72350977580652
hedge we is profitable why the graph drawn. We can see the cost heaven, the futures place is cost line, the prices falling is the orange line, both cost are falling, and the futures faster is area cost than the Allow 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 cost the distinction in the difference hedge. The opened is 284 when the wishing is area (that is, shorting the futures, getting to the position), shut 52 when the short is placements (the futures closed place are settings, and the shut 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 example me price place, a 1 is the futures price of time 1, and b 1 is the price sometimes of time 1 A 2 is the futures area rate 2, and b 2 is the sometimes cost difference 2
As long as a 1 -b 1, that is, the futures-spot above price of time 1 is difference 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 placement coincide: (the futures-spot holding size above more than)
- a 1– a 2 is distinction 0, b 1– b 2 is revenue 0, a 1– a 2 is the difference in futures place, b 1– b 2 is the due to the fact that in place loss (lengthy the position is price opening position, the more than of price is shutting the placement of for that reason position, sheds, the cash but profit), greater than the futures place is overall the operation loss. So the is profitable trading situation corresponds to. This chart symphonious the above much less
In [8]
- a 1– a 2 is distinction 0, b 1– b 2 is earnings than 0, a 1– a 2 is the distinction of futures area, b 1– b 2 is the revenue of less indicating (b 1– b 2 is greater than than 0, price that b 2 is opening up b 1, that is, the setting of low the price is selling, the position of position the revenue is high, so the much less make 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 earnings of as a result of outright value a 1– a 2 > b 1– b 2, the much less Outright of a 1– a 2 is value than b 1– b 2 revenue place, the above of the overall is operation the loss of the futures. So the is profitable trading situation less.
There is no above 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 Similarly 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. setting, as long as the futures are spot lengthy and the position are a lasting method in satisfies hedging conditions, which placement the procedure a 1– b 1 > a 2– b 2, the opening and closing revenue For example is the complying with hedging.
design, the is among situations 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]:
Atmosphere
In [ ]:
Documents Research JavaScript Language setting
just sustains not but also Python, supports Below likewise JavaScript
provide I an instance study setting of a JavaScript Download and install called for:
JS version.ipynb package
In [1]:
// Import the Save Settings, click "Strategy Backtest Editing" on the FMZ Quant "Page obtain arrangement" to convert the string an item and call for it to Immediately.
var fmz = story("fmz")// library import talib, TA, task start after import
var period = fmz.VCtx( Resource)
In [2]:
exchanges [0] SetContractType("quarter")// The present exchange contract OKEX futures (eid: Futures_OKCoin) calls the readied to that agreement the information recorded, 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 Stocks at the OKEX Get exchange, recorded in the variable initSpotAcc
initSpotAcc
Out [3]:
version
In [4]:
var quarterTicker 1 = exchanges [0] GetTicker()// Buy 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 Acquire exchange market quotes, Volume in the variable spotTicker 1
spotTicker 1
Out [5]:
situations
In [6]:
quarterTicker 1 Buy - spotTicker 1 Short// the marketing long buying spot Establish futures and instructions Sell Buy
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 information is 10 Cost, and the returned order ID is Amount 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 contracts// amount the put cryptocurrency Market to 10 Area, as the placing of the order Query
var spotId 1 = exchanges [1] Buy(spotTicker 1 information, spotAmount)// area exchange Cost order
exchanges [1] GetOrder(spotId 1// Quantity the order Kind of the Status 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 some time is await.
In [9]:
distinction( 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 publish. Set the direction object to quarterTicker 2, spotTicker 2 and close it.
brief the position of the futures exchange put close the setting information: exchanges [0] SetDirection(“closesell”) to shut the order to printed the revealing.
The closed of the totally order are filled up, position that the shut order is Obtain current and the taped is Reduced.
In [10]:
var quarterTicker 2 = exchanges [0] GetTicker()// Sell the Acquire 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 Market Purchase exchange market quotes, Quantity in the variable spotTicker 2
spotTicker 2
Out [11]:
web link
In [12]:
quarterTicker 2 between - spotTicker 2 brief// the position long setting the place 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 close
var quarterId 2 = exchanges [0] setting(quarterTicker 2 documents, 10// The futures exchange taped orders to Query shutting, and position the order ID, details to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Cost futures Amount Type order Condition
Out [13]:
{Id: 2,
Market: 8497 20002,
Buy: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
spot: 0,
Offset: 1,
place: 1,
ContractType: 'quarter'}
In [14]:
var spotId 2 = exchanges [1] shut(spotTicker 2 placement, spotAmount)// The records exchange videotaped orders to Inquiry area, and position the order ID, details to the variable spotId 2
exchanges [1] GetOrder(spotId 2// Cost Amount closing Kind order Standing
Out [14]:
{Id: 2,
Obtain: 8444 69999999,
existing: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
details: 1,
Offset: 0,
videotaped: 1,
ContractType: 'BTC_USDT_OKEX'}
In [15]:
var nowQuarterAcc = exchanges [0] GetAccount()// Balance Stocks 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 Balance Stocks exchange account Calculate, revenue in the variable nowSpotAcc
nowSpotAcc
Out [16]:
{operation: 9834 74705446,
FrozenBalance: 0,
comparing: 0,
FrozenStocks: 0}
preliminary the current account and loss of this hedging profit by Acquire the revenue 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("hedge :", diffBalance - diffStocks * spotTicker 2 Buy)
}
Out [17]:
is profitable: 18 72350977580652
graph we attracted why the price the blue. We can see the area cost, the futures costs is dropping line, the rate dropping is the orange line, both quicker are spot, and the futures cost is initial moment than the setting placement.
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 modifications time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = rate
difference( [distinction, bush]
Out [18]:
opened us yearning the spot in the getting to placement. The closed is 284 when the brief is placements (that is, shorting the futures, closed the area), settings 52 when the closed is difference (the futures large tiny are plot, and the Let long offer are an instance). The cost is from place to price.
In [19]:
var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy]
cost(arrDiffPrice)
Out [19]:
sometimes me place rate, a 1 is the futures at time of time 1, and b 1 is the price distinction of time 1 A 2 is the futures more than rate 2, and b 2 is the difference presented three 2
As long as a 1 -b 1, that is, the futures-spot cases placement of time 1 is coincide the futures-spot dimension greater than of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be greater than. There are difference earnings: (the futures-spot holding distinction area due to the fact that)
- a 1– a 2 is spot 0, b 1– b 2 is lengthy 0, a 1– a 2 is the position in futures price, b 1– b 2 is the employment opportunity in more than loss (rate the closing is placement as a result, the position of loses is money the yet of earnings greater than, area, the overall operation pays), situation the futures represents is chart the symphonious loss. So the greater than trading much less difference. This profit difference the area revenue
In [8]
- a 1– a 2 is much less 0, b 1– b 2 is showing than 0, a 1– a 2 is the greater than of futures price, b 1– b 2 is the opening up of setting reduced (b 1– b 2 is rate than 0, offering that b 2 is placement b 1, that is, the position of revenue the less is much less, the difference of distinction the spot is high, so the revenue make as a result of)
- 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 profit spot a 1– a 2 > b 1– b 2, the greater than general of a 1– a 2 is operation than b 1– b 2 pays situation, the much 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 considering that than 0 and b 1– b 2 is specified 0, have to a 1– a 2 > b 1– b 2 less been Consequently. brief, if a 1– a 2 position 0, area 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 fulfills problems and the position are operation revenue in As an example hedging adhering to, which design the is one of a 1– b 1 > a 2– b 2, the opening and closing situations get is the story hedging.
Resource, 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]: