avatar of 发明者量化-小小梦 发明者量化-小小梦
focar em Mensagem privada
4
focar em
1271
Seguidores

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

Criado em: 2019-12-13 17:13:07, atualizado em: 2024-12-15 16:04:23
comments   3
hits   2353

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

Prefácio

As pessoas costumam dizer que negociar é uma arte, e a arte vem da inspiração. Então, hoje eu quero compartilhar com vocês como usar a função Quantitative Data Replay do Inventor para descobrir sua própria inspiração de negociação.

Inspiração de negociação e senso de mercado

O que normalmente chamamos de inspiração se refere ao estado criativo que as pessoas experimentam instantaneamente durante o processo de pensamento. Para os traders, o hemisfério esquerdo do cérebro completa a formulação de uma série de regras, como escrita de estratégias, alocação de capital e definição de parâmetros. Essas inspirações de negociação e percepção de mercado vêm do hemisfério direito do cérebro.

Muitas pessoas já ouviram o termo “sensação de mercado”, que é uma sensação indescritível, como se o que está acontecendo agora parecesse familiar. Ao negociar, essa intuição semelhante ao sexto sentido, embora não seja baseada em raciocínio lógico e análise, levará os traders a tomar decisões de compra ou venda com base em suas premonições de tendências futuras do mercado.

Como obter inspiração

Para os de fora, o senso de mercado é um talento misterioso que permite que você ganhe sem nenhuma jogada. Com ele, você pode ganhar uma posição no mercado. Na verdade, o senso de mercado é um resumo da experiência subjetiva de negociação pelo cérebro. É um sentimento preditivo vago obtido por meio de anos observando o mercado.

Embora, estritamente falando, a inspiração não seja totalmente igual ao senso de mercado, acredito que depois de milhares de vezes de experiência no mercado, todos terão uma compreensão mais profunda do mercado e serão hábeis em desenvolver estratégias. Portanto, se você deseja adquirir esse talento e desenvolver mais estratégias de negociação, não há outra maneira a não ser praticar até ter a oportunidade. Somente por meio de um grande número de transações você pode aperfeiçoar seu sistema de negociação.

No entanto, os futuros de commodities nacionais e ações têm apenas algumas horas de negociação por dia. Se você apenas melhorar sua experiência em observar o mercado por meio de negociações reais, formar seu próprio modelo de lucro e regras de negociação e treinar seus reflexos condicionados subconscientemente, isso ser difícil alcançar o sucesso. Eu não consigo fazer isso. Além de pagar um custo de tempo maior, a maioria dos traders também tem que arcar com o custo da perda de capital. Para resolver esse problema, os inventores desenvolveram quantitativamente uma função de reprodução de dados.

Como usar o Data Replay

A função de reprodução de dados pode ser treinada sem ser restringida pelo horário de negociação da bolsa e suporta uma variedade de commodities futuras e variedades de moeda digital. As condições de mercado podem ser reproduzidas manualmente ou automaticamente, e os horários de início e término das condições históricas de mercado e a velocidade de reprodução pode ser definida livremente. Comparado com outros softwares que comumente usam métodos de reprodução de dados K-line, o Inventor Quantitative usa métodos de reprodução de dados em nível de Tick, que é um ambiente de backtesting realmente próximo da negociação real, reproduzindo os dados de preço e volume, permitindo que os traders sejam imersos em a experiência.

Abra o site oficial do Inventor Quantitative (fmz.com), registre-se e faça login, depois clique em Exploração de Dados no centro de controle para exibir a página da função de reprodução de dados. Há quatro caixas de opção e um botão de seleção. Primeiro, clique no botão de seleção para exibir apenas as variedades que suportam reprodução em tempo real. Em seguida, selecione a variedade a ser reproduzida no canto superior esquerdo e, em seguida, selecione o início e o fim hora dos dados nas próximas duas caixas de opção. Selecione o período de tempo dos dados como reprodução em tempo real e, finalmente, clique no botão Go na extrema direita para iniciar a função de reprodução de dados.

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

Há três seções sob o rótulo de dados. À esquerda está o histórico de transações, que exibe todas as ordens executadas em ordem cronológica. No meio estão os dados de mercado com 20 níveis de profundidade para compra e venda. À direita está a área de controle de reprodução de dados, onde você pode escolher métodos de reprodução de dados manuais e automáticos, tão fácil quanto usar um media player.

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

