리소스 로딩... 로딩...

데이터 재생 기능을 기반으로 개발된 선형 대기 주문 흐름 전략

저자:FMZ~리디아, 창작: 2022-12-23 20:06:04, 업데이트: 2023-09-20 09:41:28

img

데이터 재생 기능을 기반으로 개발된 선형 대기 주문 흐름 전략

전문

흔히 거래는 예술이고 예술은 영감을 통해 나온다고 합니다. 그래서 오늘 저는 FMZ 퀀트 데이터 재생 기능을 사용하여 제 트레이딩 영감을 탐구하는 방법을 여러분과 공유하고 싶습니다.

영감과 거래의 시장 느낌

우리가 일반적으로 영감이라고 부르는 것은 사람들이 생각하는 과정에서 생성하는 창의적인 상태를 의미합니다. 거래자에게는 우리의 왼쪽 뇌반구가 전략 작성, 자본 할당 및 매개 변수 설정과 같은 일련의 규칙의 구성을 완료했습니다. 거래의 영감과 시장 느낌은 뇌의 오른쪽 뇌반구에서 발생합니다.

많은 사람들이 시장 느낌이라는 단어를 들어본 적이 있는데, 이는 현재 일어나고 있는 일들에 대한 예견과 같은 일종의 모호한 느낌이다. 거래에서 직관과 같은 이 여섯 번째 감각이 논리적으로 추론되고 분석되지 않지만, 시장의 미래 추세를 예측하는 것은 거래자가 구매 또는 판매 결정을 내리는 것을 촉구합니다.

영감을 얻는 방법

평신도의 눈에는 시장의 감정이 신비합니다. 그것은 신비한 재능입니다. 그것을 통해 시장에 서있을 수 있습니다. 사실, 그것은 뇌에 의해 주관적 거래 경험의 요약입니다. 그것은 시장을 관찰하는 몇 년 동안 실현 된 모호한 선입견 감정입니다.

엄밀히 말하면, 영감은 시장의 느낌과 정확히 같지는 않지만, 우리는 수천 번의 시장 정제 후 시장에 대한 깊은 이해를 갖게 될 것이며, 쉽게 전략을 개발할 수 있을 것이라고 믿습니다. 따라서 이 재능을 습득하고 더 많은 거래 전략을 개발하고 싶다면. 많은 수의 거래를 통해서만 우리는 우리의 거래 시스템을 개선할 수 있습니다.

그러나 국내 상품 선물 및 주식은 하루 몇 시간 만 거래 시간을 가지고 있으므로 시장을 관찰하고 자신의 수익 패턴과 거래 규칙을 형성하고 라이브 거래에서만 무의식적으로 조건부 반사를 훈련시키는 경험을 향상시키는 것이 압도적일 것입니다. 오랜 시간 비용을 지불하는 것 외에도 대부분의 거래자는 자본 손실의 비용을 부담합니다. 이 문제를 해결하기 위해 FMZ Quant은 데이터 재생 기능을 개발했습니다.

데이터 재생을 사용하는 방법

데이터 재생 기능은 거래소의 거래 시간과 관계없이 훈련 될 수 있으며 다양한 상품 선물 및 디지털 통화 품종을 지원합니다. 시장은 수동 또는 자동으로 재생할 수 있으며, 시작 및 종료 시간 및 역사 시장의 재생 속도는 자유롭게 설정 할 수 있습니다. 다른 소프트웨어와 비교하면 K-라인 데이터 재생 모드가 널리 사용됩니다. FMZ Quant은 실제 거래 로봇의 백테스팅 환경에 매우 가까운 Tick 수준에서 데이터 재생 모드를 채택하고 거래자가 실제 세계에 몰입 할 수 있도록 시장의 가격 볼륨 데이터를 재생합니다.

FMZ Quant 공식 홈페이지에 접속하세요 (fmz.com) 로 등록하고 로그인 하 고, 다음 대시보드 내 데이터베이스 를 클릭 하 여 데이터 재생 기능 페이지를 표시 합니다. 네 가지 옵션 박스 및 한 개의 선택 버튼이 있습니다. 먼저 선택 버튼을 클릭 하 여 실제 봇 재생을 지원 하는 종류만 표시 합니다. 그 다음 왼쪽 상단에 재생 될 종류를 선택 하 고, 다음 두 가지 옵션 박스에서 데이터의 시작 및 종료 시간을 선택 하 고, 그 다음 데이터의 시간 기간을 실제 봇 재생으로 선택 하 고, 마지막으로 데이터 재생 기능을 시작 하 여 오른쪽 끝에 있는 가 버튼을 클릭 합니다.

img

데이터 레이블 아래에는 세 개의 섹션이 있습니다. 왼쪽에는 닫힌 모든 주문이 시간 순서대로 표시되는 거래 역사가 있습니다. 중앙에는 각 구매 및 판매 주문 데이터의 20 위치 깊이가 있습니다. 오른쪽에는 미디어 플레이어를 사용하는 것과 마찬가지로 수동 및 자동 데이터 재생 방법을 선택할 수있는 데이터 재생 제어 영역이 있습니다.

