페인 트랜잭션에 기반한 고주파 회전 시스템과 K론 라인 회전의 결함

저자:초목, 2020-06-04 16:48:02에 생성, 2023-10-08 19:46:18에 업데이트

img

저는1시간 K선 재검토를 기반으로 한 첫 번째 보고서는 전략의 효과를 검증했다. 그러나 실제 공개된 전략의 휴면시간은 1s이며, 이는 상당히 높은 빈도 전략이며, 1시간 K선 재검토로 정확한 결과를 얻을 수 없다는 것이 분명하다.분자선 재검토그 결과, 재검토 수익은 많이 향상되었지만, 초차 수준에서 어떤 매개 변수를 사용해야할지 결정하지 못하고 전체 전략에 대한 이해도 명확하지 않습니다. 주요 이유는 K 라인을 기반으로 한 재검토의 중요한 단점입니다.

K-선 복사기반에 대한 문제

먼저 역사 K선이란 무엇인가? K선 데이터에는 4개의 가격, 2개의 시작 시간, 그리고 간격 거래가 포함되어 있다. 대부분의 계량화 플랫폼과 프레임워크는 K선 리모델링에 기반하고 FMZ 리모델링 플랫폼은 또한 틱 레벨 리모델링을 제공한다. K선 리모델링의 속도는 빠르다. 대부분의 경우 문제도 없다.

첫째는 시간 문제, K선 데이터의 최고 가격과 최저 가격의 시간은 주어지지 않고 고려되지 않지만 가장 중요한 오픈 및 클로즈 가격의 시작은 오픈 및 클로즈 시간이 아닙니다. 심지어는 덜 냉정한 거래 품종도 종종 10 초 동안 거래되지 않습니다.

두 가지 품종의 수익을 분자선으로 회전시키는 것을 상상해보십시오. 일반적으로 10달러의 차이는 있습니다. 이제 10:01시에 A 계약이 100달러, B 계약이 112달러, 차이는 12달러로 종료되는 것을 발견합니다. 그래서 전략은 헤지핑을 시작합니다.

실제 상황에서는 10:00:45에서 A 계약이 100달러 거래가 발생하고 그 후 거래가 발생하지 않고, B 계약이 10:00:58에서 112달러 거래가 발생하고, 이 순간, 두 가격 모두 존재하지 않는 10:01의 순간, 이 시점의 거래 가격은 얼마이며, 헤딩이 얼마나 많은 이차를 먹을 수 있는지 알 수 없습니다. 가능한 상황 중 하나는: 10:00:58에 A 계약의 매입과 판매가 101.9-102.1이므로, 두 가지 이차는 전혀 없습니다. 이것은 우리의 전략 최적화에 큰 오해가 될 수 있습니다.

다음으로 촬영 문제, 실제 촬영은 가격 우선, 시간 우선이다. 구매자가 판매 가격을 초과하면 일반적으로 판매 가격을 직접 거래하고 반대로 주문서에 대기합니다. K 라인 데이터는 분명히 구매 판매 가격을 구매하지 않고 모방 할 수없는 세부 수준 촬영입니다.

마지막으로 전략 자체 거래의 영향은 시장에 영향을 미치지 않습니다. 그러나 거래 비중이 큰 경우 시장에 충격을 줄 것입니다. 즉시 거래 할 때 가격 슬라이드 포인트가 큰 것이 아니라, 귀하의 주문을 거래하면 실제로 다른 거래자를 취득하면 나비 효과로 시장에 영향을 줄 것입니다. 이러한 영향은 정량화 될 수 없습니다. 고 빈도 거래가 작은 자금을 수용 할 수 있다고 경험으로만 볼 수 있습니다.

실시간 깊이와 틱에 기반한 재검토

FMZ는 실제 디스크 재검토를 제공하여 실제 역사 20개 파도의 깊이, 실시간 틱초, 페인 트랜잭션 등의 데이터를 얻을 수 있으며, 이를 기반으로리얼 디스크 재생 기능▲ 이러한 리모델링 데이터의 양은 매우 크고, 리모델링 속도는 느리고, 일반적으로 2일만 리모델링할 수 있다. 비교적 높은 주파수 또는 시간 판단에 대한 엄격한 전략에 대해 실기반 리모델링은 필수적이다. FMZ가 수집한 거래 쌍과 시간은 길지 않지만, 700억 개 이상의 역사 데이터가 있다. 현재 촬영 메커니즘은 구매가 판매보다 많으면 즉시 완전히 촬영되지 않고, 판매가 판매보다 작으면 큐에 들어간다. 이러한 리모델링 메커니즘은 K 라인 리모델링의 첫 두 가지 문제를 해결했지만 마지막 문제를 해결하지 못한다. 또한 데이터 측정이 너무 크기 때문에 속도와 시간 범위가 제한되어 있다.

