Sistema de negociación de líneas de cocodrilo versión Python

El autor:La bondad, Creado: 2020-05-07 14:33:19, Actualizado: 2023-11-06 19:40:42

img

Resumen de las actividades

Las personas que han hecho operaciones financieras probablemente tendrán experiencia. A veces las fluctuaciones de precios son regulares, pero más a menudo muestra un estado inestable de caminar al azar. Es esta inestabilidad donde se encuentran los riesgos y oportunidades del mercado. La inestabilidad también significa impredecible, por lo que cómo hacer que los retornos sean más estables en un entorno de mercado impredecible también es un problema para todos los comerciantes. Este artículo presentará la estrategia de reglas de comercio de cocodrilos, con la esperanza de inspirar a todos.

¿Qué es una línea de cocodrilo?

img

La línea del cocodrilo es en realidad tres promedios móviles especiales, que corresponden al mentón de la línea azul, los dientes de la línea roja y el labio superior de la línea verde. La barbilla es un promedio móvil de 13 períodos y se mueve 8 bares en el futuro. El diente es un promedio móvil de 8 períodos y se mueve 5 bares en el futuro. El labio superior es un promedio móvil de 5 períodos y se mueve 3 bares en el futuro.

Principio de la línea del cocodrilo

La línea del cocodrilo es un conjunto de métodos de análisis técnicos resumidos en base a la geometría y la dinámica no lineal. Cuando la barbilla, los dientes y el labio superior del cocodrilo están cerrados o enredados, significa que el cocodrilo está dormido. En este momento, generalmente nos quedamos fuera del mercado hasta que aparezca el fragmento, y solo participamos en el mercado de tendencia obvio.

Cuanto más tiempo duerma el cocodrilo, más hambre tendrá cuando se despierte, por lo que una vez que se despierte, abrirá su boca. Si el labio superior está por encima de los dientes y los dientes están por encima de la barbilla, indica que el mercado ha entrado en un mercado de toros y los cocodrilos van a comer carne de res. Si el labio superior está por debajo de los dientes y los dientes están por debajo de la barbilla, indica que el mercado ha entrado en un mercado de osos y los cocodrilos van a comer carne de oso. Hasta que esté lleno, entonces cerrará su boca de nuevo (aguantar y obtener ganancias).

Fórmula de cálculo de la línea de cocodrilo

Los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de los resultados de las mediciones de los resultados de las mediciones de los resultados de las mediciones de los resultados de los resultados de las mediciones de los resultados de los resultados de las mediciones de los resultados de las mediciones de los resultados de los resultados de las mediciones de los resultados de las mediciones. Los dientes son los mismos que los dientes. El valor de las emisiones de gases de efecto invernadero es el valor de las emisiones de gases de efecto invernadero.

Composición de la estrategia del cocodrilo

Paso 1: redactar un 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

FMZ usando el modo de votación, uno es la función onTick, y el otro es la función principal, en la que la función onTick se ejecuta en un bucle infinito en la función principal.

Paso 2: Importar biblioteca de Python

import talib
import numpy as np

La función SMA se usa en nuestra estrategia. SMA es la media aritmética. Ya hay funciones SMA ya listas en la biblioteca talib, así que importa directamente la biblioteca talib Python y luego llámala directamente. Porque al llamar a esta función, necesitas pasar parámetros de formato numpy, así que necesitamos usar la importación para importar estas dos bibliotecas Python al comienzo de la estrategia.

Paso 3: Convertir los datos de la matriz de línea K

# Convert the K-line array into an array of highest price, lowest price, and closing price, for conversion to numpy.array
def get_data(bars):
    arr = []
    for i in bars:
        arr.append(i['Close'])
    return arr

Aquí hemos creado una función get_data, el propósito de esta función es procesar la matriz ordinaria de K-line en datos de formato numpy.

Paso 4: Obtención de datos de posición

# Get the number of positions
def get_position ():
     # Get position
     position = 0 # The number of assigned positions is 0
     position_arr = _C (exchange.GetPosition) # Get array of positions
     if len (position_arr)> 0: # If the position array length is greater than 0
         for i in position_arr:
             if i ['ContractType'] == 'rb000': # If the position symbol is equal to the subscription symbol
                 if i ['Type']% 2 == 0: # If it is long position
                     position = i ['Amount'] # Assigning a positive number of positions
                 else:
                     position = -i ['Amount'] # Assigning a negative number of positions
     return position

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

Paso 5: Obtener los datos

exchange.SetContractType('rb000') # Subscribe the futures varieties
     bars_arr = exchange.GetRecords() # Get K line array
     if len(bars_arr) < 22: # If the number of K lines is less than 22
         return

Antes de adquirir datos, primero debe usar la función SetContractType para suscribirse a las variedades de futuros relevantes. FMZ admite todas las variedades de futuros de productos básicos chinos. Después de suscribirse al símbolo de futuros, puede usar la función GetRecords para obtener datos de línea K, que devuelve una matriz.

Paso 6: Calcular los datos

