Stratégie de flux de commandes en attente linéaire développée sur la base de la fonction de lecture des données

Auteur:Je ne sais pas., Créé: 2022-12-23 20:06:04, Mis à jour: 2023-09-20 09:41:28

img

Stratégie de flux de commandes en attente linéaire développée sur la base de la fonction de lecture des données

Préface

On dit souvent que le trading est un art, et que l'art vient de l'inspiration.

L'inspiration et le sentiment du marché du trading

Ce que nous appelons habituellement l'inspiration fait référence à l'état créatif que les gens produisent dans le processus de pensée. Pour les traders, notre hémisphère gauche de notre cerveau a terminé la formulation d'une série de règles telles que la rédaction de stratégie, l'allocation de capital et le réglage des paramètres.

Beaucoup de gens ont entendu parler du mot " sentiment de marché ", qui est une sorte de sentiment vague, comme un déjà vu de ce qui se passe en ce moment. Bien que ce sixième sens comme l'intuition dans le trading ne soit pas raisonné et analysé logiquement, l'anticipation de la tendance future du marché incitera les traders à prendre des décisions d'achat ou de vente.

Comment trouver l'inspiration

Dans les yeux d'un profane, le sentiment de marché est mystérieux. C'est un talent mystérieux. Avec lui, vous pouvez vous tenir sur le marché. En fait, c'est un résumé de l'expérience subjective de trading par le cerveau. C'est un vague sentiment de préjugé réalisé à travers des années de surveillance du marché.

Bien que strictement parlant, l'inspiration n'est pas exactement la même chose que le sentiment du marché, nous croyons qu'après des milliers de fois de raffinement du marché, nous aurons une compréhension plus profonde du marché, et nous serons en mesure de développer des stratégies avec facilité.

Cependant, les contrats à terme sur matières premières et les actions ont seulement quelques heures de temps de négociation par jour, il serait donc accablant d'améliorer son expérience de surveillance du marché, de former ses propres modèles de profit et règles de négociation, et d'entraîner ses réflexes conditionnés subconsciemment uniquement à partir du trading en direct.

Comment utiliser la lecture des données

La fonction de lecture des données peut être entraînée indépendamment des heures de négociation de l'échange, et elle prend en charge une variété de contrats à terme sur matières premières et de variétés de devises numériques. Le marché peut être joué manuellement ou automatiquement, et l'heure de début et de fin et la vitesse de lecture du marché historique peuvent être librement réglées.