img

주문 흐름에 기반한 회수 메커니즘

K선 정보는 너무 적고 깊이는 가짜 깊이가 될 수도 있지만, 시장의 진정한 거래 의지를 반영하는 가장 진정한 거래 역사를 반영하는 데이터가 있습니다. 이 문서는 주문 흐름에 기반한 고주파 리모터 시스템을 제안하여 실제 디스크 리모터 데이터의 양을 크게 줄이고, 어느 정도 시뮬레이션 트레이딩이 시장에 미치는 영향을 줄일 것입니다.

저는 최근 5천원 XTZ 상속계약의 단환 거래를 다운로드했습니다.https://www.fmz.com/upload/asset/1ff487b007e1a848ead.csv이 자료의 구성에 대해 먼저 살펴보면, 213,000개의 자료가 있습니다.

[['XTZ', 1590981301905, 2.905, 0.4, 'False\n'],
 ['XTZ', 1590981303044, 2.903, 3.6, 'True\n'],
 ['XTZ', 1590981303309, 2.903, 3.7, 'True\n'],
 ['XTZ', 1590981303738, 2.903, 238.1, 'True\n'],
 ['XTZ', 1590981303892, 2.904, 0.1, 'False\n'],
 ['XTZ', 1590981305250, 2.904, 0.1, 'False\n'],
 ['XTZ', 1590981305643, 2.903, 197.3, 'True\n'],

데이터는 두 차원의 목록이며, 거래 시간 순서로 정렬된다. 구체적인 의미는 각각: 품종 이름, 거래 가격, 거래 시간, 거래 수, 판매 주문이 직접 거래되었는지 여부이다. 매매가 있고 매매가 있으며, 매 거래에는 구매자와 판매자가 포함되어 있으며, 구매자가 시장을 만드는 사람이면 판매자가 직접 거래 받는 사람이면 마지막 데이터가 진실이다.

우선 거래 방향에 따라 시장에서 구매와 판매를 상당히 정확하게 추측 할 수 있습니다. 적극적인 판매 주문이 있다면, 이 시기의 구매 가격은 거래 가격이며, 적극적인 구매 주문이 있다면, 판매 가격은 거래 가격이며, 새로운 거래가 있으면 새로운 수표를 갱신하고, 업데이트되지 않은 것은 마지막 결과를 유지합니다.

주문 흐름에 따라 이렇게 촬영할 수 있다: 한 거래의 예를 들어, 가격은 가격, 주문량은 금액, 이 때 사면 구매가 판매가 각각 입찰, 요청이다. 만약 가격이 요청보다 높다면, 먼저 제작자라고 판단하고, 우선 합작 촬영이 가능하며, 이후 주문이 존재하는 시간 동안 모든 거래가 가격보다 낮거나 가격과 동등한 거래가 이 주문과 촬영된다.

이러한 촬영의 문제점 중 하나는, 만약 주문이 태커라면, 실제로는 새로운 주문이 촬영될 때까지 기다리지 않고 즉시 거래가 가능하다는 것을 쉽게 볼 수 있다. 첫째, 우리는 디스플레이 화면 수를 고려하지 않고, 데이터가 있더라도, 직접적인 판단은 거래의 깊이를 변화시켜 시장에 영향을 미칩니다. 그리고 새로운 주문에 기반한 촬영은, 역사의 실제 주문을 당신의 주문으로 대체하는 것과 같으며, 어쨌든 시장 자체의 거래의 한계를 초과하지 않으며, 최종 수익은 최대 수익을 초과할 수 없습니다. 일부 촬영 메커니즘은 또한 주문의 거래량에 영향을 미치고, 수익 전략에 영향을 미치고, 양은 전략 용량을 반영합니다. 전통적인 측정이 없을 것이고, 자금의 두 배가 수익을 두 배로 증가시키는 상황이 발생할 것입니다.

또 다른 작은 세부 사항은, 만약 주문 구매가격이 구매가격과 같다면, 실제로는 여전히 구매가격이 촬영될 확률이 있는 것으로, 주문의 우선순위와 거래의 확률 등을 고려해야 하는 것이 더 복잡하고, 여기서 고려되지 않는다.

코드 촬영

거래소 객체는 초기의 소개를 참조할 수 있으며, 기본적으로 변경되지 않고, 오직 메이커와 테이커 수수료의 차이를 추가하고, 재검토 속도를 최적화했다. 아래는 주로 촬영 코드를 소개한다.

    symbol = 'XTZ'
    loop_time = 0
    intervel = 1000 #策略的休眠时间为1000ms
    init_price = data[0][2] #初始价格
    e = Exchange([symbol],initial_balance=1000000,maker_fee=maker_fee,taker_fee=taker_fee,log='') #初始化交易所
    depth = {'ask':data[0][2], 'bid':data[0][2]} #深度
    order = {'buy':{'price':0,'amount':0,'maker':False,'priority':False,'id':0},
             'sell':{'price':0,'amount':0,'maker':False,'priority':False,'id':0}} #订单
    for tick in data:
        price = int(tick[2]/tick_sizes[symbol])*tick_sizes[symbol] #成交价格
        trade_amount = tick[3] #成交数量
        time_stamp = tick[1] #成交时间戳
        if tick[4] == 'False\n':
            depth['ask'] = price
        else:
            depth['bid'] = price
        
        if depth['bid'] < order['buy']['price']:
            order['buy']['priority'] = True
        if depth['ask'] > order['sell']['price']:
            order['sell']['priority'] = True
        if price > order['buy']['price']:
            order['buy']['maker'] = True
        if price < order['sell']['price']:
            order['sell']['maker'] = True
        
        #订单网络延时也可以作为撮合条件之一,这里没考虑
        cond1 = order['buy']['priority'] and order['buy']['price'] >= price and order['buy']['amount'] > 0
        cond2 = not order['buy']['priority'] and order['buy']['price'] > price and order['buy']['amount'] > 0
        cond3 = order['sell']['priority'] and order['sell']['price'] <= price and order['sell']['amount'] > 0
        cond4 = not order['sell']['priority'] and order['sell']['price'] < price and order['sell']['amount'] > 0

        if cond1 or cond2:
            buy_price = order['buy']['price'] if order['buy']['maker'] else price
            e.Buy(symbol, buy_price, min(order['buy']['amount'],trade_amount), order['buy']['id'], order['buy']['maker'])
            order['buy']['amount'] -= min(order['buy']['amount'],trade_amount)
            e.Update(time_stamp,[symbol],{symbol:price})
        if cond3 or cond4:
            sell_price = order['sell']['price'] if order['sell']['maker'] else price
            e.Sell(symbol, sell_price, min(order['sell']['amount'],trade_amount), order['sell']['id'], order['sell']['maker'])
            order['sell']['amount'] -= min(order['sell']['amount'],trade_amount)
            e.Update(time_stamp,[symbol],{symbol:price})

        if time_stamp - loop_time > intervel:
            order = get_order(e,depth,order) #交易逻辑,这里未给出
            loop_time += int((time_stamp - loop_time)/intervel)*intervel

이 글은 한 가지 다른 내용에 대해 설명합니다.

  • 1.当有新成交时,要先去撮合订单,再去根据最新的价格去下单。
  • 2.每个订单都有两个属性:maker——是否为maker,priority——撮合优先级,以买单为例,当买价小于卖一,标记为maker,当买价大于买一是标记为优先撮合,priority决定了价格等于买价是是否撮合,maker决定了手续费。
  • 3.订单的maker和priority是更新的,如下了一笔很大的超过盘口的买单,当出现一个价格大于买价时,此时剩余的成交量将是maker。
  • 4.策略的intervel是必须的,它可以代表行情的延时。

네트워크 전략의 재검토

마침내 실제 재검토 단계에 이르렀을 때, 우리는 여기서 가장 고전적인 네트워크 전략을 재검토하여 예상된 효과를 얻었는지 보려고 합니다. 전략 원칙은 가격 상승에 1%씩씩씩, 우리는 특정 가치의 빈 목록을 (반대의 여러 주문을 보유하는 것) 가지고 있고, 구매권과 판매권을 미리 붙여서 계산합니다. 코드는 방출되지 않습니다. 모든 코드를 포장합니다.Grid('XTZ',100,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)함수에서, 매개 변수는 각각: 거래 쌍, 가격 오차 1%의 보유 가치, 연결 고리 밀도 0.3%, 휴면 간격 ms, 연결 고리 수수료, 연결 고리 수수료.

최근 5일 동안 XTZ 시장은 격동기에 위치해 있으며, 에 적합합니다.img

우리는 먼저 다른 보유 크기의 수익에 대한 영향을 재검토합니다. 전통적인 재검토 메커니즘에서 재검토 된 수익은 보유가 증가함에 따라 증가 할 것입니다.

e1 = Grid('XTZ',100,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e1.account['USDT'])
e2 = Grid('XTZ',1000,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e2.account['USDT'])
e3 = Grid('XTZ',10000,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e3.account['USDT'])
e4 = Grid('XTZ',100000,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e4.account['USDT'])

총 4개의 집합을 100,1000,10000,100000, 및 1.3s의 재검토로 재검토하였다. 결과는 다음과 같다:

{'realised_profit': 28.470993031132966, 'margin': 0.7982662957624465, 'unrealised_profit': 0.0104554474048441, 'total': 10000028.481448, 'leverage': 0.0, 'fee': -0.3430967859046398, 'maker_fee': -0.36980249726699727, 'taker_fee': 0.026705711362357405}
{'realised_profit': 275.63148945320177, 'margin': 14.346335829979132, 'unrealised_profit': 4.4382117331794045e-14, 'total': 10000275.631489, 'leverage': 0.0, 'fee': -3.3102045933457784, 'maker_fee': -3.5800688964477048, 'taker_fee': 0.2698643031019274}
{'realised_profit': 2693.8701498889504, 'margin': 67.70120400534114, 'unrealised_profit': 0.5735269329348516, 'total': 10002694.443677, 'leverage': 0.0001, 'fee': -33.984021415250744, 'maker_fee': -34.879233866850974, 'taker_fee': 0.8952124516001403}
{'realised_profit': 22610.231198585603, 'margin': 983.3853688758861, 'unrealised_profit': -20.529965947304365, 'total': 10022589.701233, 'leverage': 0.002, 'fee': -200.87094000385412, 'maker_fee': -261.5849078470078, 'taker_fee': 60.71396784315319}

최종적으로 달성된 이익은 각각 보유 가치의 28.4%, 27.5%, 26.9%, 22.6%로 볼 수 있다. 이것은 실제 상황과도 일치한다. 보유 가치가 커질수록, 기재 가치가 커질수록 일부 거래가 발생할 가능성이 높고, 최종적으로 달성된 수익은 기재량에 비해 작다. 아래 그림은 보유 가치는 각각 100과 10000의 상대적 수익 대비입니다.img

우리는 또한 다른 매개 변수들이 연결 밀도, 휴면시간, 처리 비용 등과 같은 휴식시간의 수익에 미치는 영향을 재검토할 수 있다. 예를 들어, 휴식시간을 100ms로 바꾸고 휴식시간을 1000ms로 대입하여 수익을 볼 수 있다. 재검토 결과는 다음과 같다.

{'realised_profit': 29.079440803790423, 'margin': 0.7982662957624695, 'unrealised_profit': 0.0104554474048441, 'total': 10000029.089896, 'leverage': 0.0, 'fee': -0.3703702128662524, 'maker_fee': -0.37938946377435134, 'taker_fee': 0.009019250908098965}

수익은 어느 정도 향상되었는데, 이는 전략이 하나의 주문집단만을 붙여서 어떤 주문들이 변화하기 때문에 가격의 변동을 먹을 수 없는 경우가 있을 것이기 때문에, 휴식시간을 줄이는 것이 이 문제를 개선했다. 이것은 또한 네트워크 전략이 여러 개의 주문집단을 붙여주는 것의 중요성을 보여준다.

요약

이 혁신은 주문 흐름에 기반한 새로운 리모테이션 시스템을 제안하며, 부분적으로 예약, 주문, 일부 거래, 지연 등의 촬영 상황을 모방할 수 있으며, 부분적으로 전략 자금의 수익에 대한 영향을 반영하고, 고주파 전략과 헤지징 전략에 중요한 참조 가치를 가지고 있으며, 높은 정확도의 리모테이션은 전략 매개 변수 최적화를 위한 방향을 제시하고 있으며, 장기적으로 실무 검증을 받았으며, 리모테이션이 필요한 데이터의 양을 더 잘 제어하고, 리모테이션 속도가 매우 빠르다.


관련

더 많은

아마도전략적 원칙은 가격 상승에 1%입니다. 얼마나 오래 걸리죠?

아마도전략적 원칙은 가격 상승에 1%입니다. ------------------- 얼마나 오래 걸리죠?

설교지표는 모두 GB에 올라갔어요.

다시이 자료의 양은 얼마나 많은데, 웹사이트가 받아들여졌나요?

초목/upload/asset/1ff487b007e1a848ead.csv

초목이 방식은 아주 좋지만, 깊이 있는 리모델링은 너무 많습니다.

초목실제 거래량보다 훨씬 작습니다. 거래의 바쁜 정도를 보면 하루에 1M~20M입니다.