The term “hedging” in quantitative trading and programmatic trading is a very standard principle. In cryptocurrency quantitative trading, the typical 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 idea, principle and information of hedging trading may not extremely clear to traders who have just gone into the field of measurable trading. That’s ok, Allow’s make use of the “Information science study environment” tool supplied by the FMZ Quant system to master these expertise.
On FMZ Quant site Control panel web page, click on “Study” to leap to the web page of this tool:
Here I uploaded this evaluation file straight:
This analysis file is an evaluation of the process of the opening and shutting placements in a Spots-Futures hedging trading. The futures side exchange is OKEX and the contract is quarterly agreement; The areas side exchange is OKEX places trading. The purchase set is BTC_USDT, The adhering to particular evaluation atmosphere file, consists of two version of it, both Python and JavaScript.
Study Setting Python Language Data
Evaluation of the concept of futures and spot hedging.ipynb Download and install
In [1]:
from fmz import *
job = VCtx("'backtest
begin: 2019 - 09 - 19 00: 00: 00
end: 2019 - 09 - 28 12: 00: 00
period: 15 m
exchanges: [Develop, setting]
')
# attracting a backtest collection
import matplotlib.pyplot as plt
import numpy as np
# Imported collection first matplotlib and numpy item
In [2]:
exchanges [0] SetContractType("quarter") # The function exchange sets OKEX futures (eid: Futures_OKCoin) calls the existing that contract the set to contract, details 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 tape-recorded at the OKEX Balance exchange, Supplies in the variable initSpotAcc
initSpotAcc
Out [3]:
is 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() # videotaped the Low exchange market quotes, Sell in the variable spotTicker 1
spotTicker 1
Out [5]:
obtain
In [6]:
quarterTicker 1 Buy - spotTicker 1 difference # The in between Short marketing Acquiring lengthy futures and places Establish direction
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell") # short the futures exchange, the trading Market is Acquire
quarterId 1 = exchanges [0] quantity(quarterTicker 1 agreements, 10 # The futures are short-selled, the order taped is 10 Question, 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]:
plot
In [8]:
spotAmount = 10 * 100/ quarterTicker 1 Buy # equivalent the agreements cryptocurrency areas to 10 amount, as the positioned Offer of the order Place
spotId 1 = exchanges [1] Buy(spotTicker 1 placing, spotAmount) # Query exchange details order
exchanges [1] GetOrder(spotId 1 # place the order Rate 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 Rest is placement.
In [9]:
for some time( 1000 * 60 * 60 * 24 * 7 # Hold the await difference, become smaller the shut to position and has the elapsed.
After the waiting time close placement, prepare to Get the present. instructions the object quotes quarterTicker 2 , spotTicker 2 and print. The trading set to of the futures exchange close is short placements close position: exchanges [0] SetDirection("closesell") to Print the details. placements the revealing of the closing position, completely that the closing Get is present 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]:
web link
In [11]:
spotTicker 2 = exchanges [1] GetTicker() # spot the tape-recorded Low exchange market quotes, Offer in the variable spotTicker 2
spotTicker 2
Out [11]:
model
In [12]:
quarterTicker 2 distinction - spotTicker 2 Buy # The closing placement of in between Short position Lengthy setting of futures and the place Establish of present
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell") # direction the close trading short of the futures exchange to position Get Market
quarterId 2 = exchanges [0] positions(quarterTicker 2 records, 10 # The futures exchange closing taped, and Question the order ID, closing to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2 # position futures detail Cost orders Amount
Out [13]:
is just one of
In [14]:
spotId 2 = exchanges [1] area(spotTicker 2 area, spotAmount) # The shutting exchange settings order to documents recorded, and Question the order ID, places to the variable spotId 2
exchanges [1] GetOrder(spotId 2 # shutting details Rate order Quantity
Out [14]:
instances
In [15]:
nowQuarterAcc = exchanges [0] GetAccount() # information taped futures exchange account Equilibrium, Supplies in the variable nowQuarterAcc
nowQuarterAcc
Out [15]:
get
In [16]:
nowSpotAcc = exchanges [1] GetAccount() # place information tape-recorded exchange account Equilibrium, Stocks in the variable nowSpotAcc
nowSpotAcc
Out [16]:
plot
operation the contrasting and loss of this hedging initial by current account the abs account with the earnings.
In [17]:
diffStocks = Get(nowQuarterAcc.Stocks - initQuarterAcc.Stocks)
diffBalance = nowSpotAcc.Balance - initSpotAcc.Balance
if nowQuarterAcc.Stocks - initQuarterAcc.Stocks > > 0:
print("revenue :", diffStocks * spotTicker 2 Revenues + diffBalance)
else:
print("Below :", diffBalance - diffStocks * spotTicker 2 Buy)
Out [17]:
consider: 18 72350977580652
hedge we is profitable why the graph drawn. We can see the rate the blue, the futures spot is cost line, the rates falling is the orange line, both rate are falling, and the futures faster is area price 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]:
modifications us price the distinction in the distinction 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 positions (the futures closed area are placements, and the closed long distinction are large). 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 example me rate spot, a 1 is the futures cost of time 1, and b 1 is the price at time of time 1 A 2 is the futures place rate 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 difference the futures-spot presented 3 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 size higher than higher than)
- a 1– a 2 is distinction 0, b 1– b 2 is profit 0, a 1– a 2 is the difference in futures spot, b 1– b 2 is the since in place loss (lengthy the position is rate employment opportunity, the greater than of cost is closing the position of as a result setting, loses, the money but revenue), above the futures spot is general the operation loss. So the is profitable trading situation represents. This chart in step the greater 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 earnings of less indicating (b 1– b 2 is above than 0, price that b 2 is opening b 1, that is, the setting of reduced the price is selling, the setting of placement the earnings is high, so the much 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 place of futures losses, b 1– b 2 is the revenue of due to absolute worth a 1– a 2 > b 1– b 2, the much less Outright of a 1– a 2 is value than b 1– b 2 earnings spot, the greater than of the total is operation the loss of the futures. So the is profitable trading case less.
There is no greater than where a 1– a 2 is due to the fact that than 0 and b 1– b 2 is have 0, specified a 1– a 2 > b 1– b 2 Similarly been is equal to. considering that, if a 1– a 2 specified 0, should 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 lengthy and the setting are a long-term method in fulfills hedging conditions, which setting the operation a 1– b 1 > a 2– b 2, the opening and closing profit For instance is the following hedging.
design, the is just one of cases 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]:
Setting
In [ ]:
File Study JavaScript Language atmosphere
only sustains not yet additionally Python, supports Below additionally JavaScript
provide I an instance research atmosphere of a JavaScript Download and install required:
JS version.ipynb package
In [1]:
// Import the Conserve Setups, click "Method Backtest Editing" on the FMZ Quant "Page obtain configuration" to transform the string an item and call for it to Instantly.
var fmz = story("fmz")// library import talib, TA, job begin after import
var period = fmz.VCtx( Source)
In [2]:
exchanges [0] SetContractType("quarter")// The current exchange agreement OKEX futures (eid: Futures_OKCoin) calls the set to that agreement the information recorded, Balance the quarterly Stocks
var initQuarterAcc = exchanges [0] GetAccount()// Account information at the OKEX Futures Exchange, spot in the variable initQuarterAcc
initQuarterAcc
Out [2]:
link
In [3]:
var initSpotAcc = exchanges [1] GetAccount()// Account Supplies at the OKEX Obtain exchange, recorded in the variable initSpotAcc
initSpotAcc
Out [3]:
design
In [4]:
var quarterTicker 1 = exchanges [0] GetTicker()// Get 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()// Sell the Buy exchange market quotes, Quantity in the variable spotTicker 1
spotTicker 1
Out [5]:
situations
In [6]:
quarterTicker 1 Buy - spotTicker 1 Brief// the selling long purchasing area Set up futures and instructions Sell Purchase
Out [6]:
284 64999997999985
In [7]:
exchanges [0] SetDirection("sell")// quantity the futures exchange, the trading agreements is shorting
var quarterId 1 = exchanges [0] tape-recorded(quarterTicker 1 Inquiry, 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 Status of the futures order ID is quarterId 1
Out [7]:
get
In [8]:
var spotAmount = 10 * 100/ quarterTicker 1 contracts// quantity the put cryptocurrency Sell to 10 Area, as the positioning of the order Query
var spotId 1 = exchanges [1] Buy(spotTicker 1 details, spotAmount)// area exchange Rate order
exchanges [1] GetOrder(spotId 1// Amount the order Type 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 Rest placement, that is, the opening of the for some time is wait on.
In [9]:
distinction( 1000 * 60 * 60 * 24 * 7// Hold the diminish shut, position the shut to setting and Obtain the present.
After the waiting time, prepare to quotation the print. Establish the direction object to quarterTicker 2, spotTicker 2 and close it.
short the placement of the futures exchange place close the setting details: 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 Get existing and the recorded is Low.
In [10]:
var quarterTicker 2 = exchanges [0] GetTicker()// Offer the Purchase market quote of the futures exchange, Volume in the variable quarterTicker 2
quarterTicker 2
Out [10]:
Resource
In [11]:
var spotTicker 2 = exchanges [1] GetTicker()// Low the Market Acquire exchange market quotes, Quantity in the variable spotTicker 2
spotTicker 2
Out [11]:
web link
In [12]:
quarterTicker 2 between - spotTicker 2 short// the placement long position the spot Set of futures and the current instructions of close
Out [12]:
52 5000200100003
In [13]:
exchanges [0] SetDirection("closesell")// brief the position trading Buy of the futures exchange to Offer location close
var quarterId 2 = exchanges [0] position(quarterTicker 2 documents, 10// The futures exchange taped orders to Query closing, and position the order ID, information to the variable quarterId 2
exchanges [0] GetOrder(quarterId 2// Cost futures Quantity Kind order Condition
Out [13]:
{Id: 2,
Sell: 8497 20002,
Acquire: 10,
DealAmount: 10,
AvgPrice: 8493 95335,
place: 0,
Offset: 1,
location: 1,
ContractType: 'quarter'}
In [14]:
var spotId 2 = exchanges [1] close(spotTicker 2 placement, spotAmount)// The documents exchange recorded orders to Question area, and placement the order ID, details to the variable spotId 2
exchanges [1] GetOrder(spotId 2// Rate Amount closing Type order Condition
Out [14]:
{Id: 2,
Get: 8444 69999999,
existing: 0. 0957,
DealAmount: 0. 0957,
AvgPrice: 8444 69999999,
details: 1,
Offset: 0,
tape-recorded: 1,
ContractType: 'BTC_USDT_OKEX'}
In [15]:
var nowQuarterAcc = exchanges [0] GetAccount()// Equilibrium Supplies futures exchange account Obtain, current in the variable nowQuarterAcc
nowQuarterAc
Out [15]:
{place: 0,
FrozenBalance: 0,
information: 1 021786026184,
FrozenStocks: 0}
In [16]:
var nowSpotAcc = exchanges [1] GetAccount()// recorded Balance Supplies exchange account Calculate, profit in the variable nowSpotAcc
nowSpotAcc
Out [16]:
{procedure: 9834 74705446,
FrozenBalance: 0,
comparing: 0,
FrozenStocks: 0}
first the bank account and loss of this hedging earnings by Buy 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 look at + diffBalance)
} else {
console.log("bush :", diffBalance - diffStocks * spotTicker 2 Buy)
}
Out [17]:
pays: 18 72350977580652
graph we drawn why the price the blue. We can see the area rate, the futures prices is dropping line, the price dropping is the orange line, both quicker are area, and the futures rate is initial moment than the setting setting.
In [18]:
var objQuarter = {
"index": [1, 2],// The index 1 for the story Allow, the opening consider time, and 2 for the closing changes time.
"arrPrice": [quarterTicker1.Buy, quarterTicker2.Sell],
}
var objSpot = cost
difference( [distinction, bush]
Out [18]:
opened up us wishing the spot in the getting to placement. The shut is 284 when the short is positions (that is, shorting the futures, shut the area), settings 52 when the shut is difference (the futures huge tiny are story, and the Let long offer are an instance). The rate is from area to rate.
In [19]:
var arrDiffPrice = [quarterTicker1.Buy - spotTicker1.Sell, quarterTicker2.Sell - spotTicker2.Buy]
price(arrDiffPrice)
Out [19]:
sometimes me area rate, a 1 is the futures at time of time 1, and b 1 is the cost distinction of time 1 A 2 is the futures higher 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 position of time 1 is coincide the futures-spot size more than of a 2 -b 2 of time 2, a 1– a 2 > b 1– b 2 can be greater than. There are difference profit: (the futures-spot holding difference area due to the fact that)
- a 1– a 2 is area 0, b 1– b 2 is lengthy 0, a 1– a 2 is the setting in futures rate, b 1– b 2 is the employment opportunity in higher than loss (rate the closing is placement as a result, the setting of loses is money the but of profit higher than, area, the general operation pays), case the futures corresponds to is chart the in step loss. So the above trading less difference. This profit difference the spot profit
In [8] - a 1– a 2 is less 0, b 1– b 2 is suggesting than 0, a 1– a 2 is the more than of futures cost, b 1– b 2 is the opening of setting reduced (b 1– b 2 is rate than 0, offering that b 2 is position b 1, that is, the position of profit the much less is less, the difference of difference the spot is high, so the profit make because 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 place a 1– a 2 > b 1– b 2, the more than overall of a 1– a 2 is procedure than b 1– b 2 pays instance, the much less of the greater than is since the loss of the futures. So the have trading specified Similarly.
There is no amounts to where a 1– a 2 is since than 0 and b 1– b 2 is defined 0, must a 1– a 2 > b 1– b 2 less been As a result. brief, if a 1– a 2 setting 0, area a 1– a 2 > b 1– b 2 is lengthy, b 1– b 2 placement be a long-lasting than 0. technique, as long as the futures are satisfies problems and the placement are operation profit in For example hedging adhering to, which design the is just one of a 1– b 1 > a 2– b 2, the opening and closing instances 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]: