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.
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.
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).
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
# 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.
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.
# 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.
# 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.
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.
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.
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.
'' '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.