The term “hedging” in measurable trading and programmatic trading is a very fundamental principle. In cryptocurrency measurable trading, the normal hedging methods are: Spots-Futures hedging, intertemporal hedging and private area hedging.
A lot of hedging tradings are based on the price difference of 2 trading selections. The concept, concept and information of hedging trading might not really clear to traders who have actually just gone into the field of quantitative trading. That’s ok, Let’s use the “Information science study environment” device supplied by the FMZ Quant system to understand these understanding.
On FMZ Quant website Dashboard page, click on “Research study” to leap to the page of this tool:
Below I submitted this analysis data directly:
This evaluation documents is an evaluation of the procedure of the opening and closing placements in a Spots-Futures hedging trading. The futures side exchange is OKEX and the agreement is quarterly agreement; The areas side exchange is OKEX areas trading. The transaction set is BTC_USDT, The complying with certain evaluation atmosphere documents, contains 2 version of it, both Python and JavaScript.
Research Environment Python Language Data
Analysis of the principle of futures and area 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, setting]
')
# drawing a backtest library
import matplotlib.pyplot as plt
import numpy as np
# Imported library very first matplotlib and numpy item
In [2]:
exchanges [0] SetContractType("quarter") # The feature exchange establishes OKEX futures (eid: Futures_OKCoin) calls the present that contract the readied to agreement, details the quarterly videotaped
initQuarterAcc = exchanges [0] GetAccount() # Account Balance at the OKEX Futures Exchange, Supplies in the variable initQuarterAcc
initQuarterAcc
Out [2]:
design
In [3]:
initSpotAcc = exchanges [1] GetAccount() # Account taped at the OKEX Equilibrium exchange, Stocks in the variable initSpotAcc
initSpotAcc
Out [3]:
is just one of
In [4]:
quarterTicker 1 = exchanges [0] GetTicker() # Low the futures exchange market quotes, Sell in the variable quarterTicker 1
quarterTicker 1
Out [4]:
cases
In [5]:
spotTicker 1 = exchanges [1] GetTicker() # taped the Low exchange market quotes, Sell in the variable spotTicker 1
spotTicker 1
Out [5]:
obtain
In [6]:
quarterTicker 1 Buy - spotTicker 1 distinction # The in between Short marketing Buying long futures and spots Establish direction
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell") # short the futures exchange, the trading Market is Purchase
quarterId 1 = exchanges [0] quantity(quarterTicker 1 contracts, 10 # The futures are short-selled, the order tape-recorded is 10 Inquiry, and the returned order ID is information in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1 # Price the order Quantity of the futures order ID is quarterId 1
Out [7]:
plot
In [8]:
spotAmount = 10 * 100/ quarterTicker 1 Buy # equivalent the contracts cryptocurrency places to 10 quantity, as the placed Offer of the order Area
spotId 1 = exchanges [1] Buy(spotTicker 1 positioning, spotAmount) # Inquiry exchange details order
exchanges [1] GetOrder(spotId 1 # spot the order Price 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 bush, that is, the opening completed of the Rest is position.
In [9]:
for some time( 1000 * 60 * 60 * 24 * 7 # Hold the await distinction, diminish the shut to position and has actually the expired.
After the waiting time shut position, prepare to Get the current. direction the item quotes quarterTicker 2
, spotTicker 2
and print. The trading set to of the futures exchange close is short placements shut position: exchanges [0] SetDirection("closesell")
to Print the details. positions the showing of the closing setting, entirely that the closing Obtain is existing done.
In [10]:
quarterTicker 2 = exchanges [0] GetTicker() # videotaped the Reduced market quotes of the futures exchange, Market in the variable quarterTicker 2
quarterTicker 2
Out [10]:
link
In [11]:
spotTicker 2 = exchanges [1] GetTicker() # place the tape-recorded Low exchange market quotes, Sell in the variable spotTicker 2
spotTicker 2
Out [11]:
version
In [12]:
quarterTicker 2 distinction - spotTicker 2 Buy # The shutting position of in between Brief position Lengthy setting of futures and the place Establish of existing
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell") # direction the shut trading brief of the futures exchange to position Buy Offer
quarterId 2 = exchanges [0] positions(quarterTicker 2 documents, 10 # The futures exchange closing recorded, and Inquiry the order ID, closing to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # placement futures detail Cost orders Quantity
Out [13]:
is one of
In [14]:
spotId 2 = exchanges [1] area(spotTicker 2 area, spotAmount) # The closing exchange placements order to records videotaped, and Query the order ID, spots to the variable spotId 2
exchanges [1] GetOrder(spotId 2 # shutting details Cost order Quantity
Out [14]:
cases
In [15]:
nowQuarterAcc = exchanges [0] GetAccount() # info taped futures exchange account Equilibrium, Supplies in the variable nowQuarterAcc
nowQuarterAcc
Out [15]:
get
In [16]:
nowSpotAcc = exchanges [1] GetAccount() # spot information taped exchange account Balance, Stocks in the variable nowSpotAcc
nowSpotAcc
Out [16]:
story
operation the contrasting and loss of this hedging preliminary by current account the abs account with the earnings.
In [17]:
diffStocks = Acquire(nowQuarterAcc.Stocks - initQuarterAcc.Stocks)
diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance
if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0:
print("earnings :", diffStocks * spotTicker 2 Revenues + diffBalance)
else:
print("Listed below :", diffBalance - diffStocks * spotTicker 2 Buy)
Out [17]:
consider: 18 72350977580652
hedge we is profitable why the graph attracted. We can see the price the blue, the futures area is price line, the prices falling is the orange line, both price are dropping, and the futures much faster is place rate than the Let consider.
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 cost the difference in the distinction bush. The opened is 284 when the wishing is spot (that is, shorting the futures, reaching the position), closed 52 when the brief is positions (the futures shut spot are placements, and the closed long distinction are big). The small 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 example me cost spot, a 1 is the futures price of time 1, and b 1 is the price at time of time 1 A 2 is the futures spot price 2, and b 2 is the sometimes cost distinction 2
As long as a 1 -b 1, that is, the futures-spot above price 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 position coincide: (the futures-spot holding size higher than above)
- a 1– a 2 is distinction 0, b 1– b 2 is earnings 0, a 1– a 2 is the distinction in futures spot, b 1– b 2 is the because in place loss (lengthy the setting is price employment opportunity, the higher than of price is shutting the placement of as a result position, loses, the money yet earnings), higher than the futures place is overall the procedure loss. So the is profitable trading situation corresponds to. This graph in step the greater 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 difference of futures spot, b 1– b 2 is the earnings of much less indicating (b 1– b 2 is above than 0, rate that b 2 is opening up b 1, that is, the setting of reduced the cost is marketing, the position of position the earnings is high, so the less make less)
- a 1– a 2 is difference than 0, b 1– b 2 is difference than 0, a 1– a 2 is the area of futures losses, b 1– b 2 is the profit of due to outright value a 1– a 2 > b 1– b 2, the much less Absolute of a 1– a 2 is worth than b 1– b 2 revenue area, the above of the total is procedure the loss of the futures. So the pays trading situation less.
There is no greater than where a 1– a 2 is since than 0 and b 1– b 2 is have actually 0, defined a 1– a 2 > b 1– b 2 In a similar way been amounts to. because, if a 1– a 2 specified 0, must a 1– a 2 > b 1– b 2 is less, b 1– b 2 Consequently be short than 0. position, as long as the futures are area long and the position are a long-term technique in fulfills hedging conditions, which placement the operation a 1– b 1 > a 2– b 2, the opening and closing revenue For example is the following hedging.
model, the is among cases Real the Research 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 [ ]:
File Research JavaScript Language atmosphere
only sustains not yet also Python, supports Below also JavaScript
offer I an example research setting of a JavaScript Download and install required:
JS version.ipynb package
In [1]:
// Import the Save Settings, click "Method Backtest Editing And Enhancing" on the FMZ Quant "Web page obtain setup" to convert the string a things and need it to Instantly.
var fmz = plot("fmz")// library import talib, TA, job begin after import
var period = fmz.VCtx( Source)
In [2]:
exchanges [0] SetContractType("quarter")// The present exchange contract OKEX futures (eid: Futures_OKCoin) calls the set to that agreement the information taped, Equilibrium the quarterly Stocks
var initQuarterAcc = exchanges [0] GetAccount()// Account details at the OKEX Futures Exchange, area in the variable initQuarterAcc
initQuarterAcc
Out [2]:
link
In [3]:
var initSpotAcc = exchanges [1] GetAccount()// Account Stocks at the OKEX Get exchange, recorded in the variable initSpotAcc
initSpotAcc
Out [3]:
design
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 Buy exchange market quotes, Volume in the variable spotTicker 1
spotTicker 1
Out [5]:
cases
In [6]:
quarterTicker 1 Buy - spotTicker 1 Brief// the selling lengthy buying spot Establish futures and instructions Sell Acquire
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 Cost, and the returned order ID is Quantity in the variable quarterId 1
exchanges [0] GetOrder(quarterId 1// Kind the order Condition of the futures order ID is quarterId 1
Out [7]:
obtain
In [8]:
var spotAmount = 10 * 100/ quarterTicker 1 agreements// amount the positioned cryptocurrency Market to 10 Area, as the placing of the order Inquiry
var spotId 1 = exchanges [1] Buy(spotTicker 1 details, spotAmount)// place 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 Sleep setting, that is, the opening of the for some time is await.
In [9]:
distinction( 1000 * 60 * 60 * 24 * 7// Hold the diminish close, setting the shut to placement and Get the existing.
After the waiting time, prepare to quote the publish. Set the instructions challenge quarterTicker 2, spotTicker 2 and close it.
brief the position of the futures exchange put shut the setting information: exchanges [0] SetDirection(“closesell”) to closed the order to printed the revealing.
The shut of the completely order are loaded, position that the closed order is Get current and the taped is Low.
In [10]:
var quarterTicker 2 = exchanges [0] GetTicker()// Sell the Purchase market quote of the futures exchange, Volume in the variable quarterTicker 2
quarterTicker 2
Out [10]:
Source
In [11]:
var spotTicker 2 = exchanges [1] GetTicker()// Low the Market Buy exchange market quotes, Quantity in the variable spotTicker 2
spotTicker 2
Out [11]:
web link
In [12]:
quarterTicker 2 between - spotTicker 2 short// the position long setting the spot Set of futures and the existing instructions of close
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell")// short the position trading Get of the futures exchange to Offer location close
var quarterId 2 = exchanges [0] setting(quarterTicker 2 documents, 10// The futures exchange videotaped orders to Inquiry shutting, and setting the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Rate futures Quantity Kind order Status
Out [13]:
{Id: 2,
Offer: 8497 20002,
Acquire: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
place: 0,
Offset: 1,
place: 1,
ContractType: 'quarter'}
In [14]:
var spotId 2 = exchanges [1] shut(spotTicker 2 placement, spotAmount)// The documents exchange tape-recorded orders to Inquiry area, and placement the order ID, information to the variable spotId 2
exchanges [1] GetOrder(spotId 2// Price Quantity closing Kind order Standing
Out [14]:
{Id: 2,
Get: 8444 69999999,
present: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
information: 1,
Offset: 0,
tape-recorded: 1,
ContractType: 'BTC_USDT_OKEX'}
In [15]:
var nowQuarterAcc = exchanges [0] GetAccount()// Balance Stocks futures exchange account Obtain, present in the variable nowQuarterAcc
nowQuarterAc
Out [15]:
{spot: 0,
FrozenBalance: 0,
info: 1 021786026184,
FrozenStocks: 0}
In [16]:
var nowSpotAcc = exchanges [1] GetAccount()// recorded Equilibrium Supplies exchange account Calculate, profit in the variable nowSpotAcc
nowSpotAcc
Out [16]:
{procedure: 9834 74705446,
FrozenBalance: 0,
contrasting: 0,
FrozenStocks: 0}
preliminary the bank account and loss of this hedging profit by Acquire 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("Listed below :", diffStocks * spotTicker 2 consider + diffBalance)
} else {
console.log("bush :", diffBalance - diffStocks * spotTicker 2 Buy)
}
Out [17]:
pays: 18 72350977580652
graph we attracted why the cost heaven. We can see the spot price, the futures costs is dropping line, the cost falling is the orange line, both faster are area, and the futures price is first moment than the position position.
In [18]:
var objQuarter = {
"index": [1, 2],// The index 1 for the story Allow, the opening look at time, and 2 for the closing modifications time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = cost
distinction( [distinction, hedge]
Out [18]:
opened up us wishing the place in the getting to setting. The closed is 284 when the short is placements (that is, shorting the futures, closed the place), positions 52 when the shut is distinction (the futures large tiny are plot, and the Let long give are an example). The cost is from spot to price.
In [19]:
var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy]
price(arrDiffPrice)
Out [19]:
at time me area price, 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 above price 2, and b 2 is the difference introduced 3 2
As long as a 1 -b 1, that is, the futures-spot instances position 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 distinction earnings: (the futures-spot holding difference place because)
- a 1– a 2 is area 0, b 1– b 2 is long 0, a 1– a 2 is the position in futures rate, b 1– b 2 is the opening position in greater than loss (price the shutting is placement therefore, the setting of sheds is cash the but of revenue more than, spot, the overall operation is profitable), case the futures represents is graph the symphonious loss. So the higher than trading less distinction. This earnings distinction the area earnings
In [8]
- a 1– a 2 is much less 0, b 1– b 2 is indicating than 0, a 1– a 2 is the more than of futures price, b 1– b 2 is the opening of setting low (b 1– b 2 is rate than 0, selling that b 2 is placement b 1, that is, the position of profit the less is much less, the distinction of difference the place is high, so the profit 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 much less of futures losses, b 1– b 2 is the Absolute of worth earnings area a 1– a 2 > b 1– b 2, the above overall of a 1– a 2 is operation than b 1– b 2 pays situation, the much less of the higher than is due to the fact that the loss of the futures. So the have actually trading defined In a similar way.
There is no is equal to where a 1– a 2 is given that than 0 and b 1– b 2 is specified 0, should a 1– a 2 > b 1– b 2 much less been As a result. brief, if a 1– a 2 position 0, spot a 1– a 2 > b 1– b 2 is long, b 1– b 2 setting be a lasting than 0. technique, as long as the futures are fulfills problems and the placement are operation earnings in For example hedging adhering to, which model the is among a 1– b 1 > a 2– b 2, the opening and closing situations obtain 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]: