Beberapa orang mungkin tidak terbiasa dengan kata
Di pasar berjangka komoditas, secara teori, harga kontrak Apple yang dikirimkan pada bulan Mei dikurangi harga kontrak Apple yang dikirimkan pada bulan Oktober, hasilnya harus mendekati 0 atau stabil dalam kisaran harga tertentu.
Tapi dalam hal apapun, perbedaan harga akhirnya akan kembali ke kisaran harga tertentu, maka jika perbedaan harga lebih besar dari kisaran ini, jual pendek kontrak Mei, dan beli panjang kontrak Oktober pada saat yang sama, pendek perbedaan untuk membuat keuntungan; jika perbedaan harga kurang dari kisaran ini, membeli kontrak Mei panjang, pada saat yang sama menjual kontrak Oktober pendek, membuat keuntungan dari membeli panjang penyebaran. Ini adalah arbitrage intertemporal melalui pembelian dan penjualan varietas yang sama tetapi bulan pengiriman yang berbeda.
Selain arbitrage intertemporal, ada arbitrage lintas pasar seperti membeli kedelai dari negara-negara pengekspor sambil menjual kedelai dari negara-negara pengimpor, atau menjual kedelai dari negara-negara pengekspor dan mengimpor kedelai dari negara-negara pengimpor; membeli bahan baku hulu, bijih besi, dan menjual hiasan baja hulu, atau menjual bijih besi hulu sambil membeli arbitrage rebar hulu, dll.
Meskipun metode arbitrage di atas secara harfiah
Prinsip inti dari
Fitur terbesar dari
Dengan kata lain, tautan yang paling rumit adalah perdagangan spot komoditas, yang melibatkan serangkaian masalah seperti kwitansi gudang, perpajakan, dan sebagainya. Pertama-tama, perusahaan yang terkait dengan ruang lingkup investasi diperlukan. Jika itu adalah akun futures arbitrage pengiriman kontrak, itu harus menjadi orang hukum perusahaan. Jika arbitrage posisi dekat ganda diperlukan, saluran penjualan yang andal diperlukan. Ada banyak situs web perdagangan spot online.
Perlu dicatat bahwa transaksi spot biasanya memiliki pajak nilai tambah sebesar 17% hingga 20%, jadi jika ini adalah arbitrage posisi close ganda, Anda perlu short futures 1,2 hingga 1,25 kali setelah membeli spot. Dalam kasus arbitrage pengiriman kontrak, Anda perlu short proporsi yang sama dari futures setelah membeli spot, dan Anda juga perlu mempertimbangkan biaya biaya transaksi, transportasi, dan gudang. Tentu saja, premis dari semua ini adalah bahwa spread harga saat ini cukup besar dan ada batas yang cukup.
Selain itu, karena adanya emas (T + D) di Bursa Emas Shanghai, arbitrage saat ini dalam periode emas tidak hanya bisa menjadi arbitrage positif, tetapi juga operasi reverse arbitrage tanpa leasing emas.
Ada banyak jenis data spot dan spread online, yang sebagian besar disajikan dalam bentuk tabel, yang jelas tidak cocok untuk menganalisis dan menilai pasar.FMZ.COMHanya perlu memanggil fungsi untuk mendapatkan harga spot dan spread dari setiap varietas, dan mendukung data historis dari 2016 hingga saat ini.
# 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 pengembalian
{
"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 mewujudkan harga spot dan harga spread dalam bentuk grafik.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
Kerangka strategi memiliki dua fungsi, yaitu:main
fungsi adalah pintu masuk dari strategi,main
fungsi adalah pra-pengolahan sebelum perdagangan, program akan mulai darimain
fungsi, dan kemudian masuk ke mode loop tak terbatas, berulang kali menjalankanonTick
Fungsi,onTick
fungsi adalah fungsi utama dari strategi, terutama mengeksekusi kode inti.
# 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, total 2 grafik telah dibuat dan disusun berdampingan.cfgA
di sebelah kiri adalah grafik saat ini, termasuk harga futures dan harga spot, dancfgB
di sebelah kanan adalah grafik spread. Kemudian hubungi FMZ platform built-in Python line drawing library untuk membuat objek grafik. Akhirnya data dalam grafik diperbarui secara real time 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 total, kita perlu mendapatkan tiga jenis data: harga berjangka, harga spot, dan harga spread.SetContractType
fungsi untuk langsung berlangganan simbol berjangka, dan kemudian menggunakanGetRecords
Untuk harga spot dan spread, Anda dapat menggunakan metode yang diperkenalkan sebelumnya, menggunakanGetData
fungsi untuk memanggil kode data dasar, dan mengembalikan data kamus yang berisi 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 diposting di platform FMZ (FMZ.COM) strategi kotak, dapat digunakan langsung dengan mengklik tautan di bawah ini.
https://www.fmz.com/strategy/211941
Arbitrage tidak terlalu rumit seperti yang dibayangkan. Hal ini tidak memerlukan terlalu banyak pengetahuan tentang teori keuangan, juga tidak memerlukan model matematika atau statistik yang terlalu rumit. Arbitrage pada dasarnya adalah untuk membuat keuntungan dari harga yang tidak masuk akal untuk pengembalian yang wajar. Kondisi pasar berubah setiap tahun. Bagi pedagang, yang terbaik adalah tidak menyalin data historis ke masa kini, tetapi untuk menggabungkan data saat ini untuk mempelajari apakah spread harga wajar.