Hans123 estrategia de despliegue intradiario

El autor:La bondad, Creado: 2020-08-12 11:38:39, Actualizado: 2023-10-10 21:15:02

img

Prefacio

La estrategia HANS123 se aplicó primero principalmente al mercado de divisas. Su método de negociación es relativamente simple y pertenece al sistema de avance de tendencia. Este método de negociación puede entrar en el mercado tan pronto como se forme la tendencia, por lo que es favorecido por muchos comerciantes. Hasta ahora, HANS123 ha expandido muchas versiones, entendamos y implementemos la estrategia HANS123 juntos.

img

Principio de la estrategia

Algunas personas creen que la apertura del mercado por la mañana es el momento en que el mercado tiene la mayor divergencia. Después de unos 30 minutos, el mercado ha digerido completamente todo tipo de información durante la noche, y la tendencia del precio tenderá a ser racional y volverá a la normalidad. En otras palabras: la tendencia del mercado en los primeros 30 minutos constituye básicamente el patrón general de negociación de hoy.

  • Rejillo superior: el precio más alto dentro de los 30 minutos posteriores a la apertura
  • Bajo rieles: el precio más bajo dentro de los 30 minutos de apertura

Los puntos altos y bajos relativos generados en este momento forman los puntos altos y bajos efectivos en la Teoría Dow, y la estrategia HANS123 es la lógica de negociación establecida por esto. En el mercado de futuros doméstico, el mercado se abre a las 09:00 de la mañana, y a las 09:30 puede juzgar si es largo o corto hoy. Cuando el precio rompe el punto alto hacia arriba, el precio continuará fácilmente subiendo; cuando el precio rompe el punto bajo hacia abajo, el precio continuará fácilmente cayendo.

  • Apertura de posición larga: actualmente no hay posición de retención y el precio se rompe por encima del nivel superior
  • Apertura de posición corta: actualmente no hay posición de retención y el precio se rompe por debajo del nivel inferior

Aunque la estrategia de avance puede entrar en el mercado tan pronto como se forme la tendencia. Pero esta ventaja también es una espada de dos filos. Como resultado de la entrada sensible, el avance del precio fracasó. Por lo que es necesario establecer un stop loss. Al mismo tiempo, para lograr la lógica de estrategia de ganar y perder, debe establecerse el take profit.

  • Posición larga stop loss: la posición larga actual ha alcanzado el importe de la pérdida
  • Posición corta stop loss: la posición corta actual ha alcanzado el importe de la pérdida
  • Obtener ganancias por posiciones largas, mantener posiciones largas y alcanzar el importe de la ganancia
  • Obtener ganancias por posiciones cortas, mantener posiciones cortas y alcanzar el importe del beneficio

Escribir estrategias

Abierto a su vez:fmz.comsitio web> Iniciar sesión > Panel > Biblioteca de estrategias > Nueva estrategia > Haga clic en el menú desplegable en la esquina superior derecha para seleccionar el lenguaje Python y comenzar a escribir la estrategia. Preste atención a los comentarios en el código a continuación.

Paso 1: redactar el marco estratégico

# 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

Escribe un marco estratégico, esto se ha aprendido en el capítulo anterior, uno es elonTickla función, y el otro es elmainEn la actualidad, elonTickLa función se ejecuta en un bucle interminable en elmain function.

Paso 2: Definir las variables globales

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

Debido a que los rieles superior e inferior sólo se cuentan a la hora de 09:30, y no se hacen estadísticas en el resto del tiempo, necesitamos escribir estas dos variables fuera del bucle.trade_countVariable también se escribe fuera del bucle. Antes de utilizar estas dos variables globales en la función principal de laonTickestrategia, usted necesita para utilizar elglobalpalabra clave para la referencia.

Paso 3: Obtener los datos

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

Para obtener datos, primero utilice elSetContractTypeLa función en la plataforma FMZ API para suscribirse a las variedades de futuros, y luego utilizar elGetRecordsTambién puede pasar en la matriz de K-línea especificandoPERIOD_M11minutos cuando se utiliza elGetRecords function.

El siguiente paso es obtener el precio más reciente, que se utiliza para determinar la relación de posición entre el precio actual y los rieles superior e inferior. Al mismo tiempo, al realizar un pedido utilizando la función de Compra o Venta, debe pasar el precio especificado. Además, no olvide filtrar el número de barras de k líneas, porque si el número de barras de k líneas es demasiado pequeño, habrá un error que no se puede calcular.

Paso 4: Función de tiempo de procesamiento

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)

Al calcular los rieles superiores e inferiores y colocar órdenes, es necesario juzgar si el tiempo actual cumple con el tiempo de negociación especificado por nosotros, por lo que para facilitar el juicio, necesitamos tratar con las horas y minutos específicos de la línea K actual.

Paso 5: Calcular los rieles superior e inferior

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

Paso 6: Obtener posiciones

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

El estado de la posición implica la lógica de la estrategia. Nuestras primeras diez lecciones siempre han utilizado posiciones de tenencia virtuales, pero en un entorno de negociación real, lo mejor es utilizar elGetPositionFunción para obtener información sobre posiciones reales, incluida: dirección de la posición, pérdidas y ganancias de la posición, número de posiciones, etc.

Paso 7: Haga un pedido

# 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

Para evitar errores de lógica en la estrategia, lo mejor es escribir la lógica de posición de cierre antes de la lógica de posición de apertura. En esta estrategia, al abrir una posición, primero determina el estado de la posición actual, si está dentro del tiempo de negociación especificado, y luego determina la relación entre el precio actual y los rieles superior e inferior. Para cerrar una posición es determinar primero si está cerca del cierre del mercado, o si ha alcanzado las condiciones de obtener ganancias y detener pérdidas.

HANS123 es una estrategia de negociación automatizada muy típica y muy efectiva. Su principio básico es romper el precio más alto o más bajo del mercado anterior dentro de un cierto período de tiempo. El sistema se puede aplicar a casi todos los productos de divisas con rentabilidad estable.

Estrategia completa

Haga clic para copiar el código fuente de la estrategia completahttps://www.fmz.com/strategy/179805Prueba posterior sin configuración

El final

Lo anterior es el principio y el análisis de código de la estrategia HANS123. De hecho, la estrategia HANS123 proporciona un mejor momento para ingresar al mercado. También puede mejorar el tiempo de salida de acuerdo con su comprensión del mercado y la comprensión de la transacción, o de acuerdo con la volatilidad de la variedad Para optimizar parámetros como tomar ganancias y detener pérdidas para lograr mejores resultados.


Relacionados

Más.