FMZ 기본 데이터에 기초한 상품 선물 및 스팟 중재 차트

저자:선함, 2020-06-17 10:59:26, 업데이트: 2023-11-01 20:28:10

img

요약

일부 사람들은 중재이라는 단어에 익숙하지 않을 수도 있지만, 중재은 실생활에서 매우 일반적입니다. 예를 들어, 편의점 소유자는 도매 시장에서 0.5 위안으로 한 병의 미네랄 워터를 구입하고, 1 위안으로 매장에서 판매하여 결국 0.5 위안의 차이를 얻습니다. 이 과정은 실제로 중재와 유사합니다. 금융 시장의 중재는 많은 형태의 중재가 있다는 것을 제외하고는이 원칙과 유사합니다.

중재란 무엇인가요?

원자재 선물 시장에서 이론적으로 5월에 납품된 애플 계약의 가격을 빼고 10월에 납품된 애플 계약의 가격을 빼면 결과는 0에 가깝거나 일정 가격 범위 내에서 안정적이어야 합니다. 그러나 실제로 날씨, 시장 공급과 수요 및 기타 요인에 의해 단기 및 장기 계약의 가격은 일정 기간 동안 다양한 차원에서 영향을 받으며 가격 차이도 크게 변동됩니다.

그러나 어떤 경우에도 가격차는 결국 특정 가격 범위로 돌아갈 것입니다. 가격차가 이 범위보다 크다면, 5 월 계약을 단축 판매하고 동시에 10 월 계약을 길게 구매하여 이익을 얻습니다. 가격차가 이 범위보다 작다면, 5 월 계약을 길게 구매하고 동시에 10 월 계약을 단축 판매하여 스프레드를 길게 구매하여 이익을 얻습니다. 이것은 같은 품종을 구매하고 판매하는 동시에 시간 간 중재입니다. 그러나 다른 배송 달.

시간적 중재 이외에도 수출국으로부터 소아콩을 구매하고 수입국으로부터 소아콩을 판매하는 것과 같은 시장 간 중재가 있습니다. 또는 수출국으로부터 소아콩을 판매하고 수입국으로부터 소아콩을 수입하는 것; 원자재, 철광석, 원자재 생산 전류를 구매하고 생산 전류의 완성된 실을 판매하는 철강, 또는 생산 전류의 원자재 철광석을 판매하면서 생산 전류의 완성된 철반 중재 등을 판매하는 것.

퓨처스 및 스팟 중재란 무엇인가요?

위의 중재 방법은 문자 그대로 중재이지만 순수 중재는 아닙니다. 그들은 본질적으로 위험 투기입니다. 이 투기 방법은 가격 스프레드를 길게 구입하거나 짧게 팔아서 수익을 창출하는 것입니다. 스프레드가 대부분의 시간 동안 안정화되었지만 가격 스프레드가 오랫동안 돌아오지 않는 시장 상황이 발생할 수 있습니다.

퓨처스 및 스팟 중재의 핵심 원칙은 동일한 상품이 같은 시점에 하나의 가격만을 가질 수 있다는 것입니다. 선물은 배달 시간이 도달하면 스팟이 될 것이기 때문에 계약 배달 시간이 가까워지면 가격 반환이 강요됩니다. 이것은 시간 간 중재와 완전히 다릅니다. 시간 간 중재는 두 가지 다른 배송 달을 가진 계약입니다. 만료되면 두 가지 다른 달의 스팟이됩니다. 또는 두 가지 가격이 될 수 있습니다.

  • 스프레드 = 선물 가격 - 현장 가격

퓨처스 및 스팟 중재의 가장 큰 특징은 이론적으로 위험이 없다는 것입니다. 주로 이익 범위를 계산하기 위해 스프레드를 기반으로합니다. 스프레드가 너무 크다면 스팟을 길게하고 동시에 선물을 단축 할 수 있으며 스프레드가 0으로 돌아오는 것을 기다립니다.

상품 퓨처스 및 스팟 중재 채널

간단히 말해서, 가장 복잡한 링크는 재화의 스팟 거래이며, 이는 창고 영수권, 세금 등과 같은 일련의 문제를 포함합니다. 우선 투자 범위와 관련된 회사가 필요합니다. 계약 배달 중재 선물 계좌라면 법인 법인이어야합니다. 이중 폐쇄 포지션 중재가 필요한 경우 신뢰할 수있는 판매 채널이 필요합니다. 많은 온라인 스팟 거래 웹 사이트가 있습니다.

스포트 거래는 일반적으로 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), 대시보드 을 클릭하고 전략 라이브러리 + 새로운 전략을 클릭합니다. 왼쪽 상단쪽 드롭다운 메뉴에서 파이썬을 선택하고 전략의 이름을 입력합니다.

단계 1: 전략 프레임워크를 작성

# 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이 전략의 주요 기능은 핵심 코드를 실행하는 것입니다.

단계 2: 차트 함수를 추가합니다

# 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.

단계 3: 데이터를 얻으십시오

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

총, 우리는 세 가지 유형의 데이터를 얻을 필요가 있습니다: 선물 가격, 현장 가격, 스프레드 가격. 선물 가격을 얻는 것은 간단합니다.SetContractTypefutures 기호에 직접 가입 하 고 다음GetRecords자금 및 스프레드 가격에 대해서는 이전에 소개 된 방법을 사용할 수 있습니다.GetData기본 데이터 코드를 호출하고 시간표를 포함하는 사전 데이터를 반환합니다.

차트 표시

img img img

전체 전략 코드를 얻으세요

# 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

중재는 생각보다 복잡하지 않습니다. 금융 이론에 대한 너무 많은 지식이 필요하지 않으며, 너무 복잡한 수학적 또는 통계 모델도 필요하지 않습니다. 중재는 본질적으로 합리적인 가격에서 합리적인 수익으로 이익을 창출하는 것입니다. 시장 조건은 매년 변화합니다. 거래자에게는 역사적 데이터를 현재로 복사하지 않고 현재 데이터를 결합하여 가격 스프레드가 합리적인지 여부를 연구하는 것이 좋습니다.


관련

더 많은