Schwachstellen von Hochfrequenz-Rückmeldungssystemen und K-Linien-Rückmeldung auf Basis von Transaktionen pro Stück

Schriftsteller:Das Gras, Erstellt: 2020-06-04 16:48:02, aktualisiert: 2023-10-08 19:46:18

img

Ich binBinance ist eine Strategie, um Geld zu übersteigen und zu übersteigen.Die Erstberichterstattung über die Wirksamkeit der Strategie basierte auf einer einstündigen K-Linien-Rückmeldung. Aber die tatsächliche öffentliche Strategie für die Ruhezustandzeit von 1s, eine ziemlich hochfrequente Strategie, ergab offensichtlich keine genauen Ergebnisse mit stündlichen K-Linien-Rückmeldungen.Minutelinie-RückgabeDas Ergebnis ist, dass die Retest-Erträge viel verbessert werden, aber es ist immer noch unklar, welche Parameter in Sekundenzonen verwendet werden sollten, und es ist nicht klar, welche Strategie insgesamt verstanden wird.

K-Linien-Rückkopplungsprobleme

Zunächst einmal, was ist eine historische K-Linie? Eine K-Linie Daten enthält vier Preise, zwei Anfängszeiten und Intervall-Transaktionen. Die meisten Quantifizierungsplattformen und -rahmen sind auf K-Linie Retesting basiert, FMZ-Quantifizierungsplattformen bieten auch Ticke-Level-Retesting.

Zunächst ist es ein Problem der Zeit, die höchsten und niedrigsten Preise der K-Daten sind nicht angegeben und nicht berücksichtigt, aber die wichtigsten Öffnungs- und Schlusskursbeginn sind nicht die Öffnungs- und Schlusskurszeit. Selbst die weniger kühlen Handelssorten bleiben oft für mehrere Sekunden ohne Handel.

Stellen Sie sich vor, Sie würden die Differenz zwischen zwei Arten, die normalerweise 10 US-Dollar teilen, mit einer Minute-Linie rückverfolgen. Und jetzt wird festgestellt, dass A-Kontrakte zu 100 US-Dollar und B-Kontrakte zu 112 US-Dollar geschlossen sind.

Die tatsächliche Situation könnte sein, dass am 10.00:45 A ein 100-Dollar-Geschäft erfolgt, danach kein Geschäft stattfindet, und dass der Vertrag B am 10.00:58 ein 112-Dollar-Geschäft stattfindet, an dem Moment, an dem beide Preise nicht vorhanden sind.

Der zweite ist das Problem der Aufnahme, bei der die tatsächliche Aufnahme Preis und Zeit vorrangig ist. Wenn ein Käufer den Verkaufspreis übersteigt, wird er im Allgemeinen direkt mit einem Verkaufspreis verhandelt, stattdessen in die Warteschlange des Auftragsbuchs.

Schließlich ist die Strategie selbst die Auswirkungen der Transaktionen auf den Markt, wenn es sich um kleine Kapitalrücksendungen handelt, keine große Wirkung. Aber wenn der Anteil der Transaktionen groß ist, wird es einen Schlag auf den Markt haben. Nicht nur, wenn die Transaktionen sofort abgewickelt werden, wird der Preisanstieg groß sein.

Rechner basierend auf Echtzeit Tiefe und Tick

FMZ bietet eine reelle Datenträger-Rücksicht, die in der Lage ist, auf echte historische 20-Bild-Tiefe, Echtzeit-Sekunden-Tick, Transaktionen pro Stück und andere Daten zuzugreifen, und basiert darauf.Funktion für die FestplattenwiedergabeEine solche Rückmessung ist sehr groß und sehr langsam und kann in der Regel nur zwei Tage dauern. Für relativ hohe Frequenzen oder eine strengere Zeitbestimmung ist eine Rückmessung auf der echten Scheibe notwendig. Die FMZ sammelt keine langen Paare und Zeiten, aber auch mehr als 70 Milliarden historische Daten. Der derzeitige Rückschaffungsmechanismus ist so, dass bei einem Kauf, der größer ist als ein Verkauf, nicht sofort vollständig abgebildet wird, und wenn ein Verkauf kleiner ist als ein Verkauf, der in die Schlange kommt.

img

Rückwertmechanismen basierend auf dem Stück-für-Stück-Auftragsfluss

Die K-Linien sind zu wenig informiert und die Tiefe kann auch eine falsche Tiefe sein, aber es gibt eine Art von Daten, die die tatsächliche Handelsbereitschaft des Marktes widerspiegeln und die die authentischste Handelsgeschichte widerspiegeln.

Ich habe den jüngsten 5-Tage-XTZ-Permanent-Contract heruntergeladen.https://www.fmz.com/upload/asset/1ff487b007e1a848ead.csvIn der Tat ist es eine sehr schwierige Zeit, um die Daten zu erfassen, aber es gibt eine Reihe von Möglichkeiten, wie man sie analysiert.

