Les défauts du système de retouche haute fréquence basé sur les transactions à la lettre et de la retouche K-line

Auteur:Le foin, Créé: 2020-06-04 16:48:02, Mis à jour: 2023-10-08 19:46:18

img

Je suisLa stratégie de couverture de la monnaie est de faire des super-hauts et des super-bas.Le premier rapport, basé sur un test K-Line d'une heure, a confirmé l'efficacité de la stratégie. Cependant, le temps de sommeil de la stratégie publique actuelle est de 1s, une stratégie assez fréquente, et le test K-Line d'une heure n'a manifestement pas donné de résultats précis. Il a été ajouté plus tard.Retour sur la ligne des minutesEn conséquence, les gains de retouche sont considérablement améliorés, mais il n'est toujours pas possible de déterminer quels paramètres devraient être utilisés dans les conditions de seconde, et la compréhension de l'ensemble de la stratégie n'est pas très claire.

Problème basé sur la résonance de la ligne K

Tout d'abord, qu'est-ce qu'une ligne K historique? Une ligne K contient les quatre prix, les deux temps de début et les transactions intermédiaires. La plupart des plates-formes et des frameworks de quantification sont basés sur la rétroaction de la ligne K. La plate-forme de quantification FMZ fournit également une rétroaction de niveau tick.

Tout d'abord, il y a le problème du temps, le moment où les prix les plus élevés et les prix les plus bas des données K sont donnés, ne sont pas pris en compte, mais le prix d'ouverture et de clôture le plus important n'est pas le moment où les prix d'ouverture et de clôture commencent. Même les variétés de transactions moins froides ne sont souvent pas négociées pendant une dizaine de secondes.

Imaginons que l'on utilise une ligne de minute pour retracer les intérêts de deux variétés, dont la différence est généralement de 10 dollars, et que l'on découvre à 10h01 que le prix de clôture du contrat A est de 100 dollars, le prix de clôture du contrat B est de 112 dollars, la différence est de 12 dollars.

Il est impossible de savoir quel est le prix de l'échange à ce moment-là, quel est le décalage que la couverture peut atteindre. Une situation possible est la suivante: à 10h00:58, le prix de l'échange d'un contrat A est de 101,9 à 102,1 et il n'y a pas de décalage du tout. Cela peut être très trompeur pour notre stratégie d'optimisation.

Ensuite, il y a le problème de la prise de vue, la prise de vue réelle est prioritaire au prix, le temps est prioritaire. Si l'acheteur dépasse le prix de vente, il est généralement directement transait au prix de vente, au lieu de cela, il entre dans le registre des commandes en attente.

Enfin, l'impact de la stratégie elle-même sur le marché, si c'est une petite somme d'argent, n'a pas beaucoup d'impact. Mais si le pourcentage de transactions est élevé, il y aura un choc sur le marché. Ce n'est pas seulement une transaction immédiate, mais le point d'escalade sera grand.

Retouche basée sur la profondeur et les ticks en temps réel

FMZ fournit une retouche à disque réel, permettant d'obtenir des données historiques réelles de 20 degrés de profondeur, de ticks de seconde en temps réel, de transactions par pioche, etc.Fonction de lecture de disque; le volume de données de retouche de ce type est extrêmement important et le taux de retouche est lent, et ne peut généralement être retouché que pendant deux jours. Pour des stratégies de fréquence relativement élevée ou exigeant un jugement strict sur le temps, le retouche à l'échelle du disque est indispensable. FMZ ne collecte pas de paires de transactions et de temps longs, mais il y a plus de 70 milliards de données historiques.

img

Un mécanisme de retouche basé sur le flux de commandes transactionnelles

Il y a peu d'informations sur la ligne K, et la profondeur peut aussi être fausse, mais il y a une donnée qui est la volonté de transaction réelle du marché, qui reflète le plus réel de l'histoire de la transaction, c'est-à-dire la transaction à la lettre.

J'ai téléchargé la dernière transaction de 5 jours pour XTZ, un contrat à durée indéterminée.https://www.fmz.com/upload/asset/1ff487b007e1a848ead.csvIl y a 213 000 données en tout, mais regardez la composition des données:

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

Les données sont des listes bidimensionnelles, classées par ordre de temps de transaction. Les significations spécifiques sont les suivantes: nom de la variété, prix de transaction, date de transaction, nombre de transactions, ou si la transaction a été effectuée.

Tout d'abord, en fonction de la direction de la transaction, il est possible de supposer avec une grande précision que le prix d'achat et de vente sur le marché, si c'est un ordre de vente actif, alors le prix d'achat à ce moment-là est le prix de la transaction, si c'est un ordre d'achat actif, alors le prix de vente est le prix de la transaction, une nouvelle transaction met à jour le nouveau tableau, le résultat de la dernière fois n'est pas mis à jour. Il est facile de lancer les données ci-dessus au dernier moment, un prix d'achat est de 2.903, un prix de vente est de 2.904.