Ouvrez le site officiel de la FMZ Quant (fmz.comIl y a quatre cases d'options et un bouton de sélection. Tout d'abord, cliquez sur le bouton de sélection pour afficher uniquement les variétés qui prennent en charge la lecture de robots réels, puis sélectionnez les variétés à lire en haut à gauche, puis sélectionnez l'heure de début et de fin des données dans les deux cases d'options suivantes, puis sélectionnez la période de temps des données comme lecture de robots réels, et enfin cliquez sur le bouton Go à l'extrême droite pour démarrer la fonction de lecture de données.

img

Il y a trois sections sous l'étiquette de données. Sur la gauche se trouve l'historique des transactions, où tous les ordres qui ont été fermés sont affichés dans l'ordre chronologique. Au milieu se trouve la profondeur de 20 positions de chaque ordre d'achat et de vente. Sur la droite se trouve la zone de contrôle de la lecture des données, où vous pouvez sélectionner les méthodes de lecture manuelle et automatique des données, tout comme en utilisant un lecteur multimédia.

img

L'index de position peut faire glisser le curseur d'avant en arrière de gauche à droite, vous permettant de sélectionner rapidement l'heure de début de la lecture des données.

img

La vitesse de lecture des données peut également être contrôlée en bas en déplaçant le curseur de droite à gauche, en millisecondes, pour accélérer et ralentir les données pendant la lecture.

img

Construire une stratégie logique

Bien qu'il existe de nombreux facteurs qui influencent l'augmentation et la diminution du prix, y compris l'environnement économique mondial, les politiques macro nationales, les politiques industrielles pertinentes, les relations d'offre et de demande, les événements internationaux, les taux d'intérêt et les taux de change, l'inflation et la déflation, la psychologie du marché, les facteurs inconnus, etc., le prix final sur le marché est le résultat de la concurrence entre diverses parties et du côté de la position courte. Si plus de gens achètent que de vendre, le prix augmentera; au contraire, si plus de gens vendent que d'acheter, le prix diminuera.

Grâce à la lecture FMZ Quant des derniers mois des paires de trading BTC_USDT de l'échange Binance, nous avons constaté que lorsque le marché augmentait et diminuait fortement, le carnet d'ordres des données Tick est clairement asymétrique en termes de volume d'ordres entre les positions longues et courtes. Lorsque le marché augmente, le nombre d'ordres longs est évidemment plus grand que le nombre d'ordres courts; Lorsque le marché augmente, le nombre d'ordres courts est évidemment plus grand que le nombre d'ordres longs. Pouvons-nous donc prédire l'augmentation et la diminution du prix dans une courte période en fonction du volume d'ordres en attente dans le carnet d'ordres?

La réponse est oui.

img

Lorsque le marché augmente, le nombre d'ordres longs est évidemment supérieur au nombre d'ordres courts.

img

Lorsque le marché est en déclin, le nombre d'ordres courts est évidemment supérieur à celui des ordres longs.

Nous pouvons collecter des données Tick approfondies pour calculer les ordres en attente longs et courts et les comparer, si les ordres en attente longs et courts combinés sont très différents, cela peut être une opportunité de trading potentielle. Par exemple, lorsque le nombre d'ordres de position longue est N fois celui des ordres de position courte, nous pouvons penser que la plupart des gens sur le marché sont haussiers et que la probabilité d'une hausse des prix augmentera dans un court laps de temps à l'avenir; Lorsque le nombre de vendeurs à découvert est N fois celui des vendeurs à découvert, nous pouvons penser que la plupart des gens sur le marché sont baissiers et que la probabilité de baisse des prix augmentera dans un proche avenir.

Écrire une stratégie de trading

Selon la logique de stratégie ci-dessus, il commence à être implémenté dans le code.fmz.com> Connexion > Tableau de bord > Stratégie > Ajouter une stratégie > Cliquez sur le menu déroulant dans le coin supérieur droit pour sélectionner le langage Python et commencer à écrire des stratégies.

Étape 1: Écrire le cadre stratégique

# 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

Nous devrions écrire notre stratégie de grande à petite, comme pour construire une maison, construire le cadre d'abord et ensuite le mur. Dans ce cadre, nous utilisons deux fonctions: la fonction principale et la fonction onTick. La fonction principale est l'entrée du programme, c'est-à-dire que le programme s'exécutera à partir de là, puis entre dans le mode boucle infinie, et exécute la fonction onTick à plusieurs reprises. Ensuite, nous devons simplement écrire le contenu de la stratégie dans la fonction onTick.

Étape 2: Écrire des variables globales

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

La raison pour laquelle vol_ratio_arr est défini comme une variable globale, c'est parce que ma stratégie a besoin de recueillir le rapport entre les commandes en attente de positions longues et courtes d'un morceau de données Tick. Si nous mettons la variable vol_ratio_arr dans la fonction onTick, il est évidemment déraisonnable d'exécuter avec la boucle. Ce dont nous avons besoin est de changer la valeur de la variable en mode boucle lorsqu'une certaine condition est remplie. La façon la plus raisonnable est de mettre la variable en dehors de la boucle.

La gestion de position est très nécessaire, car elle est liée à la logique de trading. Généralement, nous calculons les paires de devises détenues en acquérant des comptes dans les transactions au comptant. Afin de simplifier le code, une variable de position virtuelle globale est directement définie pour contrôler la logique de trading.

Étape 3: Calculer le rapport de vide multiple actuel

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

Comme nous le savons tous, la monnaie numérique est généralement composée de 20 niveaux de données profondes, nous pouvons donc additionner le nombre d'ordres de positions longues et courtes pour calculer le rapport entre les positions longues et courtes. Lorsque cette valeur est supérieure à 1, cela signifie que les personnes haussières sont plus grandes que les personnes baissières, ce qui indique que le prix augmentera dans un court laps de temps à l'avenir; lorsque cette valeur est inférieure à 1, cela signifie que les personnes baissières sont plus grandes que les personnes haussières, ce qui indique que le prix diminuera dans un court laps de temps à l'avenir.

Cependant, il y a un point à distinguer. Plus l'ordre en attente est proche du marché d'ouverture, plus le désir de hausse ou de berish sera fort. Par exemple, l'ordre du premier niveau est certainement plus disposé à hausser que celui du 20e niveau. Par conséquent, lorsque nous accumulons les ordres en attente, nous devons donner des poids différents aux ordres des 20 niveaux de manière linéaire, ce qui sera plus raisonnable.

Étape 4: calcul linéaire du ratio position longue/courte sur une période de temps

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

Le ratio de position longue-courte peut être obtenu en divisant les longs ordres cumulatifs en attente par les courts ordres cumulatifs en attente. Cependant, il ne s'agit que de données de tick. Si une seule donnée de tick est utilisée, il peut ne pas être judicieux de décider des transactions d'achat et de vente, car sur le marché en évolution rapide, une donnée de tick n'est pas convaincante. Nous devons donc collecter une partie fixe de données de tick et enfin calculer une juste valeur par calcul linéaire.

Étape 5: Faire une commande

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

Parce que nous avons besoin de spécifier un prix lors de la passation d'un ordre, nous pouvons directement utiliser le dernier prix de vente une fois lors de l'achat; lors de la vente, vous pouvez directement utiliser le dernier prix d'achat une fois.

Conclusion

Ce qui précède est l'analyse de code de la stratégie de flux d'ordres en attente linéaire développée sur la base de la fonction de lecture des données. Si vous êtes un débutant dans le trading quantitatif, la fonction de lecture des données peut apprendre à trader à zéro coût et raccourcir le temps de compréhension des transactions. Il faut généralement plusieurs années pour qu'un vrai bot ou une transaction simulée obtienne des résultats initiaux. Il faut plusieurs semaines pour que la fonction de lecture des données atteigne le même effet.


Relationnée

Plus de