Estratégia linear de fluxo de pedidos pendentes desenvolvida com base na função de reprodução de dados

Autora:Lydia., Criado: 2022-12-23 20:06:04, Atualizado: 2023-09-20 09:41:28

img

Estratégia linear de fluxo de pedidos pendentes desenvolvida com base na função de reprodução de dados

Prefácio

Muitas vezes é dito que a negociação é uma arte, e a arte vem da inspiração.

Inspiração e sensação de mercado da negociação

O que geralmente chamamos de inspiração refere-se ao estado criativo que as pessoas produzem no processo de pensamento. Para os traders, nosso hemisfério esquerdo do nosso cérebro completou a formulação de uma série de regras, como escrita de estratégia, alocação de capital e configuração de parâmetros. A inspiração e a sensação de mercado da negociação vem do hemisfério direito do cérebro.

Muitas pessoas já ouviram falar da palavra "sentimento de mercado", que é uma espécie de sentimento vago, como um déjà vu do que está acontecendo no momento.

Como obter inspiração

Nos olhos de um leigo, o sentimento de mercado é misterioso. É um talento misterioso. Com ele, você pode ficar no mercado. Na verdade, é um resumo da experiência de negociação subjetiva pelo cérebro. É um vago sentimento de preconceito realizado através de anos de observação do mercado.

Embora, estritamente falando, a inspiração não seja exatamente a mesma coisa que o sentimento do mercado, acreditamos que, após milhares de vezes de refinamento do mercado, teremos uma compreensão mais profunda do mercado e poderemos desenvolver estratégias com facilidade.

No entanto, os futuros de commodities domésticos e as ações têm apenas algumas horas de tempo de negociação por dia, por isso seria esmagador melhorar a experiência de observar o mercado, formar seus próprios padrões de lucro e regras de negociação e treinar seus reflexos condicionados subconscientemente apenas a partir da negociação ao vivo. Além de pagar um longo custo de tempo, a maioria dos comerciantes também suporta o custo de perdas de capital.

Como usar a reprodução de dados

A função de reprodução de dados pode ser treinada independentemente dos horários de negociação da bolsa, e suporta uma variedade de futuros de commodities e variedades de moeda digital. O mercado pode ser reproduzido manualmente ou automaticamente, e o tempo de início e fim e a velocidade de reprodução do mercado histórico podem ser definidos livremente.

