Hans123 stratégie de rupture intraday

Auteur:La bonté, Créé: 2020-08-12 11:38:39, Mis à jour: 2023-10-10 21:15:02

img

Préface

La stratégie HANS123 a d'abord été principalement appliquée au marché des changes. Sa méthode de trading est relativement simple et appartient au système de rupture de tendance. Cette méthode de trading peut entrer sur le marché dès que la tendance est formée, elle est donc favorisée par de nombreux traders. Jusqu'à présent, HANS123 a élargi de nombreuses versions, comprenons et déployons ensemble la stratégie HANS123.

img

Principe de stratégie

Certaines personnes croient que l'ouverture du marché le matin est le moment où le marché a la plus grande divergence. Après environ 30 minutes, le marché a complètement digéré toutes sortes d'informations du jour au lendemain, et la tendance des prix aura tendance à être rationnelle et à revenir à la normale. En d'autres termes: la tendance du marché au cours des 30 premières minutes ou plus constitue fondamentalement le schéma de négociation global d'aujourd'hui.

  • Route supérieure: prix le plus élevé dans les 30 minutes suivant l'ouverture
  • Chemin de fer inférieur: le prix le plus bas dans les 30 minutes suivant l'ouverture

Les hauts et les bas relatifs générés à ce moment-là forment les hauts et les bas effectifs de la théorie de Dow, et la stratégie HANS123 est la logique de négociation établie par cela.

  • Ouverture de position longue: il n'y a actuellement aucune position de détention et le prix dépasse le niveau supérieur
  • Ouverture de position courte: il n'y a actuellement aucune position de détention et le prix dépasse le niveau inférieur du rail

Bien que la stratégie de percée puisse entrer sur le marché dès que la tendance se forme. Mais cet avantage est aussi une épée à double tranchant. En raison de l'entrée sensible, la percée du prix a échoué. Il est donc nécessaire de définir un stop loss. Dans le même temps, afin d'atteindre la logique de stratégie de gagner et de perdre, il faut définir un profit.

  • Stop loss de position longue: la position longue actuelle a atteint le montant de la perte
  • Stop-loss de position courte: la position courte actuelle a atteint le montant de la perte
  • Profitez des positions longues, maintenez des positions longues et atteignez le montant du profit
  • Profitez des positions courtes, conservez les positions courtes et atteignez le montant du profit

Rédaction de stratégie

À tour de rôle:fmz.comSite Web > Connexion > Tableau de bord > Bibliothèque de stratégie > Nouvelle stratégie > Cliquez sur le menu déroulant dans le coin supérieur droit pour sélectionner le langage Python et commencer à écrire la stratégie.

Étape 1: Écrire le cadre stratégique

# Strategy main function
def onTick():
    pass


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

L'écriture d'un cadre stratégique, cela a été appris dans le chapitre précédent, l'un est leonTickfonction, et l'autremainLe rôle de laonTickfonction est exécutée en boucle sans fin dans lemain function.

Étape 2: Définir les variables globales

up_line = 0 # upper rail
down_line = 0 # lower rail
trade_count = 0 # Number of transactions on the day

Parce que les rails supérieur et inférieur ne sont comptés qu'à l'heure de 09:30, et aucune statistique n'est faite dans le reste du temps, nous devons écrire ces deux variables en dehors de la boucle.trade_countAvant d'utiliser ces deux variables globales dans la fonction principale de laonTickstratégie, vous devez utiliser leglobalmot clé à référencer.

Étape 3: obtenir les données

exchange.SetContractType("rb888") # Subscribe to futures varieties
bar_arr = _C(exchange.GetRecords, PERIOD_M1) # Get 1-minute K line array
current_close = bar_arr[-1]['Close'] # Get the latest price
if len(bar_arr) <50: # If less than 50 k line bars
    return # Return to continue waiting for data

Pour obtenir des données, utilisez d'abord leSetContractTypeLa fonction de souscription à des contrats à terme est utilisée dans l'API de la plateforme FMZ.GetRecordsVous pouvez également passer dans la matrice de ligne K spécifiantPERIOD_M11minutes lorsque l'on utilise leGetRecords function.

L'étape suivante consiste à obtenir le dernier prix, qui est utilisé pour déterminer la relation de position entre le prix actuel et les rails supérieur et inférieur. En même temps, lors de la passation d'un ordre en utilisant la fonction Acheter ou Vendre, vous devez passer le prix spécifié. En outre, n'oubliez pas de filtrer le nombre de barres de ligne k, car si le nombre de barres de ligne k est trop petit, il y aura une erreur qui ne peut pas être calculée.

Étape 4: Fonction de temps de traitement