[['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'],

Die Daten sind eine zweidimensionale Liste, die in der Reihenfolge der Transaktionszeit sortiert wird. Die spezifischen Bedeutungen sind: Sortennamen, Transaktionspreise, Transaktionszeiten, Transaktionszahlen, ob die Transaktionen aktiv getätigt wurden.

Zunächst nach der Transaktionsrichtung kann man ziemlich genau davon ausgehen, ob es sich um einen Kauf und einen Verkauf auf dem Markt handelt. Wenn es sich um einen aktiven Verkaufsbefehl handelt, ist der Kaufpreis der Transaktionspreis, wenn es sich um einen aktiven Kaufbefehl handelt, ist der Verkaufspreis der Transaktionspreis.

Je nach Auftragsfluss kann man so fotografieren: Bei einem Auftrag zum Beispiel ist der Preis der Preis, die Auftragsmenge der Menge, bei dem die Platte jeweils als Bid, Ask, Kauf und Verkauf bezeichnet wird. Wenn der Preis niedriger als der Ask ist, wird zuerst als Maker beurteilt, und es kann vorrangig zusammengefasst werden. Danach werden alle Transaktionen mit einem Preis von weniger als oder gleich dem Preis des Bestellungsverlaufs in der Bestellzeit fotografiert.

Es ist leicht zu sehen, dass ein Problem mit dieser Aufnahme besteht, wenn der Auftrag ein Taker ist, der in der Praxis sofort abgewickelt werden kann, anstatt auf einen neuen Auftrag zu warten. Zunächst betrachten wir nicht die Aufschlagsmenge, auch wenn es Daten gibt, um direkt zu beurteilen, dass die Transaktion die Tiefe verändert und den Markt beeinflusst.

Es gibt noch einige kleine Details, wenn der Kaufpreis des Auftrages gleich einem Kauf ist, gibt es tatsächlich noch eine gewisse Wahrscheinlichkeit, dass ein Kaufpreis aufgenommen wird, wobei die Priorität der Aufträge und die Transaktionswahrscheinlichkeit berücksichtigt werden müssen, die hier nicht berücksichtigt werden.

Code aufnehmen

Die Börsenobjekte können auf die Anfangsanleitung verwiesen werden, grundsätzlich unverändert, nur die Unterschiede zwischen Maker- und Taker-Verfahren hinzugefügt und die Geschwindigkeit der Wiederholung optimiert.

    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

Einige Details sind zu beachten:

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

Überprüfung der Netzstrategie

Schließlich ist es an der tatsächlichen Testphase, wo wir hier eine der klassischsten Netzstrategien überprüfen, um zu sehen, ob die erwarteten Effekte erzielt werden. Die Strategie ist, dass wir bei jedem Preisanstieg um 1% einen leeren Bestellungsbeitrag von einem bestimmten Wert halten (im Gegensatz dazu mehrere Bestellungen), die Verkaufs- und Verkaufsbeweise im Voraus berechnen und hängen.Grid('XTZ',100,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)In der Funktion sind die Parameter: Handelspare, Preis-Abweichung von 1% zum Haltenwert, Hanging-Densität von 0.3%, Ruhezwischenzeit ms, Hanging-Task-Gebühr, Eating-Task-Gebühr.

In den letzten fünf Tagen war die XTZ-Branche in einer erschütternden Phase und passte gut zum Netz.img

Wir analysieren zunächst die Auswirkungen unterschiedlicher Lagergrößen auf die Erträge, und die Erträge, die durch die herkömmlichen Rückwertmechanismen analysiert werden, werden sicherlich mit zunehmenden Lagerbeständen steigen.

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'])

Es wurden insgesamt vier Gruppen mit Lagerwerten von 100, 1000, 10000, 100000 und 1,3 s im Gesamtverbrauch nachgeprüft.

{'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}

Man kann sehen, dass der endgültig erzielte Gewinn 28,4%, 27,5%, 26,9% und 22,6% des Bestandswerts beträgt. Dies entspricht auch der Praxis, je größer der Bestandswert, je größer der Wert der Aufträge, desto wahrscheinlicher ist ein Teil der Transaktion, und der endgültig erzielte Gewinn ist im Verhältnis zur Anzahl der Aufträge geringer.img

Wir können auch die Auswirkungen verschiedener Parameter auf die Rechercheergebnisse, wie Aufhängungsdichte, Ruhezustand, Prozedurenkosten usw. rücktesten.

{'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}

Die Erlöse sind etwas besser, da die Strategie nur eine Reihe von Bestellungen hängt, und einige Bestellungen werden aufgrund von unsicheren Preisschwankungen nicht essen können, und die reduzierte Schlafzeit verbessert das Problem. Dies zeigt auch, wie wichtig die Netzstrategie ist.

Zusammenfassung

Diese Innovation stellt ein neues, auf dem Bestellfluss basierendes Retrospektivsystem vor, das die Aufnahme von Aufträgen, Bestellungen, Transaktionen, Verzögerungen usw. teilweise simuliert, teilweise die Auswirkungen von Strategiefinanzierung auf die Erträge widerspiegelt, wichtige Referenzwerte für Hochfrequenz- und Hedging-Strategien bietet, hochaufgeklärte Retrospektive gibt eine Richtung für die Optimierung von Strategieparametern.


Verwandt

Mehr

Vielleicht.Die Strategie lautet 1% pro Preisanstieg. Wie lange dauert die Steigerung um 1%?

Vielleicht.Die Strategie lautet 1% pro Preisanstieg. - Ich weiß nicht. Wie lange dauert die Steigerung um 1%?

PredigtDie Index sind alle in GB.

Siehe auchWie groß ist die Datenmenge und ist die Website überzeugt?

Das Gras/upload/asset/1ff487b007e1a848ead.csv

Das GrasDas ist eine gute Methode, aber es gibt zu viele Daten mit tiefen Rückmessungen.

Das GrasDas ist viel kleiner als die realen Platten-Rückmeldungen, wenn man sich die Geschäfte anschaut: 1M-20M pro Tag.