Abrir o sítio oficial da FMZ Quant (fmz.comPara registrar e fazer login, clique no banco de dados no painel de controle para exibir a página da função de reprodução de dados. Existem quatro caixas de opções e um botão de seleção. Primeiro, clique no botão de seleção para exibir apenas as variedades que suportam a reprodução de bots reais, selecione as variedades a serem reproduzidas no canto superior esquerdo, selecione a hora de início e final dos dados nas duas caixas de opções seguintes, selecione o período de tempo dos dados como reprodução de bots reais e, finalmente, clique no botão Go no canto direito para iniciar a função de reprodução de dados.

img

Há três seções sob o rótulo de dados. À esquerda está o histórico de negociação, onde todos os pedidos que foram fechados são exibidos em ordem cronológica. No meio está a profundidade de 20 posições de cada pedido de compra e venda. À direita está a área de controle de reprodução de dados, onde você pode selecionar métodos manuais e automáticos de reprodução de dados, assim como usando um media player.

img

O índice de posição pode arrastar o cursor para frente e para trás da esquerda para a direita, permitindo que você selecione a hora de início da reprodução de dados rapidamente.

img

A velocidade de reprodução de dados também pode ser controlada na parte inferior movendo o cursor para a direita e para a esquerda, em milissegundos, para acelerar e desacelerar os dados durante a reprodução.

img

Construir a lógica da estratégia

Embora existam muitos fatores que afetam o aumento e diminuição do preço, incluindo o ambiente econômico global, políticas macroeconômicas nacionais, políticas industriais relevantes, relações de oferta e demanda, eventos internacionais, taxas de juros e taxas de câmbio, inflação e deflação, psicologia do mercado, fatores desconhecidos, etc., o preço final no mercado é o resultado da concorrência entre várias partes e o lado da posição curta. Se mais pessoas comprarem do que venderem, o preço aumentará; Pelo contrário, se mais pessoas venderem do que comprarem, o preço diminuirá. Então só precisamos analisar o preço para fazer uma estratégia de negociação.

Através da reprodução FMZ Quant dos últimos meses s pares de negociação BTC_USDT da exchange Binance, descobrimos que quando o mercado aumentou e diminuiu acentuadamente, o livro de pedidos dos dados Tick é claramente assimétrico em termos do volume de ordens entre as posições longas e curtas. Quando o mercado está aumentando, o número de ordens longas é obviamente maior do que o número de ordens curtas; Quando o mercado está aumentando, o número de ordens curtas é obviamente maior do que o número de ordens longas. Então, podemos prever o preço aumentando e diminuindo em um curto período de tempo com base no volume de ordens pendentes na livro de ordens?

A resposta é sim.

img

Quando o mercado está a aumentar, o número de ordens longas é obviamente maior do que o número de ordens short.

img

Quando o mercado está a diminuir, o número de ordens de curto prazo é obviamente maior do que o número de ordens de longo prazo.

Podemos coletar dados de Tick em profundidade para calcular as ordens pendentes longas e curtas e compará-las, se as ordens pendentes longas e curtas combinadas forem muito diferentes, pode ser uma oportunidade de negociação potencial. Por exemplo, quando o número de ordens de posição longa é N vezes maior que as ordens de posição curta, podemos pensar que a maioria das pessoas no mercado é otimista e a probabilidade de aumento do preço aumentará em um curto período de tempo no futuro; Quando o número de vendedores curtos é N vezes maior que o de vendedores longos, podemos pensar que a maioria das pessoas no mercado é baixa e a probabilidade de queda do preço aumentará no futuro próximo.

Escrever uma estratégia de negociação

De acordo com a lógica estratégica acima, ele começa a ser implementado em código.fmz.com> Login > Dashboard > Estratégia > Adicionar Estratégia > Clique no menu suspenso no canto superior direito para selecionar a linguagem Python e começar a escrever estratégias.

Passo 1: Escrever o quadro estratégico

# Strategy main function
def onTick():
    pass


# Program entry
def main():
    while True:  # Enter the infinite loop mode
        onTick()  # Execute the strategy main function
        Sleep(1000)  # Sleep for 1 second

Nós devemos escrever nossa estratégia de grande para pequeno, assim como construir uma casa, construindo o quadro primeiro e depois a parede. Neste quadro, usamos duas funções: a função principal e a função onTick. A função principal é a entrada do programa, ou seja, o programa será executado a partir daqui, em seguida, entrar no modo de loop infinito, e executar a função onTick repetidamente. Então só precisamos escrever o conteúdo da estratégia na função onTick.

Passo 2: Escrever variáveis globais

vol_ratio_arr = []  # Long/Short positions pending order ratio array
mp = 0  # Virtual positions

A razão pela qual vol_ratio_arr é definido como uma variável global, porque minha estratégia precisa coletar a proporção de posições longas e curtas pendentes de um pedaço de dados Tick. Se colocarmos a variável vol_ratio_arr na função onTick, é obviamente irracional executar com o loop. O que precisamos é mudar o valor da variável no modo loop quando uma certa condição é atendida. A maneira mais razoável é colocar a variável fora do loop.

O gerenciamento de posições é muito necessário, porque está relacionado à lógica de negociação. Geralmente, nós calculamos os pares de moedas mantidos adquirindo contas em transações ao instante.

Passo 3: Calcule a razão múltipla vazia atual

depth = exchange.GetDepth()  # Get depth data
asks = depth['Asks']  # Get asks array
bids = depth['Bids']  # Get bids array
asks_vol = 0  # All pending orders at ask price
bids_vol = 0  # All pending orders at bid price
for index, ask in enumerate(asks):  # Iterate through the ask price array
    # Linear calculation of all pending orders at the ask price
    asks_vol = asks_vol + ask['Amount'] * (20 - index)
for index, bid in enumerate(bids):  # Iterate through the bid price array
    # Linear calculation of all pending orders at the bid price
    bids_vol = bids_vol + bid['Amount'] * (20 - index)
bidask_ratio = bids_vol / asks_vol  # Calculate long/short position ratio

Como todos sabemos, a moeda digital é geralmente 20 níveis de dados profundos, então podemos somar o número de ordens de posição longa e curta para calcular a relação entre posições longas e curtas. Quando este valor é maior que 1, significa que as pessoas otimistas são maiores do que as pessoas de baixa, indicando que o preço aumentará em um curto período de tempo no futuro; quando este valor é menor que 1, significa que as pessoas de baixa são maiores do que as pessoas de alta, indicando que o preço cairá em um curto período de tempo no futuro.

No entanto, há um ponto a ser distinguido. Quanto mais próxima a ordem pendente estiver do mercado de abertura, mais forte será o desejo de alta ou berish. Por exemplo, a ordem do primeiro nível é definitivamente mais disposta a alta do que a do nível 20. Portanto, quando acumulamos as ordens pendentes, precisamos dar diferentes pesos às ordens dos níveis 20 de forma linear, o que será mais razoável.

Etapa 4: Cálculo linear do rácio posição longa/curta num período de tempo

global vol_ratio_arr, mp  # Introduce global variables
vol_ratio_arr.insert(0, bidask_ratio)  # Put the long/short position ratio into the global variable array
if len(vol_ratio_arr) > 20:  # If the array exceeds the specified length
    vol_ratio_arr.pop()  # Delete the oldest elements
all_ratio = 0  # Temporary variable, ratio of all long and short position pending orders
all_num = 0  # Temporary variables, all linear multipliers
for index, vol_ratio in enumerate(vol_ratio_arr):  # Variable global variable arrays
    num = 20 - index  # Linear multiplier
    all_num = all_num + num  # Linear multiplier accumulation
    all_ratio = all_ratio + vol_ratio * num  # Accumulation of all long and short position pending orders ratio
ratio = all_ratio / all_num  # Linear long and short position pending order ratio

A relação posição longa-curta pode ser obtida dividindo as ordens pendentes cumulativas longas pelas ordens pendentes cumulativas curtas. No entanto, este é apenas um dado de tick. Se apenas um dado de tick for usado, pode não ser uma escolha sábia para decidir transações de compra e venda, porque no mercado em rápida mudança, um dado de tick não é convincente.

Passo 5: Faça um pedido

last_ask_price = asks[0]['Price']  # Latest buy one price for asks
last_bid_price = bids[0]['Price']  # Latest sell one price for bids
if mp == 0 and ratio > buy_threshold:  # If no currency is held currently, and the ratio is greater than the specified value
    exchange.Buy(last_ask_price, 0.01)  # Buy
    mp = 1  # Set the value of virtual position
if mp == 1 and ratio < sell_threshold:  # If there is currency held currently, and the ratio is less than the specified value
    exchange.Sell(last_bid_price, 0.01)  # Sell
    mp = 0  # Reset the value of virtual position

Como precisamos especificar um preço ao fazer um pedido, podemos usar diretamente o último preço de venda ao comprar; Quando vender, você pode usar diretamente o último preço de compra.

Conclusão

A função de reprodução de dados pode ajudar você a analisar seus problemas passados, verificar e melhorar suas estratégias de negociação, melhorar a confiança dos traders nas estratégias e ajudar a gerar nova inspiração estratégica. Para os traders avançados, a reprodução dinâmica pode ajudá-los a analisar seus problemas passados, verificar e melhorar suas estratégias de negociação, melhorar a confiança dos traders nas estratégias e ajudar a gerar nova inspiração estratégica.


Relacionados

Mais.