[TOC]
Como diz o ditado, este mundo se separará depois de muito tempo unido. Também fará o oposto depois de muito tempo dividido. E esse fenômeno também existe no mercado de futuros. Não há variedade que só suba, mas não caia. Mas quando subir e quando cair, depende da taxa de desvio. Neste artigo, usaremos a taxa de desvio para construir uma estratégia de negociação simples.
A taxa de desvio BIAS é um indicador técnico derivado da média móvel. É principalmente na forma de uma porcentagem para medir o grau de desvio do preço da média móvel em flutuações. Se a média móvel é o custo médio de um comerciante, a taxa de desvio é a taxa média de retorno do comerciante.
A base teórica da taxa de desvio é uma análise do coração do comerciante. Quando o preço é maior do que o custo médio do mercado, isso significa que os comerciantes de posição longa terão a idéia de retirar os lucros, o que fará com que o preço caia. Quando o preço é inferior ao custo médio do mercado, isso significa que os vendedores em curto são lucrativos, e a idéia de retirar o lucro fará com que o preço suba.
Quando o preço se desvia para cima da média móvel, a taxa de desvio é muito grande, e há uma alta probabilidade de que o preço caia no futuro.
Quando o preço se desvia da média móvel para baixo, a taxa de desvio é muito pequena e há uma alta probabilidade de o preço subir no futuro.
Embora a média móvel seja calculada a partir do preço, em termos de forma externa, o preço definitivamente se moverá mais perto da média móvel, ou o preço sempre flutuará em torno da média móvel.
Taxa de desvio = [ (o preço de fechamento do dia - preço médio de N dias) / preço médio de N dias] * 100%
Entre eles, N é o parâmetro da média móvel, porque o período de N é diferente, o resultado do cálculo da taxa de desvio também é diferente. Em geral, os valores de N são: 6, 12, 24, 36, etc. No uso real, ele também pode ser ajustado dinamicamente de acordo com diferentes variedades. No entanto, a seleção de parâmetros é muito importante. Se o parâmetro for muito pequeno, a taxa de desvio será muito sensível, se o parâmetro for muito grande, a taxa de desvio será muito lenta. Os resultados do cálculo da taxa de desvio são positivos e negativos. Quanto maior a taxa de desvio positivo, maior o lucro dos touros e maior a probabilidade de correção de preço.
Uma vez que a taxa de desvio é outra forma de média móvel, então também podemos adaptar uma estratégia de taxa de desvio duplo baseada na estratégia da média móvel dupla. A julgar pela relação posicional entre a taxa de desvio de curto prazo e a taxa de desvio de longo prazo, o estado atual do mercado é julgado. Se a taxa de desvio de longo prazo for maior que a taxa de desvio de curto prazo, ela realmente representa a média móvel de curto prazo para cima da média móvel de longo prazo, e vice-versa.
Passo 1: Escrever um quadro 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
A plataforma FMZ adota o modo de formação por rotação.main
função e umonTick
A função principal é a função de entrada da estratégia, e o programa executará o código linha por linha a partir da função principal.while
ciclo e executar repetidamente oonTick
Todos os códigos essenciais da estratégia são escritos noonTick
function.
Passo 2: Defina posições virtuais
mp = 0
A vantagem das posições virtuais é que é simples de escrever, e a operação iterativa é rápida. É geralmente usado no ambiente de backtest. Assume-se que cada ordem é completamente preenchida, mas a posição real é geralmente usada na negociação real.
Passo 3: Obter linha 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 a função FMZSetContractType
, pode subscrever o contrato do índice de rebar passando em GetRecords
Uma vez que leva um certo período para calcular a taxa de desvio, a fim de evitar erros de programa, se não houver linhas K suficientes, useif
instruções para filtrar.
Etapa 4: Calcular a taxa de desvio
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
De acordo com a fórmula para calcular a taxa de desvio, primeiro obtemos o preço de fechamento. Nesta estratégia, usamos o preço de fechamento da linha K anterior, o que significa que o sinal da linha K atual é estabelecido e a próxima linha K é para a colocação de ordens.talib
Por exemplo, a média móvel é:TA.MA
Esta função recebe 2 parâmetros, nomeadamente: K linha matriz e período média móvel.
Etapa 5: Envio de pedidos
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
A estratégia completa foi publicada no sítio web da FMZ:https://www.fmz.com/strategy/215129
Configuração de teste de retorno
Relatório de desempenho
Curva dos fundos
A taxa de desvio é uma ferramenta de negociação simples e eficaz que pode fornecer uma referência eficaz para os traders.