O índice de posição pode ser arrastado para frente e para trás para selecionar rapidamente o horário de início da reprodução de dados.

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

Na parte inferior, você também pode controlar a velocidade de reprodução de dados movendo o cursor para a direita ou esquerda. A unidade de tempo é milissegundos. Você pode acelerar ou desacelerar a reprodução de dados.

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

Lógica de estratégia de construção

Embora existam muitos fatores que afetam as flutuações de preços, incluindo: 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 de mercado, fatores desconhecidos, etc. , a situação final do mercado O preço acima é o resultado da competição entre touros e ursos. Se houver mais compradores do que vendedores, o preço aumentará; inversamente, se houver mais vendedores do que compradores, o preço cairá. Então só precisamos analisar o preço para criar uma estratégia de negociação.

Por meio da reprodução quantitativa do inventor do par de negociação btc_usdt na Binance Exchange no mês passado, descobrimos que quando o mercado subia ou despencava, o volume de ordens dos lados longo e curto do livro de ordens de dados do Tick era obviamente assimétrico. Quando o mercado sobe acentuadamente, o volume de ordens longas é significativamente maior que o volume de ordens curtas; quando o mercado cai acentuadamente, o volume de ordens curtas é significativamente menor que o volume de ordens longas. Então, podemos prever a alta e a queda dos preços em um curto período de tempo com base no número de ordens no livro de ordens?

A resposta é sim.

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

Podemos coletar dados de ticks profundos, calcular o volume de ordens longas e curtas e compará-los. Se o volume combinado de ordens longas e curtas for muito diferente, pode ser uma oportunidade potencial de compra ou venda. Por exemplo, quando o número de ordens longas é N vezes maior que o de ordens curtas, podemos assumir que a maioria das pessoas no mercado está otimista e a probabilidade de aumentos de preços no curto prazo aumentará; quando o número de ordens curtas é N vezes maior que as ordens longas. Neste momento, podemos supor que a maioria das pessoas no mercado está pessimista e que a probabilidade de queda de preços no curto prazo no futuro aumentará.

Escrevendo uma estratégia de negociação

De acordo com a lógica da estratégia acima, comece a implementá-la com código. Abra na sequência: site fmz.com > Login > Centro de controle > Biblioteca de políticas > Nova política > Clique no menu suspenso no canto superior direito e selecione a linguagem Python para começar a escrever políticas. Esta estratégia é apenas um ponto de partida para o ensino, então tentei mantê-la o mais concisa possível. Por favor, preste atenção aos comentários no código abaixo.

Etapa 1: Escreva uma estrutura de política

# 策略主函数
def onTick():
    pass


# 程序入口
def main():
    while True:  # 进入无限循环模式
        onTick()  # 执行策略主函数
        Sleep(1000)  # 休眠1秒

Quando escrevemos estratégias, devemos escrever do maior para o menor, assim como na construção de uma casa: primeiro construa a estrutura e depois as paredes. Nesta estrutura, usamos duas funções: função main e função onTick. A função principal é o ponto de entrada do programa, o que significa que o programa será executado a partir daqui e, em seguida, entrará no modo de loop infinito, executando repetidamente a função onTick. Então só precisamos escrever o conteúdo da estratégia na função onTick.

Etapa 2: Escreva variáveis ​​globais

vol_ratio_arr = []  # 多空挂单比率数组
mp = 0  # 虚拟持仓

A razão pela qual vol_ratio_arr é definido como uma variável global é que minha estratégia precisa coletar a proporção de ordens longas e curtas para um período de dados Tick. Se colocarmos a variável vol_ratio_arr na função onTick, é obviamente irracional executar com a loop. O que precisamos é de Em um padrão, o valor de uma variável é alterado somente quando uma certa condição é atendida. A abordagem mais razoável é colocar a variável fora do loop.

O gerenciamento de posição é muito necessário porque está relacionado à lógica de compra e venda. Geralmente, no spot trading, calculamos os pares de moedas mantidos obtendo a conta. Para simplificar o código, uma variável de posição virtual global é definida diretamente aqui para controlar a lógica de compra e venda.

Etapa 3: Calcular a relação long-short atual

depth = exchange.GetDepth()  # 获取深度数据
asks = depth['Asks']  # 获取卖价数组
bids = depth['Bids']  # 获取买价数组
asks_vol = 0  # 所有卖价挂单
bids_vol = 0  # 所有买价挂单
for index, ask in enumerate(asks):  # 遍历卖价数组
    # 线性计算所有卖价挂单
    asks_vol = asks_vol + ask['Amount'] * (20 - index)
