Một số người có thể không quen thuộc với từ
Trong thị trường hợp đồng tương lai hàng hóa, về lý thuyết, giá hợp đồng Apple được giao vào tháng 5 trừ giá hợp đồng Apple được giao vào tháng 10, kết quả nên gần 0 hoặc ổn định trong một phạm vi giá nhất định. Nhưng trên thực tế, do thời tiết, nguồn cung và nhu cầu thị trường và các yếu tố khác, giá hợp đồng ngắn hạn và dài hạn sẽ bị ảnh hưởng ở mức độ khác nhau trong một khoảng thời gian, và sự khác biệt giá cũng sẽ dao động đáng kể.
Nhưng trong mọi trường hợp, sự khác biệt giá cuối cùng sẽ trở lại một phạm vi giá nhất định, sau đó nếu sự khác biệt giá lớn hơn phạm vi này, bán ngắn hợp đồng tháng 5, và mua dài hợp đồng tháng 10 cùng một lúc, bán ngắn sự khác biệt để kiếm lợi nhuận; nếu sự khác biệt giá nhỏ hơn phạm vi này, mua dài hợp đồng tháng 5, cùng một lúc bán ngắn hợp đồng tháng 10, kiếm lợi nhuận từ việc mua dài chênh lệch. Đây là sự điều chỉnh giữa thời gian thông qua việc mua và bán cùng một loại nhưng tháng giao hàng khác nhau.
Ngoài sự điều chỉnh giữa thời gian, còn có sự điều chỉnh giữa thị trường như mua đậu nành từ các nước xuất khẩu trong khi bán đậu nành từ các nước nhập khẩu, hoặc bán đậu nành từ các nước xuất khẩu và nhập khẩu đậu nành từ các nước nhập khẩu; mua nguyên liệu, quặng sắt phía trước và bán dây kết thúc phía sau Sắt, hoặc bán nguyên liệu sắt phía trước trong khi mua điều chỉnh quặng kết thúc phía sau, v.v.
Mặc dù các phương pháp chênh lệch giá trên thực sự là
Nguyên tắc cốt lõi của
Tính năng lớn nhất của
Nói một cách đơn giản, liên kết phức tạp nhất là giao dịch tại chỗ của hàng hóa, liên quan đến một loạt các vấn đề như biên lai kho, thuế v.v. Trước hết, cần một công ty liên quan đến phạm vi đầu tư. Nếu đó là tài khoản tương lai phân phối hợp đồng, nó phải là một pháp nhân doanh nghiệp. Nếu cần giao dịch tại chỗ gấp đôi, cần một kênh bán hàng đáng tin cậy. Có nhiều trang web giao dịch tại chỗ trực tuyến.
Cần lưu ý rằng giao dịch tại chỗ thường có thuế giá trị gia tăng từ 17% đến 20%, vì vậy nếu đó là một sự phân biệt giá trị gần hai lần, bạn cần phải bán ngắn tương lai 1,2 đến 1,25 lần sau khi mua tại chỗ. Trong trường hợp phân phối hợp đồng, bạn cần phải bán ngắn cùng tỷ lệ tương lai sau khi mua tại chỗ, và bạn cũng cần phải xem xét chi phí giao dịch, vận chuyển và kho. Tất nhiên, tiền đề của tất cả điều này là mức chênh lệch giá hiện tại đủ lớn và có đủ giới hạn.
Ngoài ra, do sự tồn tại của vàng (T + D) trên Sàn giao dịch vàng Thượng Hải, sự điều chỉnh hiện tại trong thời kỳ vàng không chỉ có thể là điều chỉnh tích cực, mà còn có thể là các hoạt động điều chỉnh ngược mà không cần cho thuê vàng.
Có rất nhiều loại dữ liệu tại chỗ và chênh lệch trực tuyến, hầu hết trong số đó được trình bày dưới dạng bảng, rõ ràng không phù hợp để phân tích và đánh giá thị trường.FMZ.COMChỉ cần gọi một hàm để có được giá giao dịch và giá chênh lệch của mỗi loại, và hỗ trợ dữ liệu lịch sử từ năm 2016 đến nay.
# 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)
Quay lại kết quả
{
"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
}
}
Hãy sử dụng nền tảng FMZ để định lượng và thực hiện giá giao ngay và giá chênh lệch dưới dạng biểu đồ.FMZ.COM), bấm
# 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
Khung chiến lược có hai chức năng,main
chức năng là lối vào của chiến lược,main
chức năng là xử lý trước khi giao dịch, chương trình sẽ bắt đầu từmain
chức năng, và sau đó nhập chế độ vòng lặp vô hạn, lặp đi lặp lại thực hiệnonTick
chức năng,onTick
chức năng chính của chiến lược, chủ yếu là thực hiện mã cốt lõi.
# 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
Trong chiến lược này, tổng cộng 2 biểu đồ đã được tạo ra và được sắp xếp cạnh nhau.cfgA
bên trái là biểu đồ hiện tại, bao gồm giá tương lai và giá giao ngay, vàcfgB
sau đó gọi nền tảng FMZ xây dựng trong thư viện vẽ đường Python để tạo ra một đối tượng biểu đồ. cuối cùng dữ liệu trong biểu đồ được cập nhật trong thời gian thực trongonTick
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
Tổng cộng, chúng ta cần có được ba loại dữ liệu: giá tương lai, giá ngay lập tức và giá chênh lệch.SetContractType
chức năng để trực tiếp đăng ký biểu tượng tương lai, và sau đó sử dụngGetRecords
Đối với giá giao ngay và chênh lệch, bạn có thể sử dụng phương pháp được giới thiệu trước đây, sử dụngGetData
chức năng để gọi mã dữ liệu cơ bản, và trả về dữ liệu từ điển có chứa dấu thời gian.
# 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
Chiến lược hoàn chỉnh đã được đăng trên nền tảng FMZ (FMZ.COM) chiến lược quảng trường, nó có thể được sử dụng trực tiếp bằng cách nhấp vào liên kết bên dưới.
https://www.fmz.com/strategy/211941
Điều khoản trọng tài không phức tạp như tưởng tượng. Nó không đòi hỏi quá nhiều kiến thức về lý thuyết tài chính, cũng không đòi hỏi quá nhiều mô hình toán học hoặc thống kê phức tạp. Điều khoản trọng tài về cơ bản là để kiếm lợi nhuận từ giá không hợp lý đến lợi nhuận hợp lý. Điều kiện thị trường thay đổi mỗi năm. Đối với các nhà giao dịch, tốt nhất là không sao chép dữ liệu lịch sử sang hiện tại, mà là kết hợp dữ liệu hiện tại để nghiên cứu xem giá chênh lệch có hợp lý hay không.