Selon le flux d'ordres, il peut être pris comme suit: par exemple, un achat, le prix est le prix, la quantité de commande est la quantité, à ce moment-là, le plateau acheter et vendre un bid, ask. Si le prix est inférieur à la demande est supérieur à la demande, il est d'abord jugé comme le fabricant, et la priorité peut être prise pour la transaction, puis tous les prix de transaction inférieurs ou égaux au prix de la commande dans le temps d'existence de l'ordre doivent être pris avec cette commande.

Il est facile de voir un problème avec ce type de prise de vue, si l'ordre est le preneur, la réalité est de pouvoir effectuer une transaction immédiatement, plutôt que d'attendre que de nouvelles commandes soient prises. Tout d'abord, nous n'avons pas pris en compte le volume de l'ordre sur le plateau, même s'il y a des données, le jugement direct de la transaction a également changé de profondeur et a affecté le marché.

Il y a aussi quelques petits détails, si le prix d'achat de l'ordre est égal à celui d'un achat, il y a en fait encore une certaine probabilité que le prix d'achat soit pris, il faut prendre en compte la priorité de l'ordre et la probabilité de transaction, etc.

Prenez le code

L'objet de l'échange peut se référer à l'introduction initiale, essentiellement inchangée, avec seulement l'ajout de la différence entre les frais de fabrication et les frais de réception, ainsi qu'une vitesse de retouche optimisée. Le code principal de prise de vue sera présenté ci-dessous.

    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

Il y a quelques détails à prendre en compte:

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

Retour sur la stratégie de grille

Enfin, à la phase de retouche pratique, nous avons retouché une des stratégies les plus classiques du réseau pour voir si l'effet escompté a été atteint. Le principe de la stratégie est que pour chaque hausse de prix de 1%, nous gardons une liste vide d'une certaine valeur (à l'inverse, nous avons plusieurs commandes), nous calculons les bons de vente et les bons de vente.Grid('XTZ',100,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)Dans la fonction, les paramètres sont les suivants: paire de transactions, déviation de prix de 1% par rapport à la valeur de détention, densité de blocage de 0,3%, intervalle de sommeil ms, frais de blocage, frais de blocage de repas.

Le XTZ est en pleine période de bouleversement depuis 5 jours, ce qui lui permet de s'adapter à la grille.img

Nous examinons d'abord l'impact des différentes tailles de titres sur les gains, et les gains retracés par les mécanismes de retracement traditionnels augmentent certainement avec l'augmentation des titres.

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

Au total, quatre groupes ont été retestés, avec des valeurs de stockage de 100, 1000, 10000, 100000, respectivement.

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

On peut voir que le profit finalement réalisé est respectivement de 28,4%, 27,5%, 26,9% et 22,6% de la valeur des stocks. Ceci est également conforme à la réalité, plus la valeur des stocks est grande, plus la valeur des enchères est grande, plus il est probable qu'il y ait une transaction partielle, et les bénéfices finalement réalisés par rapport au volume des enchères sont également plus petits.img

Nous pouvons également retester l'impact de différents paramètres sur les gains de retouche, tels que la densité des connexions, le temps de sommeil, les frais de traitement, etc. Par exemple, le temps de sommeil peut être modifié en 100 ms, contre 1000 ms de temps de sommeil, pour voir les gains. Les résultats du retouche sont les suivants:

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

Les bénéfices sont quelque peu améliorés, car la stratégie ne suspend qu'un seul ensemble d'ordres, et il y a des ordres qui ne peuvent pas être consommés en raison de la volatilité des prix, et une réduction des heures de sommeil améliore ce problème. Cela montre également l'importance de la stratégie de grille pour suspendre plusieurs groupes d'ordres.

Résumé

L'innovation présente un nouveau système de retouche basé sur le flux d'ordres, qui peut partiellement simuler les situations de prise de vue de l'annonce, de la commande, de la transaction, du retard, etc., qui reflète en partie l'impact du montant des fonds stratégiques sur les bénéfices, qui a une valeur de référence importante pour les stratégies à haute fréquence et les stratégies de couverture. Le retouche de haute précision indique la direction pour optimiser les paramètres stratégiques.


Relationnée

Plus de

Peut-êtreLe principe stratégique est de 1% pour chaque hausse de prix. Combien de temps pour augmenter de 1%?

Peut-êtreLe principe stratégique est de 1% pour chaque hausse de prix. Je ne sais pas. Combien de temps pour augmenter de 1%?

l' homélieL'index est en GB.

Je vous en prie.Le site Web a-t-il accepté cette quantité de données?

Le foin/upload/asset/1ff487b007e1a848ead.csv Il est possible de télécharger le fichier

Le foinC'est une bonne méthode de retouche, mais les retouches en profondeur sont trop nombreuses.

Le foinLes transactions sont beaucoup moins fréquentes que les transactions réelles, 1M à 20M par jour.