for index, bid in enumerate(bids):  # 遍历买价数组
    # 线性计算所有买价挂单
    bids_vol = bids_vol + bid['Amount'] * (20 - index)
bidask_ratio = bids_vol / asks_vol  # 计算多空比率

Como todos sabemos, as moedas digitais geralmente têm 20 níveis de dados de profundidade, então podemos somar as ordens longas e curtas para calcular a proporção de longas para curtas. Quando esse valor é maior que 1, significa que mais pessoas estão otimistas do que bearish. , indicando que o preço subirá no curto prazo no futuro; quando esse valor for menor que 1, significa que o número de pessoas bearish é maior que o número de pessoas bullish, indicando que o preço cairá no futuro. curto prazo no futuro.

Mas uma coisa precisa ser distinguida. Quanto mais próxima a ordem pendente estiver do preço de mercado, mais forte será o sentimento de alta ou baixa. Por exemplo, uma ordem de compra colocada no primeiro nível definitivamente indica um sentimento de alta mais forte do que uma ordem de compra colocada no 20º nível. Portanto, ao acumular pedidos pendentes, precisamos dar pesos diferentes aos 20 pedidos de forma linear, o que será mais razoável.

Etapa 4: Calcular linearmente a relação longo-curto ao longo de um período de tempo

global vol_ratio_arr, mp  # 引入全局变量
vol_ratio_arr.insert(0, bidask_ratio)  # 把多空比率放到全局变量数组里面
if len(vol_ratio_arr) > 20:  # 如果数组超过指定长度
    vol_ratio_arr.pop()  # 删除最旧的元素
all_ratio = 0  # 临时变量,所有多空挂单比率
all_num = 0  # 临时变量,所有线性乘数
for index, vol_ratio in enumerate(vol_ratio_arr):  # 变量全局变量数组
    num = 20 - index  # 线性乘数
    all_num = all_num + num  # 线性乘数累加
    all_ratio = all_ratio + vol_ratio * num  # 所有多空挂单比率累加
ratio = all_ratio / all_num  # 线性多空挂单比率

A relação long-short pode ser obtida dividindo as ordens long acumuladas pelas ordens short acumuladas, mas isso é apenas os dados de um tick. Pode não ser uma escolha sensata decidir sobre transações de compra e venda com base em apenas dados de um tick , porque no mercado em constante mudança, um tick pode mudar a tendência do mercado. Os dados do tick não são convincentes. Portanto, precisamos coletar um período fixo de dados de ticks e, então, usar o cálculo linear para obter um valor justo.

Etapa 5: Faça um pedido

last_ask_price = asks[0]['Price']  # 最新卖一价,用于买入的价格
last_bid_price = bids[0]['Price']  # 最新买一价,用于卖出的价格
if mp == 0 and ratio > buy_threshold:  # 如果当前无持币,并且比率大于指定值
    exchange.Buy(last_ask_price, 0.01)  # 买入
    mp = 1  # 设置虚拟持仓的值
if mp == 1 and ratio < sell_threshold:  # 如果当前持币,并且比率小于指定值
    exchange.Sell(last_bid_price, 0.01)  # 卖出
    mp = 0  # 重置虚拟持仓的值

Como precisamos especificar um preço ao fazer um pedido, podemos usar diretamente o último preço de venda ao comprar e o último preço de compra ao vender. Por fim, após a ordem ser feita e a transação concluída, redefina o valor da posição virtual.

Conclusão

O acima é a análise de código da estratégia de fluxo de ordem linear desenvolvida com base na função de reprodução de dados. Se você é iniciante em negociação, a função de reprodução de dados pode ajudá-lo a aprender a negociar a custo zero e encurtar o tempo para entender a negociação. Geralmente leva vários anos para aprender a negociar em negociações reais ou simuladas. Os resultados iniciais são vistos. O mesmo efeito pode ser alcançado em algumas semanas usando a função de reprodução de dados, permitindo que você aprenda a negociar com perdas mínimas sem perder tempo. Para traders avançados, a revisão dinâmica pode ajudar a analisar seus problemas anteriores, verificar e melhorar estratégias de negociação, aumentar a confiança dos traders nas estratégias e ajudar a gerar inspiração para novas estratégias.