Beberapa orang mungkin tidak biasa dengan perkataan
Dalam pasaran niaga hadapan komoditi, secara teori, harga kontrak Apple yang disampaikan pada bulan Mei dikurangkan daripada harga kontrak Apple yang disampaikan pada bulan Oktober, hasilnya harus hampir 0 atau stabil dalam julat harga tertentu. Tetapi sebenarnya, disebabkan oleh cuaca, penawaran dan permintaan pasaran dan faktor lain, harga kontrak jangka pendek dan jangka panjang akan dipengaruhi dalam tahap yang berbeza dalam tempoh masa, dan perbezaan harga juga akan turun naik dengan ketara.
Tetapi dalam apa jua kes, perbezaan harga akhirnya akan kembali ke julat harga tertentu, maka jika perbezaan harga lebih besar daripada julat ini, jual pendek kontrak Mei, dan beli panjang kontrak Oktober pada masa yang sama, pendek perbezaan untuk membuat keuntungan; jika perbezaan harga adalah kurang daripada julat ini, beli panjang kontrak Mei, pada masa yang sama menjual kontrak Oktober pendek, membuat keuntungan membeli panjang penyebaran. Ini adalah arbitraj intertemporal melalui membeli dan menjual pelbagai yang sama tetapi bulan penghantaran yang berbeza.
Selain arbitraj intertemporal, terdapat arbitraj rentas pasaran seperti membeli soya dari negara pengeksport sambil menjual soya dari negara pengimport, atau menjual soya dari negara pengeksport dan mengimport soya dari negara pengimport; membeli bahan mentah hulu, bijih besi, dan menjual benang siap hulu Baja, atau menjual bijih besi bahan mentah hulu sambil membeli arbitraj rebar siap hulu, dan lain-lain.
Walaupun kaedah arbitraj di atas secara harfiah adalah
Prinsip teras arbitraj
Ciri terbesar arbitraj
Dengan kata lain, pautan yang paling rumit adalah perdagangan spot komoditi, yang melibatkan satu siri isu seperti resit gudang, cukai dan sebagainya. Pertama sekali, syarikat yang berkaitan dengan skop pelaburan diperlukan. Jika ia adalah akaun niaga hadapan arbitraj penghantaran kontrak, ia mestilah orang perundangan korporat. Jika arbitraj kedudukan tertutup berganda diperlukan, saluran jualan yang boleh dipercayai diperlukan. Terdapat banyak laman web perdagangan spot dalam talian.
Perlu diperhatikan bahawa transaksi spot biasanya mempunyai cukai nilai tambah sebanyak 17% hingga 20%, jadi jika ia adalah arbitraj kedudukan tertutup berganda, anda perlu short niaga hadapan 1.2 hingga 1.25 kali selepas membeli spot. Dalam kes arbitraj penghantaran kontrak, anda perlu short proporsi yang sama niaga hadapan selepas membeli spot, dan anda juga perlu mempertimbangkan kos yuran transaksi, pengangkutan, dan gudang.
Di samping itu, kerana adanya emas (T + D) di Bursa Emas Shanghai, arbitraj semasa dalam tempoh emas tidak hanya boleh menjadi arbitraj positif, tetapi juga operasi arbitraj terbalik tanpa sewa emas. Perdagangan ditangguhkan emas spot (T + D) di Bursa Emas Shanghai bukan sahaja mudah untuk berdagang, tetapi juga mempunyai jumlah transaksi dan kedudukan yang besar, dan kecairan sangat sesuai untuk
Terdapat banyak jenis data spot dan spread dalam talian, yang kebanyakannya dibentangkan dalam bentuk jadual, yang jelas tidak sesuai untuk menganalisis dan menilai pasaran.FMZ.COMHanya perlu memanggil fungsi untuk mendapatkan harga spot dan penyebaran setiap jenis, dan menyokong data sejarah dari 2016 hingga kini.
# Backtest configuration
'''backtest
start: 2020-06-01 00:00:00
end: 2020-06-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''
# Strategy entry
def main():
while True:
ret = exchange.GetData("GDP") # Calling GDP data
Log(ret) # Print data
Sleep(1000 * 60 * 60 * 24 * 30)
Hasil pulangan
{
"Quarterly": "Q1 2006",
"GDP": {
"Absolute Value (100 million yuan)": 47078.9,
"YoY Growth": 0.125
},
"primary industry": {
"Absolute Value (100 million yuan)": 3012.7,
"YoY Growth": 0.044
},
"Tertiary Industry": {
"Absolute Value (100 million yuan)": 22647.4,
"YoY Growth": 0.131
},
"Secondary industry": {
"Absolute Value (100 million yuan)": 21418.7,
"YoY Growth": 0.131
}
}
Mari kita gunakan platform FMZ untuk mengukur dan merealisasikan harga spot dan harga spread dalam bentuk carta.FMZ.COM), klik
# Strategy main function
def onTick():
pass
# Strategy entrance
def main():
while True: # Enter loop mode
onTick() # execution strategy main function
Sleep(1000 * 60 * 60 * 24) # Strategy sleep for one day
Rangka strategi mempunyai dua fungsi, iaitumain
fungsi adalah pintu masuk kepada strategi,main
fungsi adalah pra-pemprosesan sebelum perdagangan, program ini akan bermula darimain
fungsi, dan kemudian masukkan mod gelung tanpa akhir, berulang kali menjalankanonTick
fungsi,onTick
fungsi adalah fungsi utama strategi, terutamanya melaksanakan kod teras.
# Global variables
# Futures and Spots chart
cfgA = {
"extension": {
"layout":'single',
"col": 6,
"height": "500px",
},
"title": {
"text": "futures and spots chart"
},
"xAxis": {
"type": "datetime"
},
"series": [{
"name": "Futures Price",
"data": [],
}, {
"name": "Spot Price",
"data": [],
}
]
}
# Spread chart
cfgB = {
"extension": {
"layout":'single',
"col": 6,
"height": "500px",
},
"title": {
"text": "Spread chart"
},
"xAxis": {
"type": "datetime"
},
"series": [{
"name": "Spread Price",
"data": [],
}]
}
chart = Chart([cfgA, cfgB]) # Create a chart object
# Strategy main function
def onTick():
chart.add(0, []) # draw chart
chart.add(1, []) # draw chart
chart.add(2, []) # draw chart
chart.update([cfgA, cfgB]) # update chart
# Strategy entrance
def main():
LogReset() # Clear the previous log information before running
chart.reset() # Clear the previous chart information before running
while True: # Enter loop mode
onTick() # execution strategy main function
Sleep(1000 * 60 * 60 * 24) # Strategy sleep for one day
Dalam strategi ini, sejumlah 2 carta telah dicipta dan diletakkan bersebelahan.cfgA
di sebelah kiri adalah carta semasa, termasuk harga niaga hadapan dan harga spot, dancfgB
pada sebelah kanan adalah carta penyebaran. Kemudian memanggil platform FMZ yang dibina dalam perpustakaan lukisan garis Python untuk membuat objek carta. Akhirnya data dalam carta dikemas kini dalam masa nyata dionTick
function.
last_spot_price = 0 # Save the last valid spot price
last_spread_price = 0 # Save the last valid spread price
def onTick():
global last_spread_price, last_spot_price # import global variables
exchange.SetContractType("i888") # Subscribe to futures varieties
futures = _C(exchange.GetRecords)[-1] # Get the latest K line data
futures_ts = futures.Time # Get the latest K-line futures timestamp
futures_price = futures.Close # Get the latest K-line closing price
spot = exchange.GetData("SPOTPRICE") # Get spot data
spot_ts = spot.Time # Get spot timestamp
if 'iron ore' in spot.Data:
spot_price = spot.Data['iron ore']
last_spot_price = spot_price
else:
spot_price = last_spot_price
spread = exchange.GetData("spread") # Get spread data
spread_ts = spread.Time # Get spread timestamp
if 'iron ore' in spread.Data:
spread_price = spread.Data['iron ore']
last_spread_price = spread_price
else:
spread_price = last_spread_price
Secara keseluruhan, kita perlu mendapatkan tiga jenis data: harga niaga hadapan, harga spot, dan harga penyebaran.SetContractType
fungsi untuk melanggan secara langsung kepada simbol niaga hadapan, dan kemudian menggunakanGetRecords
Untuk harga spot dan spread, anda boleh menggunakan kaedah yang diperkenalkan sebelum ini, gunakanGetData
fungsi untuk memanggil kod data asas, dan mengembalikan data kamus yang mengandungi timestamp.
# fmz@b72930603791887d7452f25f23a13bde
'''backtest
start: 2017-01-01 00:00:00
end: 2020-06-01 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''
# Global variables
# Futures and Spots chart
cfgA = {
"extension": {
"layout":'single',
"col": 6,
"height": "500px",
},
"title": {
"text": "futures and spots chart"
},
"xAxis": {
"type": "datetime"
},
"series": [{
"name": "Futures Price",
"data": [],
}, {
"name": "Spot Price",
"data": [],
}
]
}
# spread chart
cfgB = {
"extension": {
"layout":'single',
"col": 6,
"height": "500px",
},
"title": {
"text": "spread chart"
},
"xAxis": {
"type": "datetime"
},
"series": [{
"name": "spread Price",
"data": [],
}]
}
last_spot_price = 0 # Save the last valid spot price
last_spread_price = 0 # Save the last valid spread price
chart = Chart([cfgA, cfgB]) # Create a chart object
def onTick():
global last_spread_price, last_spot_price # import global variables
exchange.SetContractType("i888") # Subscribe to futures varieties
futures = _C(exchange.GetRecords)[-1] # Get the latest candlestick data
futures_ts = futures.Time # Get the latest K-line futures timestamp
futures_price = futures.Close # Get the latest K-line closing price
Log('Future price:', futures_ts, futures_price)
spot = exchange.GetData("SPOTPRICE") # Get spot data
spot_ts = spot.Time # Get spot timestamp
if 'iron ore' in spot.Data:
spot_price = spot.Data['iron ore']
last_spot_price = spot_price
else:
spot_price = last_spot_price
Log('Spot price:', spot_ts, spot_price)
spread = exchange.GetData("spread") # Get spread data
spread_ts = spread.Time # Get spread timestamp
if 'iron ore' in spread.Data:
spread_price = spread.Data['iron ore']
last_spread_price = spread_price
else:
spread_price = last_spread_price
Log('spread price:', spread_ts, spread_price)
chart.add(0, [futures_ts, futures_price]) # draw chart
chart.add(1, [spot_ts, spot_price]) # draw chart
chart.add(2, [spread_ts, spread_price]) # draw chart
chart.update([cfgA, cfgB]) # update chart
Log('---------')
# Strategy entrance
def main():
LogReset() # Clear the previous log information before running
chart.reset() # Clear the previous chart information before running
while True: # Enter loop mode
onTick() # execution strategy main function
Sleep(1000 * 60 * 60 * 24) # Strategy sleep for one day
Strategi lengkap telah dipaparkan di platform FMZ (FMZ.COM) strategi kotak, ia boleh digunakan secara langsung dengan mengklik pautan di bawah.
https://www.fmz.com/strategy/211941
Arbitraj tidak begitu rumit seperti yang dibayangkan. Ia tidak memerlukan terlalu banyak pengetahuan mengenai teori kewangan, juga tidak memerlukan model matematik atau statistik yang terlalu rumit. Arbitraj pada dasarnya adalah untuk membuat keuntungan dari harga yang tidak munasabah kepada pulangan yang munasabah. Keadaan pasaran berubah setiap tahun. Bagi peniaga, yang terbaik adalah tidak menyalin data sejarah ke masa kini, tetapi menggabungkan data semasa untuk mengkaji sama ada penyebaran harga adalah munasabah.