일부 사람들은
원자재 선물 시장에서 이론적으로 5월에 납품된 애플 계약의 가격을 빼고 10월에 납품된 애플 계약의 가격을 빼면 결과는 0에 가깝거나 일정 가격 범위 내에서 안정적이어야 합니다. 그러나 실제로 날씨, 시장 공급과 수요 및 기타 요인에 의해 단기 및 장기 계약의 가격은 일정 기간 동안 다양한 차원에서 영향을 받으며 가격 차이도 크게 변동됩니다.
그러나 어떤 경우에도 가격차는 결국 특정 가격 범위로 돌아갈 것입니다. 가격차가 이 범위보다 크다면, 5 월 계약을 단축 판매하고 동시에 10 월 계약을 길게 구매하여 이익을 얻습니다. 가격차가 이 범위보다 작다면, 5 월 계약을 길게 구매하고 동시에 10 월 계약을 단축 판매하여 스프레드를 길게 구매하여 이익을 얻습니다. 이것은 같은 품종을 구매하고 판매하는 동시에 시간 간 중재입니다. 그러나 다른 배송 달.
시간적 중재 이외에도 수출국으로부터 소아콩을 구매하고 수입국으로부터 소아콩을 판매하는 것과 같은 시장 간 중재가 있습니다. 또는 수출국으로부터 소아콩을 판매하고 수입국으로부터 소아콩을 수입하는 것; 원자재, 철광석, 원자재 생산 전류를 구매하고 생산 전류의 완성된 실을 판매하는 철강, 또는 생산 전류의 원자재 철광석을 판매하면서 생산 전류의 완성된 철반 중재 등을 판매하는 것.
위의 중재 방법은 문자 그대로
간단히 말해서, 가장 복잡한 링크는 재화의 스팟 거래이며, 이는 창고 영수권, 세금 등과 같은 일련의 문제를 포함합니다. 우선 투자 범위와 관련된 회사가 필요합니다. 계약 배달 중재 선물 계좌라면 법인 법인이어야합니다. 이중 폐쇄 포지션 중재가 필요한 경우 신뢰할 수있는 판매 채널이 필요합니다. 많은 온라인 스팟 거래 웹 사이트가 있습니다.
스포트 거래는 일반적으로 17%에서 20%의 부가가치세를 부과하고 있으므로 이중 클로즈 포지션 중재인 경우 스포트 구매 후 1.2에서 1.25 배에 걸쳐 선물을 단축해야합니다. 계약 배달 중재의 경우 스포트 구매 후 동일한 비율의 선물을 단축해야합니다. 또한 거래 수수료, 운송 및 창고 비용을 고려해야합니다. 물론, 이 모든 전제 조건은 현재 가격 스프레드가 충분히 크고 충분한 경계가 있다는 것입니다.
또한, 상하이 금거래소에서 금 (T+D) 이 존재하기 때문에, 금기시대의 현재 중재는 긍정적 중재일 뿐만 아니라 금리징 없이 역중재작업도 할 수 있다. 상하이 금거래소에서 현금 (T+D) 의 연기 거래는 거래에 편리할 뿐만 아니라 거래량과 지위가 많으며, 유동성은
온라인에는 많은 종류의 스팟 및 스프레드 데이터가 있으며, 대부분은 표 형태로 제공되며, 이는 분명히 시장 분석 및 판단에 적합하지 않습니다.FMZ.COM) 는 재화 선물 기본 데이터, 즉석 데이터 및 스프레드 데이터를 포함하여 내장되어 있습니다. 각 품종의 즉석 및 스프레드 가격을 얻기 위해 함수를 호출 할 필요가 있으며 2016 년부터 현재까지의 역사적 데이터를 지원합니다.
# 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)
결과를 반환합니다
{
"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
}
}
먼저, 등록하고 FMZ 웹사이트에 로그인 (FMZ.COM),
# 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
전략 프레임 워크는 두 가지 기능을 수행합니다.main
전략의 입구,main
기능은 거래 전에 사전 처리입니다, 프로그램에서 시작됩니다main
함수, 그리고 무한 루프 모드를 입력, 반복적으로 실행onTick
기능,onTick
이 전략의 주요 기능은 핵심 코드를 실행하는 것입니다.
# 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
이 전략에서는 총 2개의 차트가 만들어졌으며,cfgA
왼쪽은 현재 차트, 선물 가격과 스팟 가격을 포함하고,cfgB
오른쪽에는 스프레드 차트가 있습니다. 그 다음 FMZ 플랫폼 내장 파이썬 라인 드로잉 라이브러리를 호출하여 차트 객체를 생성합니다. 마지막으로 차트의 데이터는 실시간으로 업데이트됩니다onTick
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
총, 우리는 세 가지 유형의 데이터를 얻을 필요가 있습니다: 선물 가격, 현장 가격, 스프레드 가격. 선물 가격을 얻는 것은 간단합니다.SetContractType
futures 기호에 직접 가입 하 고 다음GetRecords
자금 및 스프레드 가격에 대해서는 이전에 소개 된 방법을 사용할 수 있습니다.GetData
기본 데이터 코드를 호출하고 시간표를 포함하는 사전 데이터를 반환합니다.
# 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
전체 전략은 FMZ 플랫폼에 게시되었습니다 (FMZ.COM) 전략 광장, 아래 링크를 클릭하여 직접 사용할 수 있습니다.
https://www.fmz.com/strategy/211941
중재는 생각보다 복잡하지 않습니다. 금융 이론에 대한 너무 많은 지식이 필요하지 않으며, 너무 복잡한 수학적 또는 통계 모델도 필요하지 않습니다. 중재는 본질적으로 합리적인 가격에서 합리적인 수익으로 이익을 창출하는 것입니다. 시장 조건은 매년 변화합니다. 거래자에게는 역사적 데이터를 현재로 복사하지 않고 현재 데이터를 결합하여 가격 스프레드가 합리적인지 여부를 연구하는 것이 좋습니다.