[TOC] ¿Qué quieres decir?
Como dice el refrán, este mundo se separará después de un largo tiempo unido. También hará lo contrario después de un largo tiempo dividido. Y este fenómeno también existe en el mercado de futuros. No hay variedad que solo suba pero no baje. Pero cuándo subir y cuándo caer, depende de la tasa de desviación. En este artículo, usaremos la tasa de desviación para construir una estrategia de negociación simple.
La tasa de desviación BIAS es un indicador técnico derivado de la media móvil. Es principalmente en forma de porcentaje para medir el grado de desviación de los precios de la media móvil en las fluctuaciones. Si la media móvil es el costo promedio de un comerciante, la tasa de desviación es la tasa promedio de retorno del comerciante.
La base teórica de la tasa de desviación es un análisis del corazón del operador. Cuando el precio es mayor que el costo promedio del mercado, significa que los operadores de posición larga tendrán la idea de cobrar las ganancias, lo que hará que el precio baje. Cuando el precio es menor que el costo promedio del mercado, significa que los vendedores en corto son rentables, y la idea de cobrar la ganancia hará que el precio suba.
Cuando el precio se desvía hacia arriba del promedio móvil, la tasa de desviación es demasiado grande, y existe una alta probabilidad de que el precio caiga en el futuro.
Cuando el precio se desvía del promedio móvil a la baja, la tasa de desviación es demasiado pequeña y existe una alta probabilidad de que el precio suba en el futuro.
Aunque el promedio móvil se calcula a partir del precio, en términos de forma externa, el precio definitivamente se moverá más cerca del promedio móvil, o el precio siempre fluctuará alrededor del promedio móvil.
El precio de cierre del día - precio medio de N días / precio medio de N días
Entre ellos, N es el parámetro promedio móvil, porque el período de N es diferente, el resultado de cálculo de la tasa de desviación también es diferente. En general, los valores de N son: 6, 12, 24, 36, etc. En el uso real, también se puede ajustar dinámicamente de acuerdo con diferentes variedades. Sin embargo, la selección de parámetros es muy importante. Si el parámetro es demasiado pequeño, la tasa de desviación será demasiado sensible, si el parámetro es demasiado grande, la tasa de desviación será demasiado lenta. Los resultados de cálculo de la tasa de desviación son positivos y negativos. Cuanto mayor sea la tasa de desviación positiva, mayor será la ganancia de los toros y mayor la probabilidad de corrección del precio.
Dado que la tasa de desviación es otra forma de media móvil, también podemos adaptar una estrategia de tasa de doble desviación basada en la estrategia de media móvil doble. A juzgar por la relación posicional entre la tasa de desviación a corto plazo y la tasa de desviación a largo plazo, se juzga el estado actual del mercado. Si la tasa de desviación a largo plazo es mayor que la tasa de desviación a corto plazo, en realidad representa la media móvil a corto plazo a través de la media móvil a largo plazo, y viceversa.
Paso 1: redactar un marco estratégico
# Strategy main function
def onTick():
pass
# Program entry
def main():
while True: # Enter infinite loop mode
onTick() # execution strategy main function
Sleep(1000) # sleep for 1 second
La plataforma FMZ adopta el modo de formación por rotación.main
Función yonTick
La función principal es la función de entrada de la estrategia, y el programa ejecutará el código línea por línea a partir de la función principal.while
el bucle y ejecutar repetidamente elonTick
Todo el código básico de la estrategia está escrito en elonTick
function.
Paso 2: Definir las posiciones virtuales
mp = 0
La ventaja de las posiciones virtuales es que es simple de escribir, y la operación iterativa es rápida. Se usa generalmente en el entorno de backtest. Se asume que cada orden está completamente llena, pero la posición real se usa generalmente en el comercio real.
Paso 3: Obtener la línea K
exchange.SetContractType('rb000') # Subscribe to futures varieties
bars_arr = exchange.GetRecords() # Get K-line array
if len(bars_arr) <long + 1: # If the number of K lines is too small
return
Utilizando la función FMZSetContractType
, puede suscribirse al contrato de índice de rebar pasando en GetRecords
Como se necesita un cierto período para calcular la tasa de desviación, con el fin de evitar errores de programa, si no hay suficientes líneas K, utilizarif
las instrucciones a filtrar.
Paso 4: Calcular la tasa de desviación
close = bars_arr[-2]['Close'] # Get the closing price of the previous K line
ma1 = TA.MA(bars_arr, short)[-2] # Calculate the short-term moving average value of the previous K line
bias1 = (close-ma1) / ma1 * 100 # Calculate the short-term deviation rate value
ma2 = TA.MA(bars_arr, long)[-2] # Calculate the long-term average of the previous K line
bias2 = (close-ma2) / ma2 * 100 # Calculate the long-term deviation rate value
Según la fórmula para calcular la tasa de desviación, primero obtenemos el precio de cierre. En esta estrategia, utilizamos el precio de cierre anterior de la línea K, lo que significa que se establece la señal de la línea K actual y la siguiente línea K es para colocar órdenes.talib
Por ejemplo, el promedio móvil es:TA.MA
Esta función recibe 2 parámetros, a saber: K línea de matriz y el período promedio móvil.
Paso 5: Posicionamiento de órdenes
global mp # global variables
current_price = bars_arr[-1]['Close'] # latest price
if mp> 0: # If you are holding long positions
if bias2 <= bias1: # If the long-term deviation rate is less than or equal to the short-term deviation rate
exchange.SetDirection("closebuy") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # Closing long positions
mp = 0 # reset virtual holding positions
if mp <0: # If you are holding short positions
if bias2 >= bias1: # If the long-term deviation rate is greater than or equal to the short-term deviation rate
exchange.SetDirection("closesell") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # closing short positions
mp = 0 # reset virtual holding positions
if mp == 0: # If there is no holding position
if bias2> bias1: # Long-term deviation rate is greater than short-term deviation rate
exchange.SetDirection("buy") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # open long positions
mp = 1 # reset virtual holding position
if bias2 <bias1: # The long-term deviation rate is less than the short-term deviation rate
exchange.SetDirection("sell") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # open short positions
mp = -1 # reset virtual holding position
# Backtest configuration
'''backtest
start: 2018-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''
# External parameters
short = 10
long = 50
# Global variables
mp = 0
# 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) <long + 1: # If the number of K lines is too small
return
# Calculate BIAS
close = bars_arr[-2]['Close'] # Get the closing price of the previous K line
ma1 = TA.MA(bars_arr, short)[-2] # Calculate the short-term moving average of the previous K line
bias1 = (close-ma1) / ma1 * 100 # Calculate the short-term deviation rate value
ma2 = TA.MA(bars_arr, long)[-2] # Calculate the long-term average of the previous K line
bias2 = (close-ma2) / ma2 * 100 # Calculate the long-term deviation rate value
# Placing Orders
global mp # global variables
current_price = bars_arr[-1]['Close'] # latest price
if mp> 0: # If you are holding long positions
if bias2 <= bias1: # If the long-term deviation rate is less than or equal to the short-term deviation rate
exchange.SetDirection("closebuy") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # closing long positions
mp = 0 # reset virtual holding position
if mp <0: # If you are holding short positions
if bias2 >= bias1: # If the long-term deviation rate is greater than or equal to the short-term deviation rate
exchange.SetDirection("closesell") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # closing short positions
mp = 0 # reset virtual holding position
if mp == 0: # If there is no holding position
if bias2> bias1: # Long-term deviation rate is greater than short-term deviation rate
exchange.SetDirection("buy") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # opening long positions
mp = 1 # reset virtual holding position
if bias2 <bias1: # The long-term deviation rate is less than the short-term deviation rate
exchange.SetDirection("sell") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # open short positions
mp = -1 # reset virtual holding position
# Program entry function
def main():
while True: # loop
onTick() # execution strategy main function
Sleep(1000) # sleep for 1 second
La estrategia completa se ha publicado en el sitio web de la FMZ:https://www.fmz.com/strategy/215129
Configuración de pruebas de retroceso
Informe sobre el rendimiento
Curva de los fondos
La tasa de desviación es una herramienta de negociación simple y efectiva que puede proporcionar una referencia efectiva para los operadores.