np_arr = np.array (get_data (bars_arr)) # Convert closing price array
sma13 = talib.SMA (np_arr, 130) [-9] # chin
sma8 = talib.SMA (np_arr, 80) [-6] # teeth
sma5 = talib.SMA (np_arr, 50) [-4] # upper lip
current_price = bars_arr [-1] ['Close'] # latest price

Antes de calcular el SMA usando la biblioteca talib, necesita usar la biblioteca numpy para procesar la matriz de línea K ordinaria en datos numpy. Luego obtenga la barbilla, los dientes y el labio superior de la línea de cocodrilo por separado. Además, el parámetro de precio debe pasarse al realizar un pedido, por lo que podemos usar el precio de cierre en la matriz de línea K.

Paso 7: Haga un pedido

position = get_position ()
if position == 0: # If there is no position
     if current_price> sma5: # If the current price is greater than the upper lip
         exchange.SetDirection ("buy") # Set the trading direction and type
         exchange.Buy (current_price + 1, 1) # open long position order
     if current_price <sma13: # If the current price is less than the chin
         exchange.SetDirection ("sell") # Set the trading direction and type
         exchange.Sell (current_price-1, 1) # open short position order
    
if position> 0: # If you have long positions
     if current_price <sma8: # If the current price is less than teeth
         exchange.SetDirection ("closebuy") # Set the trading direction and type
         exchange.Sell (current_price-1, 1) # close long position

if position <0: # If you have short position
     if current_price> sma8: # If the current price is greater than the tooth
         exchange.SetDirection ("closesell") # Set the trading direction and type
         exchange.Buy (current_price + 1, 1) # close short position

Antes de colocar una orden, necesita obtener la posición real. La función get_position que definimos anteriormente devolverá el número real de posiciones. Si la posición actual es larga, devolverá un número positivo. Si la posición actual es corta, devolverá un número negativo. Si no hay posición, devuelve 0. Finalmente, las funciones de compra y venta se utilizan para colocar órdenes de acuerdo con la lógica de negociación anterior, pero antes de esto, también se necesita establecer la dirección y el tipo de negociación.

Estrategia completa

'' 'backtest
start: 2019-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 1h
exchanges: [{"eid": "Futures_CTP", "currency": "FUTURES"}]
'' '

import talib
import numpy as np


# Convert the K-line array into an array of highest price, lowest price, and closing price, used to convert to numpy.array type data
def get_data (bars):
    arr = []
    for i in bars:
        arr.append (i ['Close'])
    return arr


# Get the number of positions
def get_position ():
    # Get position
    position = 0 # The number of assigned positions is 0
    position_arr = _C (exchange.GetPosition) # Get array of positions
    if len (position_arr)> 0: # If the position array length is greater than 0
        for i in position_arr:
            if i ['ContractType'] == 'rb000': # If the position symbol is equal to the subscription symbol
                if i ['Type']% 2 == 0: # If it is long
                    position = i ['Amount'] # Assign a positive number of positions
                else:
                    position = -i ['Amount'] # Assign a negative number of positions
    return position
    
    

# Strategy main function
def onTick ():
    # retrieve data
    exchange.SetContractType ('rb000') # Subscribe to futures varieties
    bars_arr = exchange.GetRecords () # Get K line array
    if len (bars_arr) <22: # If the number of K lines is less than 22
        return
    
    # Calculation
    np_arr = np.array (get_data (bars_arr)) # Convert closing price array
    sma13 = talib.SMA (np_arr, 130) [-9] # chin
    sma8 = talib.SMA (np_arr, 80) [-6] # teeth
    sma5 = talib.SMA (np_arr, 50) [-4] # upper lip
    current_price = bars_arr [-1] ['Close'] # latest price

    position = get_position ()
    if position == 0: # If there is no position
        if current_price> sma5: # If the current price is greater than the upper lip
            exchange.SetDirection ("buy") # Set the trading direction and type
            exchange.Buy (current_price + 1, 1) # open long position order
        if current_price <sma13: # If the current price is less than the chin
            exchange.SetDirection ("sell") # Set the trading direction and type
            exchange.Sell (current_price-1, 1) # open short position order
        
    if position> 0: # If you have long positions
        if current_price <sma8: # If the current price is less than teeth
            exchange.SetDirection ("closebuy") # Set the trading direction and type
            exchange.Sell (current_price-1, 1) # close long position

    if position <0: # If you have short positions
        if current_price> sma8: # If the current price is greater than the tooth
            exchange.SetDirection ("closesell") # Set the trading direction and type
            exchange.Buy (current_price + 1, 1) # close short position

            
# Program main function
def main ():
    while True: # loop
        onTick () # execution strategy main function
        Sleep (1000) # sleep for 1 second

Haga clic directamente en el siguiente enlace para copiar la estrategia completa sin configuración:https://www.fmz.com/strategy/199025

El final

La mayor función de la regla de negociación del cocodrilo es ayudarnos a mantener la misma dirección que el mercado al operar, independientemente de cómo cambie el precio actual del mercado, y continuar obteniendo ganancias hasta que aparezca el mercado de consolidación.


Relacionados

Más.