Hans123 Intraday-Breakthrough-Strategie

Schriftsteller:Gutes, Erstellt: 2020-08-12 11:38:39, Aktualisiert: 2023-10-10 21:15:02

img

Vorwort

Die HANS123-Strategie wurde zunächst hauptsächlich auf dem Devisenmarkt angewendet. Ihre Handelsmethode ist relativ einfach und gehört zum Trend-Breakthrough-System. Diese Handelsmethode kann sofort auf den Markt kommen, sobald sich der Trend bildet, so dass sie von vielen Händlern bevorzugt wird. Bisher hat HANS123 viele Versionen erweitert, lassen Sie uns die HANS123-Strategie gemeinsam verstehen und einsetzen.

img

Strategieprinzip

Einige Leute glauben, dass die Öffnung des Marktes am Morgen die Zeit ist, in der der Markt die größte Divergenz hat. Nach etwa 30 Minuten hat der Markt alle Arten von Informationen über Nacht vollständig verdaut, und der Kurstrend wird dazu neigen, rational zu sein und wieder normal zu werden. Mit anderen Worten: Der Markttrend in den ersten 30 Minuten oder so bildet im Grunde das gesamte Handelsmuster heute.

  • Oberste Schiene: der höchste Preis innerhalb von 30 Minuten nach Eröffnung
  • Unterbahn: der niedrigste Preis innerhalb von 30 Minuten nach Eröffnung

Die zu diesem Zeitpunkt erzeugten relativen Höhen und Tiefen bilden die effektiven Höhen und Tiefen in der Dow-Theorie, und die HANS123-Strategie ist die dadurch festgelegte Handelslogik. Am heimischen Futures-Markt öffnet sich der Markt um 09:00 Uhr morgens und um 09:30 Uhr kann man beurteilen, ob er heute lang oder kurz ist. Wenn der Preis den Höhenpunkt nach oben durchbricht, wird der Preis leicht weiter steigen; wenn der Preis den Tiefenpunkt nach unten durchbricht, wird der Preis leicht weiter fallen.

  • Öffnung einer Long-Position: Derzeit gibt es keine Holding-Position, und der Preis bricht über die oberen Schienen
  • Eröffnung einer Kurzposition: Derzeit gibt es keine Halteposition, und der Preis bricht unter die untere Schiene

Obwohl die Durchbruchstrategie den Markt sofort betreten kann, sobald sich der Trend bildet. Aber dieser Vorteil ist auch ein zweischneidiges Schwert. Als Folge des sensiblen Eintrags ist der Preisdurchbruch gescheitert. Daher ist es notwendig, einen Stop-Loss festzulegen. Zur gleichen Zeit muss, um die Strategielogik des Gewinnens und Verlierens zu erreichen, Profit eingestellt werden.

  • Stop-Loss-Langposition: Die aktuelle Longposition hat den Verlustbetrag erreicht
  • Short-Position Stop-Loss: Die aktuelle Short-Position hat den Verlustbetrag erreicht
  • Gewinn für Long-Positionen erzielen, Long-Positionen halten und den Gewinnbetrag erreichen
  • Gewinn für Shortpositionen erzielen, Shortpositionen halten und den Gewinnbetrag erreichen

Strategie schreiben

Schritt für Schritt:fmz.comWebsite> Anmeldung> Dashboard> Strategiebibliothek> Neue Strategie> Klicken Sie auf das Dropdown-Menü in der oberen rechten Ecke, um die Python-Sprache auszuwählen und mit dem Schreiben der Strategie zu beginnen.

Schritt 1: Erstellen des Strategierahmens

# 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

Die Schreibweise eines Strategie-Rahmens wurde im vorherigen Kapitel gelernt.onTickFunktion, und die andere ist diemainDie Kommission ist der Auffassung, daßonTickFunktion wird in einer endlosen Schleife in dermain function.

Schritt 2: Definition der globalen Variablen

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

Da die oberen und unteren Schienen nur um 09:30 Uhr gezählt werden und in der restlichen Zeit keine Statistiken erstellt werden, müssen wir diese beiden Variablen außerhalb der Schleife schreiben.trade_countVor der Verwendung dieser beiden globalen Variablen in der Hauptfunktion deronTickStrategie, müssen Sie dieglobalSchlüsselwort zur Referenz.

Schritt 3: Die Daten erhalten

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

Um Daten zu erhalten, verwenden Sie zunächst dieSetContractTypeFunktion in der FMZ-Plattform-API, um Futures-Varianten zu abonnieren, und dann dieGetRecordsSie können auch in die K-Line-Array gebenPERIOD_M11Minuten bei Verwendung derGetRecords function.

Der nächste Schritt besteht darin, den neuesten Preis zu erhalten, der verwendet wird, um die Positionsbeziehung zwischen dem aktuellen Preis und den oberen und unteren Schienen zu bestimmen. Gleichzeitig müssen Sie bei der Bestellung mit der Buy- oder Sell-Funktion den angegebenen Preis eingeben. Außerdem sollten Sie die Anzahl der k-Linienbalken filtern, da bei zu geringer Anzahl der k-Linienbalken ein Fehler auftritt, der nicht berechnet werden kann.

Schritt 4: Verarbeitungszeitfunktion

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)

Bei der Berechnung der oberen und unteren Schienen und bei der Auftragserteilung ist zu beurteilen, ob die aktuelle Zeit der von uns angegebenen Handelszeit entspricht. Um das Urteil zu erleichtern, müssen wir uns mit den spezifischen Stunden und Minuten der aktuellen K-Linie befassen.

Schritt 5: Berechnung der oberen und unteren Schienen

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

Schritt 6: Positionen erwerben

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

Der Status einer Position beinhaltet eine Strategie-Logik.GetPositionFunktion zur Erfassung von tatsächlichen Positionsinformationen, einschließlich: Positionsrichtung, Positionsgewinn und -verlust, Anzahl der Positionen usw.

Schritt 7: Bestellung

# 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

Um Logikfehler in der Strategie zu vermeiden, ist es am besten, die Schlussposition Logik vor der Eröffnungsposition Logik zu schreiben. In dieser Strategie, wenn eine Position zu öffnen, zuerst den aktuellen Position Status bestimmen, ob es innerhalb der angegebenen Handelszeit ist, und dann bestimmen Sie die Beziehung zwischen dem aktuellen Preis und den oberen und unteren Schienen.

HANS123 ist eine sehr typische und sehr effektive automatisierte Handelsstrategie. Sein Grundprinzip besteht darin, innerhalb eines bestimmten Zeitraums den höchsten oder niedrigsten Preis des vorherigen Marktes zu durchbrechen. Das System kann auf fast alle Devisenprodukte mit stabiler Rentabilität angewendet werden. Dies ist auch ein früher Einstiegshandelsmodus mit geeigneter Filtertechnologie oder kann seine Gewinnchancen verbessern.

Vollständige Strategie

Klicken Sie auf den vollständigen Quellcode der Strategiehttps://www.fmz.com/strategy/179805Backtest ohne Konfiguration

Ende

Das obige ist das Prinzip und die Codeanalyse der HANS123-Strategie. Tatsächlich bietet die HANS123-Strategie eine bessere Zeit, um in den Markt einzusteigen. Sie können auch die Zeit des Ausstiegs entsprechend Ihrem Verständnis des Marktes und Ihrem Verständnis der Transaktion verbessern oder entsprechend der Volatilität der Vielfalt.


Verwandt

Mehr