img

위치 인덱스는 커서를 왼쪽에서 오른쪽으로 앞뒤로 끌 수 있습니다. 데이터 재생 시작 시간을 빠르게 선택할 수 있습니다.

img

데이터 재생 속도는 아래쪽에서 커서 오른쪽으로 왼쪽으로 밀리초로 움직여 재생 중에 데이터를 가속화하고 느리게 조절할 수 있습니다.

img

전략 논리를 구축

세계 경제 환경, 국가 거시 정책, 관련 산업 정책, 수요와 공급 관계, 국제 사건, 금리 및 환율, 인플레이션 및 디플레이션, 시장 심리학, 알려지지 않은 요인 등 많은 요인이 가격 상승과 감소에 영향을 미치기는 하지만 시장의 최종 가격은 다양한 당사자와 쇼트 포지션 측면 간의 경쟁의 결과입니다. 더 많은 사람들이 판매하는 것보다 구매하면 가격이 증가합니다. 반대로, 더 많은 사람들이 구매하는 것보다 판매하면 가격이 감소합니다. 그러면 우리는 거래 전략을 만들기 위해 가격을 분석해야합니다.

바이낸스 거래소의 FMZ 퀀트 재생을 통해 시장이 급격히 증가하고 감소했을 때, 틱 데이터의 오더북은 긴 위치와 짧은 위치 사이의 오더 볼륨의 측면에서 명백히 비대칭적이라는 것을 발견했습니다. 시장이 증가할 때, 긴 오더의 수는 분명히 짧은 오더의 수보다 더 많습니다. 시장이 증가할 때, 짧은 오더의 수는 분명히 긴 오더의 수보다 더 많습니다. 따라서 우리는 오더북의 미뤄진 오더 볼륨에 따라 짧은 시간에 가격 증가와 감소를 예측할 수 있습니까?

답은 네입니다.

img

시장이 증가할 때, 장기 주문의 수는 당연히 짧은 주문의 수보다 더 많습니다.

img

시장이 감소할 때, 짧은 주문의 수는 당연히 긴 주문의 수보다 더 많습니다.

우리는 긴 및 짧은 대기 주문을 계산하고 비교하기 위해 심층적인 틱 데이터를 수집할 수 있습니다. 결합된 긴 및 짧은 대기 주문이 매우 다르면 잠재적 인 거래 기회가 될 수 있습니다. 예를 들어, 긴 포지션 주문의 수가 짧은 포지션 주문의 N 배일 때 시장의 대부분의 사람들이 상승세를 보이고 있으며, 미래에 짧은 시간에 가격 상승 확률이 증가 할 것이라고 생각할 수 있습니다. 짧은 판매자의 수가 긴 판매자의 N 배일 때 시장의 대부분의 사람들이 하락세를 보이고 있으며, 가까운 미래에 가격 하락 확률이 증가 할 것이라고 생각할 수 있습니다.

거래 전략을 작성

위의 전략 논리에 따르면, 그것은 코드에 구현되기 시작합니다.fmz.com> 로그인 > 대시보드 > 전략 > 전략 추가 > 오른쪽 상단에있는 드롭다운 메뉴를 클릭하여 파이썬 언어를 선택하고 전략을 작성하기 시작합니다. 이 전략은 교육에 대한 소개로 사용됩니다. 그래서 전략을 단순화하고 다음 코드의 댓글에주의를 기울이려고합니다.

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

# Strategy main function
def onTick():
    pass


# Program entry
def main():
    while True:  # Enter the infinite loop mode
        onTick()  # Execute the strategy main function
        Sleep(1000)  # Sleep for 1 second

우리는 집을 짓는 것과 마찬가지로 큰 것부터 작은 것까지 전략을 써야 합니다. 먼저 프레임을 짓고 그 다음 벽을 짓는 것 처럼요. 이 프레임 워크에서 우리는 두 가지 함수를 사용합니다. 주요 함수와 온틱 함수입니다. 주요 함수는 프로그램의 입력입니다. 즉, 프로그램이 여기서 실행됩니다.

단계 2: 글로벌 변수를 작성합니다.

vol_ratio_arr = []  # Long/Short positions pending order ratio array
mp = 0  # Virtual positions

vol_ratio_arr가 글로벌 변수로 정의되는 이유는 내 전략이 Tick 데이터의 대기 주문의 긴 위치와 짧은 위치의 비율을 수집해야하기 때문입니다. vol_ratio_arr 변수를 onTick 함수로 넣으면 루프로 실행하는 것이 명백히 불합리합니다. 우리가 필요로하는 것은 특정 조건이 충족되면 루프 모드에서 변수의 값을 변경하는 것입니다. 가장 합리적인 방법은 변수를 루프 외부에 넣는 것입니다.

포지션 관리는 거래 논리와 관련이 있기 때문에 매우 필요합니다. 일반적으로 우리는 현금 거래에서 계정을 획득하여 보유한 통화 쌍을 계산합니다. 코드를 단순화하기 위해 글로벌 가상 포지션 변수를 직접 정의하여 거래 논리를 제어합니다.