def current_time():
    current_time = bar_arr[-1]['Time'] # Get current K-line timestamp
    time_local = time.localtime(current_time / 1000) # Processing timestamp
    hour = time.strftime("%H", time_local) # Format the timestamp and get the hour
    minute = time.strftime("%M", time_local) # Format the timestamp and get the minute
    if len(minute) == 1:
        minute = "0" + minute
    return int(hour + minute)

Lors du calcul des rails supérieurs et inférieurs et de la passation des ordres, il est nécessaire de juger si l'heure actuelle correspond à l'heure de négociation spécifiée par nous, de sorte que pour faciliter le jugement, nous devons nous occuper des heures et des minutes spécifiques de la ligne K actuelle.

Étape 5: Calculer les rails supérieur et inférieur

global up_line, down_line, trade_count # Introduce global variables
current_time = current_time() # processing time
if current_time == 930: # If the latest K-line time is 09:30
    up_line = TA.Highest(bar_arr, 30,'High') + count # The highest price of the first 30 k line bars
    down_line = TA.Lowest(bar_arr, 30,'Low')-count # The lowest price of the first 30 ke line bars
    trade_count = 0 # Reset the number of transactions to 0

Étape 6: obtenir des postes

position_arr = _C(exchange.GetPosition) # Get position array
if len(position_arr) > 0: # If the position array length is greater than 0
    position_arr = position_arr[0] # Get position dictionary data
    if position_arr['ContractType'] =='rb888': # If the position symbol is equal to the subscription symbol
        if position_arr['Type']% 2 == 0: # If it is a long position
            position = position_arr['Amount'] # The number of assigned positions is a positive number
        else:
            position = -position_arr['Amount'] # Assign a negative number of positions
        profit = position_arr['Profit'] # Get position profit and loss
else:
    position = 0 # The number of assigned positions is 0
    profit = 0 # Assign position profit and loss to 0

Le statut de position implique une logique de stratégie. Nos dix premières leçons ont toujours utilisé des positions de détention virtuelles, mais dans un environnement de trading réel, il est préférable d'utiliser leGetPositionfonction permettant d'obtenir des informations sur les positions réelles, notamment: direction de la position, bénéfices et pertes de position, nombre de positions, etc.

Étape 7: Faire une commande

# If it is close to market closing or reach taking profit and stopping loss
if current_time > 1450 or profit > stop * 3 or profit < -stop:
    if position > 0: # If holding a long position
        exchange.SetDirection("closebuy") # Set transaction direction and type
        exchange.Sell(current_close-1, 1) # Close long order
    elif position <0: # If holding an empty order
        exchange.SetDirection("closesell") # Set transaction direction and type
        exchange.Buy(current_close + 1, 1) # Close short order
# If there is no current position, and it is less than the specified number of transactions, and within the specified trading time
if position == 0 and trade_count < 2 and 930 < current_time < 1450:
    if current_close > up_line: # If the price is greater than the upper line
        exchange.SetDirection("buy") # Set transaction direction and type
        exchange.Buy(current_close + 1, 1) # Open long order
        trade_count = trade_count + 1 # Increase the number of transactions
    elif current_close < down_line: # If the price is less than the lower line
        exchange.SetDirection("sell") # Set transaction direction and type
        exchange.Sell(current_close-1, 1) # Open a short order
        trade_count = trade_count + 1 # Increase the number of transactions

Pour éviter les erreurs de logique dans la stratégie, il est préférable d'écrire la logique de position de clôture avant la logique de position d'ouverture. Dans cette stratégie, lors de l'ouverture d'une position, déterminez d'abord l'état de la position actuelle, si elle se trouve dans le temps de négociation spécifié, puis déterminez la relation entre le prix actuel et les rails supérieur et inférieur. Pour fermer une position, il faut d'abord déterminer si elle est proche de la clôture du marché ou si elle a atteint les conditions de prise de profit et d'arrêt de perte.

HANS123 est une stratégie de trading automatisée très typique et très efficace. Son principe de base est de percer le prix le plus élevé ou le plus bas du marché précédent dans un certain laps de temps. Le système peut être appliqué à presque tous les produits de change avec une rentabilité stable. C'est également un mode de trading d'entrée précoce, avec une technologie de filtrage appropriée, ou peut améliorer ses chances de gagner.

Stratégie complète

Cliquez pour copier le code source complet de la stratégiehttps://www.fmz.com/strategy/179805Backtest sans configuration

Finition

Ce qui précède est le principe et l'analyse du code de la stratégie HANS123. En fait, la stratégie HANS123 fournit un meilleur moment pour entrer sur le marché. Vous pouvez également améliorer le temps de sortie en fonction de votre compréhension du marché et de la compréhension de la transaction, ou en fonction de la volatilité de la variété.


Relationnée

Plus de