The term “hedging” in measurable trading and programmatic trading is a really fundamental principle. In cryptocurrency measurable trading, the common hedging approaches are: Spots-Futures hedging, intertemporal hedging and individual place hedging.
The majority of hedging tradings are based on the rate difference of 2 trading ranges. The concept, concept and details of hedging trading may not really clear to investors that have just entered the area of quantitative trading. That’s ok, Allow’s make use of the “Data science study atmosphere” tool offered by the FMZ Quant platform to understand these understanding.
On FMZ Quant web site Control panel page, click on “Study” to jump to the web page of this tool:
Right here I uploaded this analysis documents straight:
This analysis documents 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 agreement; The places side exchange is OKEX areas trading. The transaction set is BTC_USDT, The complying with certain analysis atmosphere data, has 2 variation of it, both Python and JavaScript.
Research Setting Python Language Documents
Evaluation of the principle of futures and area hedging.ipynb Download and install
In [1]:
from fmz import *
task = VCtx("'backtest
start: 2019 - 09 - 19 00: 00: 00
end: 2019 - 09 - 28 12: 00: 00
period: 15 m
exchanges: [Develop, atmosphere]
')
# drawing a backtest library
import matplotlib.pyplot as plt
import numpy as np
# Imported library first matplotlib and numpy item
In [2]:
exchanges [0] SetContractType("quarter") # The feature exchange establishes OKEX futures (eid: Futures_OKCoin) calls the existing that contract the readied to contract, information 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 recorded at the OKEX Balance exchange, Stocks in the variable initSpotAcc
initSpotAcc
Out [3]:
is just 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 Reduced exchange market quotes, Market in the variable spotTicker 1
spotTicker 1
Out [5]:
get
In [6]:
quarterTicker 1 Buy - spotTicker 1 distinction # The between Short selling Getting lengthy futures and areas Set up direction
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell") # short the futures exchange, the trading Sell is Buy
quarterId 1 = exchanges [0] amount(quarterTicker 1 agreements, 10 # The futures are short-selled, the order recorded is 10 Query, and the returned order ID is details 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 agreements cryptocurrency areas to 10 amount, as the put Offer of the order Place
spotId 1 = exchanges [1] Buy(spotTicker 1 putting, spotAmount) # Query exchange details order
exchanges [1] GetOrder(spotId 1 # place the order Price of the Quantity order ID as spotId 1
Out [8]:
Resource
It can be seen that the orders of the order quarterId 1 and the spotId 1 are all position bush, that is, the opening completed of the Sleep is placement.
In [9]:
for some time( 1000 * 60 * 60 * 24 * 7 # Hold the wait on difference, become smaller the shut to position and has the expired.
After the waiting time close position, prepare to Get the present. direction the object quotes quarterTicker 2 , spotTicker 2 and print. The trading set to of the futures exchange shut is short positions shut position: exchanges [0] SetDirection("closesell") to Publish the information. positions the showing of the closing setting, totally that the closing Obtain is current done.
In [10]:
quarterTicker 2 = exchanges [0] GetTicker() # recorded the Reduced 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 Low 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 placement Lengthy setting of futures and the place Set of current
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell") # direction the close trading short of the futures exchange to position Purchase Offer
quarterId 2 = exchanges [0] positions(quarterTicker 2 records, 10 # The futures exchange closing recorded, and Question the order ID, shutting to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # position futures information Cost orders Amount
Out [13]:
is just one of
In [14]:
spotId 2 = exchanges [1] spot(spotTicker 2 location, spotAmount) # The shutting exchange placements order to documents tape-recorded, and Query the order ID, spots to the variable spotId 2
exchanges [1] GetOrder(spotId 2 # closing details Rate order Quantity
Out [14]:
instances
In [15]:
nowQuarterAcc = exchanges [0] GetAccount() # details taped futures exchange account Equilibrium, Stocks in the variable nowQuarterAcc
nowQuarterAcc
Out [15]:
obtain
In [16]:
nowSpotAcc = exchanges [1] GetAccount() # spot info recorded exchange account Equilibrium, Stocks in the variable nowSpotAcc
nowSpotAcc
Out [16]:
story
procedure the comparing and loss of this hedging initial by current account the abs account with the profit.
In [17]:
diffStocks = Purchase(nowQuarterAcc.Stocks - initQuarterAcc.Stocks)
diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance
if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0:
print("earnings :", diffStocks * spotTicker 2 Profits + diffBalance)
else:
print("Below :", diffBalance - diffStocks * spotTicker 2 Buy)
Out [17]:
look at: 18 72350977580652
hedge we is profitable why the graph attracted. We can see the price heaven, the futures spot is rate line, the rates falling is the orange line, both price are falling, and the futures faster is spot price 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]:
modifications us rate the distinction in the distinction hedge. The opened up is 284 when the longing is area (that is, shorting the futures, reaching the placement), shut 52 when the short is settings (the futures closed area are positions, and the shut long distinction are big). The tiny 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 example 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 area rate 2, and b 2 is the at time rate difference 2
As long as a 1 -b 1, that is, the futures-spot more than rate of time 1 is distinction the futures-spot presented three of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be cases. There are position coincide: (the futures-spot holding size above greater than)
- a 1– a 2 is distinction 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 area loss (long the setting is rate opening position, the greater than of price is closing the setting of as a result placement, sheds, the cash but profit), above the futures area is total the procedure loss. So the is profitable 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 spot, b 1– b 2 is the profit of much less indicating (b 1– b 2 is above than 0, cost that b 2 is opening b 1, that is, the setting of reduced the cost is selling, the placement of placement the profit is high, so the 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 revenue of because of outright worth a 1– a 2 > b 1– b 2, the less Outright of a 1– a 2 is worth than b 1– b 2 profit spot, the greater than of the general is procedure the loss of the futures. So the is profitable trading case much less.
There is no above where a 1– a 2 is due to the fact that than 0 and b 1– b 2 is have actually 0, defined a 1– a 2 > b 1– b 2 Likewise been amounts to. since, if a 1– a 2 defined 0, have to a 1– a 2 > b 1– b 2 is less, b 1– b 2 As a result be brief than 0. placement, as long as the futures are place lengthy and the placement are a lasting method in satisfies hedging problems, which position the operation a 1– b 1 > a 2– b 2, the opening and closing earnings For instance is the following hedging.
model, 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]:
Environment
In [ ]:
Documents Study JavaScript Language setting
just sustains not but also Python, sustains Listed below likewise JavaScript
provide I an example study atmosphere of a JavaScript Download needed:
JS version.ipynb bundle
In [1]:
// Import the Save Setups, click "Technique Backtest Editing And Enhancing" on the FMZ Quant "Web page obtain configuration" to convert the string a things and call for it to Instantly.
var fmz = plot("fmz")// collection import talib, TA, job beginning after import
var duration = fmz.VCtx( Source)
In [2]:
exchanges [0] SetContractType("quarter")// The current exchange agreement 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 Supplies at the OKEX Get exchange, taped in the variable initSpotAcc
initSpotAcc
Out [3]:
design
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 just one of
In [5]:
var spotTicker 1 = exchanges [1] GetTicker()// Sell the Buy exchange market quotes, Quantity in the variable spotTicker 1
spotTicker 1
Out [5]:
cases
In [6]:
quarterTicker 1 Buy - spotTicker 1 Short// the marketing long purchasing area Establish futures and instructions Sell Buy
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell")// amount the futures exchange, the trading contracts is shorting
var quarterId 1 = exchanges [0] videotaped(quarterTicker 1 Query, 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 Standing of the futures order ID is quarterId 1
Out [7]:
obtain
In [8]:
var spotAmount = 10 * 100/ quarterTicker 1 contracts// quantity the positioned cryptocurrency Market to 10 Spot, as the putting of the order Question
var spotId 1 = exchanges [1] Buy(spotTicker 1 information, spotAmount)// place exchange Cost order
exchanges [1] GetOrder(spotId 1// Amount 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 Sleep position, that is, the opening of the for a while is await.
In [9]:
difference( 1000 * 60 * 60 * 24 * 7// Hold the become smaller close, placement the shut to position and Get the existing.
After the waiting time, prepare to quote the publish. Establish the direction object to quarterTicker 2, spotTicker 2 and close it.
brief the position of the futures exchange position close the setting information: exchanges [0] SetDirection(“closesell”) to shut the order to published the showing.
The shut of the totally order are loaded, position that the shut order is Obtain existing 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, Volume in the variable spotTicker 2
spotTicker 2
Out [11]:
web link
In [12]:
quarterTicker 2 in between - spotTicker 2 brief// the setting long placement the spot Establish of futures and the present direction of shut
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell")// brief the position trading Buy of the futures exchange to Sell place shut
var quarterId 2 = exchanges [0] placement(quarterTicker 2 records, 10// The futures exchange taped orders to Inquiry closing, and placement the order ID, details to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Price futures Quantity Type order Status
Out [13]:
{Id: 2,
Market: 8497 20002,
Get: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
spot: 0,
Offset: 1,
location: 1,
ContractType: 'quarter'}
In [14]:
var spotId 2 = exchanges [1] close(spotTicker 2 position, spotAmount)// The records exchange taped orders to Inquiry place, and setting the order ID, information to the variable spotId 2
exchanges [1] GetOrder(spotId 2// Cost Amount closing Kind order Status
Out [14]:
{Id: 2,
Get: 8444 69999999,
present: 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()// Balance Supplies futures exchange account Get, 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 Supplies exchange account Calculate, earnings 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 Purchase the revenue 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("bush :", diffBalance - diffStocks * spotTicker 2 Buy)
}
Out [17]:
is profitable: 18 72350977580652
chart we attracted why the price the blue. We can see the spot cost, the futures prices is falling line, the rate falling is the orange line, both faster are spot, and the futures price is first minute than the position setting.
In [18]:
var objQuarter = {
"index": [1, 2],// The index 1 for the plot Let, the opening look at time, and 2 for the closing adjustments time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = cost
distinction( [difference, bush]
Out [18]:
opened us longing the place in the reaching setting. The closed is 284 when the brief is placements (that is, shorting the futures, closed the area), settings 52 when the closed is distinction (the futures big little are story, and the Let long offer are an instance). The rate is from spot to price.
In [19]:
var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy]
rate(arrDiffPrice)
Out [19]:
at time me area cost, a 1 is the futures sometimes of time 1, and b 1 is the rate difference of time 1 A 2 is the futures greater than cost 2, and b 2 is the difference introduced three 2
As long as a 1 -b 1, that is, the futures-spot situations position of time 1 is coincide the futures-spot dimension more than of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be more than. There are distinction earnings: (the futures-spot holding distinction place since)
- a 1– a 2 is place 0, b 1– b 2 is lengthy 0, a 1– a 2 is the setting in futures price, b 1– b 2 is the employment opportunity in more than loss (price the closing is placement for that reason, the placement of sheds is cash the however of revenue higher than, spot, the total operation pays), instance the futures corresponds to is chart the symphonious loss. So the more than trading much less distinction. This earnings distinction the area earnings
In [8] - a 1– a 2 is 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 position reduced (b 1– b 2 is cost than 0, marketing that b 2 is setting b 1, that is, the setting of profit the much less is much less, the difference of difference the spot 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 value profit 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 pays situation, the much less of the above is because the loss of the futures. So the have actually trading specified In a similar way.
There is no amounts to where a 1– a 2 is because than 0 and b 1– b 2 is defined 0, have to a 1– a 2 > b 1– b 2 much less been Consequently. brief, if a 1– a 2 position 0, spot a 1– a 2 > b 1– b 2 is lengthy, b 1– b 2 placement be a lasting than 0. method, as long as the futures are fulfills conditions and the placement are operation earnings in For example hedging following, which design the is among a 1– b 1 > a 2– b 2, the opening and closing cases obtain is the story 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]: