Die
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.
Die zu diesem Zeitpunkt erzeugten relativen Höhen und Tiefen bilden die effektiven Höhen und Tiefen in der
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.
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.
# 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.onTick
Funktion, und die andere ist diemain
Die Kommission ist der Auffassung, daßonTick
Funktion wird in einer endlosen Schleife in dermain
function.
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_count
Vor der Verwendung dieser beiden globalen Variablen in der Hauptfunktion deronTick
Strategie, müssen Sie dieglobal
Schlüsselwort zur Referenz.
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 dieSetContractType
Funktion in der FMZ-Plattform-API, um Futures-Varianten zu abonnieren, und dann dieGetRecords
Sie können auch in die K-Line-Array gebenPERIOD_M11
Minuten 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.
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.
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
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.GetPosition
Funktion zur Erfassung von tatsächlichen Positionsinformationen, einschließlich: Positionsrichtung, Positionsgewinn und -verlust, Anzahl der Positionen usw.
# 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.
Klicken Sie auf den vollständigen Quellcode der Strategiehttps://www.fmz.com/strategy/179805Backtest ohne Konfiguration
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.