O recurso está a ser carregado... Carregamento...

Hans123 estratégia de avanço intradiário

Autora:Bem-estar, Criado: 2020-08-12 11:38:39, Atualizado: 2023-10-10 21:15:02

img

Prefácio

A estratégia HANS123 foi aplicada principalmente ao mercado de câmbio. Seu método de negociação é relativamente simples e pertence ao sistema de ruptura de tendência. Este método de negociação pode entrar no mercado assim que a tendência se forma, por isso é favorecido por muitos comerciantes. Até agora, a HANS123 expandiu muitas versões, vamos entender e implantar a estratégia HANS123 juntos.

img

Princípio da Estratégia

Algumas pessoas acreditam que a abertura do mercado pela manhã é o momento em que o mercado tem a maior divergência. Após cerca de 30 minutos, o mercado digerirá completamente todos os tipos de informações durante a noite, e a tendência de preços tenderá a ser racional e retornar ao normal. Em outras palavras: a tendência do mercado nos primeiros 30 minutos ou mais constitui basicamente o padrão geral de negociação hoje.

  • Ferrovia superior: o preço mais elevado no prazo de 30 minutos após a abertura
  • Ferrovias inferiores: o preço mais baixo no prazo de 30 minutos após a abertura

Os pontos altos e baixos relativos gerados neste momento formam os pontos altos e baixos efetivos na Teoria Dow, e a estratégia HANS123 é a lógica de negociação estabelecida por isso. No mercado de futuros doméstico, o mercado abre às 09:00 da manhã e às 09:30 você pode julgar se é longo ou curto hoje. Quando o preço atravessa o ponto alto para cima, o preço continuará facilmente a subir; quando o preço atravessa o ponto baixo para baixo, o preço continuará facilmente a cair.

  • Abertura de posição longa: não existe atualmente nenhuma posição de retenção e o preço rompe acima do nível superior
  • Abertura de posição curta: atualmente não há posição de detenção e o preço rompe abaixo do nível inferior

Embora a estratégia de ruptura possa entrar no mercado assim que a tendência for formada. Mas essa vantagem também é uma espada de dois gumes. Como resultado da entrada sensível, a ruptura de preço falhou. Portanto, é necessário definir um stop loss. Ao mesmo tempo, para alcançar a lógica de estratégia de ganhar e perder, o take profit deve ser definido.

  • Posição longa stop loss: a posição longa atual atingiu o montante da perda
  • Stop loss da posição curta: a posição curta atual atingiu o montante da perda
  • Obter lucro por posições longas, manter posições longas e atingir o valor do lucro
  • Obter lucro por posições curtas, manter posições curtas e atingir o montante do lucro

Escrever estratégias

Abertura por turnos:fmz.comsite> Login > Dashboard > Strategy Library > New Strategy > Clique no menu suspenso no canto superior direito para selecionar a linguagem Python e começar a escrever a estratégia. Preste atenção aos comentários no código abaixo.

Passo 1: Escrever o quadro 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

Escrever um quadro estratégico, isto foi aprendido no capítulo anterior, um é oonTickfunção, e o outro é omainA função, na qual oonTickfunção é executada em um loop infinito nomain function.

Passo 2: Defina variáveis globais

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

Como os trilhos superior e inferior só são contados às 09:30, e nenhuma estatística é feita no resto do tempo, precisamos escrever essas duas variáveis fora do loop.trade_countAntes de usar estas duas variáveis globais na função principal doonTickestratégia, você precisa usar oglobalpalavra-chave para referência.

Passo 3: Obter os dados

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 obter dados, primeiro utilize oSetContractTypeA sua função na plataforma FMZ API para subscrever variedades de futuros e, em seguida, usar oGetRecordsVocê também pode passar na matriz de linha K especificandoPERIOD_M11minutos quando se utiliza oGetRecords function.

O próximo passo é obter o preço mais recente, que é usado para determinar a relação de posição entre o preço atual e os trilhos superior e inferior. Ao mesmo tempo, ao colocar uma ordem usando a função Comprar ou Vender, você precisa passar no preço especificado. Além disso, não se esqueça de filtrar o número de barras de linha k, porque se o número de barras de linha k for muito pequeno, haverá um erro que não pode ser calculado.

Etapa 4: Função de tempo de processamento

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)

Ao calcular os trilhos superior e inferior e colocar ordens, é necessário julgar se a hora atual corresponde à hora de negociação especificada por nós, de modo a facilitar o julgamento, precisamos lidar com as horas e minutos específicos da linha K atual.

Passo 5: Calcule os trilhos 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

Etapa 6: Obter posições

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

O status da posição envolve a lógica estratégica. as nossas primeiras dez lições sempre usaram posições de detenção virtuais, mas em um ambiente de negociação real, é melhor usar oGetPositionFunção para obter informações sobre posições reais, incluindo: direção da posição, lucro e perda da posição, número de posições, etc.

Passo 7: Faça um 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 erros de lógica na estratégia, é melhor escrever a lógica da posição de fechamento antes da lógica da posição de abertura. Nesta estratégia, ao abrir uma posição, primeiro determine o status da posição atual, se está dentro do tempo de negociação especificado, e depois determine a relação entre o preço atual e os trilhos superior e inferior. Para fechar uma posição é primeiro determinar se está perto do fechamento do mercado, ou se atingiu as condições de lucro e parada de perda.

O HANS123 é uma estratégia de negociação automatizada muito típica e muito eficaz. Seu princípio básico é romper o preço mais alto ou mais baixo do mercado anterior dentro de um determinado período de tempo. O sistema pode ser aplicado a quase todos os produtos de câmbio com lucratividade estável. Este também é um modo de negociação de entrada inicial, com tecnologia de filtragem apropriada, ou pode melhorar suas chances de ganhar.

Estratégia completa

Clique para copiar o código fonte da estratégia completahttps://www.fmz.com/strategy/179805backtest sem configuração

Fim

O que está acima é o princípio e a análise de código da estratégia HANS123. Na verdade, a estratégia HANS123 fornece um melhor momento para entrar no mercado. Você também pode melhorar o tempo de saída de acordo com sua compreensão do mercado e compreensão da transação, ou de acordo com a volatilidade da variedade Para otimizar parâmetros como tirar lucro e parar a perda para alcançar melhores resultados.


Relacionados

Mais.