단계 3: 현재 빈 배수 비율을 계산

depth = exchange.GetDepth()  # Get depth data
asks = depth['Asks']  # Get asks array
bids = depth['Bids']  # Get bids array
asks_vol = 0  # All pending orders at ask price
bids_vol = 0  # All pending orders at bid price
for index, ask in enumerate(asks):  # Iterate through the ask price array
    # Linear calculation of all pending orders at the ask price
    asks_vol = asks_vol + ask['Amount'] * (20 - index)
for index, bid in enumerate(bids):  # Iterate through the bid price array
    # Linear calculation of all pending orders at the bid price
    bids_vol = bids_vol + bid['Amount'] * (20 - index)
bidask_ratio = bids_vol / asks_vol  # Calculate long/short position ratio

우리가 알고 있듯이, 디지털 화폐는 보통 20 레벨의 딥 데이터이기 때문에 우리는 긴 위치와 짧은 위치의 비율을 계산하기 위해 긴 위치와 짧은 위치의 수를 더할 수 있습니다. 이 값이 1보다 크면 상승률이 하락률보다 크다는 것을 의미합니다. 이 값이 1보다 작으면 상승률이 하락률보다 크다는 것을 의미합니다.

그러나 구별해야 할 점은 있습니다. 미뤄진 주문이 개시 시장에 가까워질수록 상승 또는 버시의 욕망이 강해질 것입니다. 예를 들어, 첫 번째 레벨의 주문은 20 차원의 주문보다 확실히 상승을 기꺼이합니다. 따라서 미뤄진 주문을 축적 할 때 20 레벨의 주문에 선형 방식으로 다른 무게를 부여해야합니다. 이는 더 합리적입니다.

단계 4: 일정 기간 동안의 긴/단기 포지션 비율의 선형 계산

global vol_ratio_arr, mp  # Introduce global variables
vol_ratio_arr.insert(0, bidask_ratio)  # Put the long/short position ratio into the global variable array
if len(vol_ratio_arr) > 20:  # If the array exceeds the specified length
    vol_ratio_arr.pop()  # Delete the oldest elements
all_ratio = 0  # Temporary variable, ratio of all long and short position pending orders
all_num = 0  # Temporary variables, all linear multipliers
for index, vol_ratio in enumerate(vol_ratio_arr):  # Variable global variable arrays
    num = 20 - index  # Linear multiplier
    all_num = all_num + num  # Linear multiplier accumulation
    all_ratio = all_ratio + vol_ratio * num  # Accumulation of all long and short position pending orders ratio
ratio = all_ratio / all_num  # Linear long and short position pending order ratio

롱-쇼트 포지션 비율은 긴 누적 미뤄진 주문을 짧은 누적 미뤄진 주문으로 나눌 수 있습니다. 그러나 이것은 단지 틱 데이터입니다. 하나의 틱 데이터만 사용되면 빠르게 변화하는 시장에서 하나의 틱 데이터가 설득력이 없기 때문에 구매 및 판매 거래를 결정하는 것이 현명하지 않을 수 있습니다. 따라서 우리는 고정된 틱 데이터를 수집하고 최종적으로 선형 계산을 통해 공정한 가치를 계산해야합니다.

5단계: 주문

last_ask_price = asks[0]['Price']  # Latest buy one price for asks
last_bid_price = bids[0]['Price']  # Latest sell one price for bids
if mp == 0 and ratio > buy_threshold:  # If no currency is held currently, and the ratio is greater than the specified value
    exchange.Buy(last_ask_price, 0.01)  # Buy
    mp = 1  # Set the value of virtual position
if mp == 1 and ratio < sell_threshold:  # If there is currency held currently, and the ratio is less than the specified value
    exchange.Sell(last_bid_price, 0.01)  # Sell
    mp = 0  # Reset the value of virtual position

우리는 주문을 할 때 가격을 지정해야 하기 때문에, 우리는 직접 구매할 때 최신 판매 한 가격을 사용할 수 있습니다; 판매 할 때, 당신은 직접 최신 구매 한 가격을 사용할 수 있습니다. 마지막으로, 주문을 할 때 가상 위치의 값을 재설정합니다.

결론

위는 데이터 재생 기능에 기반하여 개발된 선형 대기 주문 흐름 전략의 코드 분석입니다. 양적 거래의 초보자라면 데이터 재생 기능은 거래 비용을 0으로 배우고 거래를 이해하는 시간을 단축할 수 있습니다. 실제 봇이나 시뮬레이션 거래가 초기 결과를 달성하는 데 일반적으로 몇 년이 걸립니다. 데이터 재생 기능이 동일한 효과를 달성하는 데 몇 주가 걸립니다. 시간을 낭비하지 않는 전제에서 최소한의 손실로 거래를 배울 수 있습니다. 고급 트레이더에게는 동적 재생이 과거의 문제를 분석하고 거래 전략을 확인하고 개선하고 전략에 대한 트레이더의 신뢰를 향상시키고 새로운 전략적 영감을 창출하는 데 도움이 될 수 있습니다.


관련

더 많은