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

A quantificação do círculo de moedas é algo novo para mim - o que me leva a quantificar o círculo de moedas.

Autora:Inventor quantificado - sonho pequeno, Criado: 2021-04-19 14:16:21, Atualizado: 2023-09-24 19:30:05

img

A quantificação do círculo de moedas é uma nova visão que o leva a aproximar-se do círculo de moedas.

No artigo anterior, falamos de um script de negociação programada. Na verdade, a estratégia de negociação é um script de negociação, o artigo fala principalmente sobre o script de negociação que precisa de um veículo de hardware (onde o programa é executado), que pode ser escrito em uma linguagem de programação de computador (listas de três linguagens de programação usadas pelos inventores em plataformas de negociação quantitativa, e, claro, a própria negociação programada pode ser implementada com qualquer linguagem de programação).

Script de transações programadas

  • Tipos de estratégias de negociação Os novatos em negociação programada e quantitativa podem ser confundidos com vários nomes, como estratégias de tendência, estratégias de arbitragem, estratégias de alta frequência, estratégias de rede.

    • Estratégias de hedge Simplificando, basicamente, uma estratégia como manter posições muito boas e muito ruins pode ser classificada como uma estratégia de arbitragem. Existem muitas categorias específicas, como cross-market, cross-term, futures, futures, cross-variety, etc.
    • Estratégias de tendência Em outras palavras, é uma estratégia para acompanhar a tendência, como a dupla linha de equilíbrio, o MACD e outras estratégias.
    • Estratégia de retorno Por exemplo, estratégias de grelha para lucrar com os fluxos de preços em mercados turbulentos.
    • Estratégias de alta frequência Simplificando, é uma estratégia de negociação de alta frequência através de algoritmos que exploram a estrutura microscópica do mercado, as regras, as oportunidades e muito mais.

    A estratégia é dividida em estratégias de negociação, que podem ser divididas de acordo com o conceito de estratégia do inventor.

    • Estratégia de uma única variedade Isso significa que a estratégia opera apenas uma variedade, como negociar BTC ou negociar ETH.
    • Estratégias multiculturais Em outras palavras, é uma lógica estratégica de operar várias variedades.
    • Políticas de múltiplas contas Simplificando, é um objeto de troca configurado em um disco real (o conceito de troca foi apresentado no artigo anterior, configurando o objeto de troca do API KEY para representar uma conta de troca). Por exemplo, algumas estratégias de listagem, várias contas seguem operações juntas (pode ser a mesma troca, ou pode ser diferentes trocas), em suma, um objeto de troca administrado em um disco real (contas).
    • Estratégias multilógicas Em um disco físico, por exemplo, a estratégia MACD, a estratégia linear, a estratégia de grelha, etc. (claro, é para operar objetos de diferentes exchanges, operando os mesmos objetos de exchanges para ver se a estratégia específica é logicamente conflitante)
  • Interface de API de troca Como é que o script de negociação programada opera a conta da bolsa? A resposta é a interface API aberta através da bolsa. Então, quais são os tipos de interfaces abertas para o mercado? No artigo anterior, na seção "Exchanges", falamos sobre o uso de interfaces REST e Websocket em geral. Aqui, adicionamos um pouco de conceito a partir do nível do programa estratégico.

    • Interfaces sem necessidade de autenticação Geralmente conhecido como um pin de interface pública, este tipo de interface não requer verificação.API KEY(Esqueça o que é o API KEY e desligue para o artigo anterior). Estas interfaces são geralmente interfaces de mercado, como consultar o mercado de profundidade, consultar dados da linha K, consultar taxas de capital, consultar informações sobre a variedade de transações, consultar o horário do servidor do exchange, etc. Simplificando, uma interface que não tem nada a ver com a sua conta pode ser considerada uma interface pública (não precisa de autenticação).
      Em plataformas de negociação quantificadas pelos inventores, quando as funções de API não validadas são chamadas (interfaces não validadas, interfaces públicas de exchanges) os dados que retornam às interfaces podem ser normalmente obtidos mesmo que a configuração do API KEY seja errada.

    • Interfaces que precisam de autenticação Simplificando, é uma interface que precisa de autenticação (verificação por meio de um API KEY), chamada de interface privada. Essa interface geralmente está relacionada a algumas ações ou informações da sua conta, como consultar os ativos da conta, consultar o estoque da conta, questionar sobre a suspensão, transferir uma única consulta, transferir, ajustar a alavancagem da moeda, configurar o modo de estoque, etc. A partir de agora, o número de pessoas que vão para o hospital será reduzido. Na plataforma de negociação quantitativa do inventor, quando a função API é chamada para ser verificada (interfaces que requerem verificação, interfaces privadas de exchanges envolvidos), se o API KEY for configurado de forma errada, o interfaz será chamada e retornará um valor em branco.

    Então, como é que estas interfaces são usadas nas plataformas de negociação quantitativa dos inventores?

    A plataforma de negociação quantitativa do inventor envolve o comportamento do exchange, definindo interfaces consistentes (por exemplo, interfaces de linha K, interfaces de mercado profundo, interfaces de consulta de ativos atuais, interfaces de download, interfaces de retirada de pedidos, etc.) que são chamadas de funções de API do inventor na plataforma de negociação quantitativa do inventor, que podem ser consultadas consultando a documentação do API.https://www.fmz.com/api )。

    Então, como é que algumas interfaces de exchange comportamentais, não definidas de forma uniforme, são usadas nas plataformas de negociação quantitativas dos inventores?

    Essas interfaces podem ser usadas por exemplo: transferência de ativos, encomendas condicionais, encomendas em volume, retiradas em volume, encomendas de modificação, etc. Algumas delas são disponíveis, outras não, e as funções e os detalhes de uso podem variar muito, por isso essas interfaces são passadas pela plataforma de negociação quantitativa do inventor.exchange.IOPara acessar esta função, veja o documento da API do inventor da plataforma de negociação quantitativa:https://www.fmz.com/api#exchange.io..A plataforma de negociação quantitativa de inventores também tem algumas estratégias de exemplo de IO práticas.

    Será que todas as funções de API na documentação da plataforma de negociação quantitativa do inventor geram solicitações de rede?

    Se a interface API do exchange tiver uma freqüência de acesso limitada (por exemplo, 5 vezes por segundo, etc.), não pode ser acessada com muita frequência, caso contrário, o acesso será recusado (a maioria das exchanges é 429). Nem todas as funções de API dos inventores de plataformas de negociação quantitativa geram solicitações de rede, e algumas funções de API de alguns inventores apenas modificam algumas configurações locais, como definir o par de negociação atual, definir o código do contrato, a função de cálculo de indicadores, obter o nome do objeto do exchange, etc. Basicamente, o uso da função pode determinar se há ou não um pedido de rede, desde que a obtenção de dados da bolsa, a operação de contas da bolsa, etc. gerem um pedido de rede, e essas interfaces precisam prestar atenção à frequência de chamadas.

    • Aqui estão algumas questões e experiências comuns quando os inventores usam funções de API em plataformas de negociação quantitativa.

      • Permitir erros Este é o erro mais comum, que incomoda inúmeras novidades, muitas vezes a estratégia de revisão de bom tudo está bem, por que o disco real funciona por um tempo (trigger pode ocorrer a qualquer momento) e o disco real desliga ~

        img

        Quando se escreve uma política, é necessário verificar os dados que a interface retorna, por exemplo, para obter uma transação na plataforma de negociação de quantificação do inventor (o mesmo acontece quando se escreve um programa para acessar diretamente a interface da bolsa):var ticker = exchange.GetTicker()E se nós precisamos usar isso.tickerA função GetTicker retorna a estrutura das variáveis (verLast(Preços recentes)var newPrice = ticker.LastAssim obtemos dados ((newPrice é o que?new: mais recente,Price: preço, sim! combinado!)GetTicker()A função retorna dados normais, mas se ocorrerem atrasos de solicitação, erros de rede, desligamento de cabos de câmbio, cortes de cabos, bebê puxando o elétrico, etc.GetTicker()Função de retornonullPor enquanto.tickerO valor é:nullEu vou visitá-lo novamente.LastA partir daí, o processo pode ser interrompido por uma anomalia. Assim, parece que um falhanço de chamada de interface (GetTicker falha de chamada de retorno null) não é a causa direta que causou a parada da política de disco real (a causa direta é acessar umnullAs propriedades das variáveis), a chamada de interfaces falhou e não causou a interrupção do disco real (marcas de destaque). Então, o que podemos fazer para evitar que o disco real pare de funcionar? A resposta é que, se você fizer um erro com os dados que a interface retorna, é muito simples, apenas julgar se os dados que retorna são verdadeiros ou falsos.null(Exemplo do JavaScript, outras linguagens são basicamente similares) Escreva um pequeno parágrafo de código para explicar (isso é apenas uma explicação, executar diretamente é uma brincadeira!)

        var ticker = exchange.GetTicker()
        if (ticker) {
            var newPrice = ticker.Last
            Log("打印最新价格:", newPrice)
        } else {
            // 数据为null,不做操作就不会出问题
        }
        

        Não só.GetTickerAs interfaces que têm solicitações de rede precisam ser erroneas em relação ao valor de retorno (se você usar o valor de retorno de uma função) Há muitas maneiras de perdoar erros._C()Funções (ver FMZ API documentação), escrever suas próprias funções tolerantes a erros, projetar seus próprios mecanismos tolerantes a erros, lógica. Sobre_C()A função é uma função que muitos alunos recém-chegados provavelmente estão usando mal._C()Os parâmetros de uma função são referências de funções, não chamadas de funções._C(funcName, param1, param2), chamada corretamente, funcName sem parênteses, param1, param2 são os parâmetros a serem transmitidos para funcName._C(funcName(param1, param2))A primeira coisa que você pode fazer é fazer uma chamada errada, que geralmente ocorre quando você não lê seriamente os documentos da API do FMZ.

      • Quantidade de encomendas a preços de mercado A quantidade de ordem de pagamento do mercado de opções binárias também é muito fácil de enganar, como foi dito no artigo anterior, a quantidade de ordem de pagamento do mercado de opções binárias geralmente é o valor (exchanges muito diferentes podem ser outras configurações, geralmente essas configurações especiais no FMZ são explicadas na documentação do FMZ API), por exemplo, eu testei com o OKEX V5 simulador: O par de transações é definido como:LTC_USDT

        function main() {
            exchange.IO("simulate", true)   // 切换为OKEX交易所的模拟盘
            exchange.Buy(-1, 1)             // 价格是-1,表示下的订单为市价单,数量为1表示下单量是1USDT
        }
        

        Uma vez que as bolsas geralmente têm um limite de quantidade de encomendas, as encomendas abaixo do limite não são pré-encomendadas (por exemplo, o Bitcoin Cash exige que cada encomenda maior que 5 USDT seja bem-sucedida).

        错误	Buy(-1, 1): map[code:1 data:[map[clOrdId: ordId: sCode:51020 sMsg:Order amount should be greater than the min available amount. tag:]] msg:]
        
      • Direção da compra de futuros A única direção para fazer uma estratégia de futuros também é que os novatos costumam cometer erros que levam a problemas, como escrever estratégias em plataformas de negociação quantitativas de inventores. A primeira coisa a fazer é ver a descrição no documento da API:https://www.fmz.com/api#exchange.setdirection...

        img

        Como a função de subordinação é apenasBuy,SellEntretanto, se os futuros (desempenho, claro, não é um problema, apenas compra e venda) têm direções abertas, abertas, abertas e vazias, então é óbvio que Buy/Sell não representa tantas direções, então é necessário introduzir a função Configurar direção de negociação de futuros.exchange.SetDirection()Não, não. Em FMZexchange.SetDirection("buy")(Pre-definir direção) eexchange.BuyEm combinação, a sequência abaixo é uma ordem de mais posições. O que é que ele está a fazer?exchange.SetDirection("sell")eexchange.SellEm combinação, a lista abaixo é uma ordem para um estoque vazio.exchange.SetDirection("closebuy")eexchange.SellEm combinação, a lista abaixo é uma ordem de preços muito baixos.exchange.SetDirection("closesell")eexchange.BuyEm combinação, a lista abaixo é a ordem de um armazém vazio. Normalmente, a família reúne-se.exchange.SetDirection("sell")eexchange.BuyO uso combinado, ou qualquer outra combinação de erros. Então, o erro é reportado. (O retorno pode não ser reportado, mas isso é obviamente um erro de lógica, o obsessivo-compulsivo não pode suportar...). Outro erro comum de Liu Xiaobo

        function main() {
            exchange.SetContractType("quarter")   // 设置当前合约为季度合约
            exchange.SetDirection("sell")
            var id = exchange.Sell(-1, 1)    
            Log("看我市价单下单了,成交了,就有持仓了", exchange.GetPosition())    
            exchange.SetDirection("closebuy")   // closebuy 和Sell 搭配使用,嗯没错~
            exchange.Sell(-1, 1)
        }
        

        img
        Veja aqui e pergunte: por que eu tenho um estoque e o closebuy e o sell também são usados em conjunto, como é que o relatório é errado e não pode ser estacionado? Uma das situações em que esse erro pode ocorrer é quando a direção de posicionamento está correta, a função de substituição está correta, e a posição é mantida, mas o erro é relatado. A razão é que pode ser que o seu programa tenha feito vários pedidos, o pedido inicial não tenha sido transacionado, o pedido de liquidação esteja pendurado no catálogo aguardando a transação, quando o programa continuar a liquidar, o que indicará um erro além da posição de liquidação.

      • Exportação de logs, exibição de transações Design de programação de programação, quantificação de estratégias de transação, design de interações de máquinas, entre outras, que não abrem dados para exibição de ecrãs, registros de operações de ecrãs, etc.; geralmente usam linguagens de programação nativas para escrever scripts de disco real, programas de estratégia; usam diretamente funções de saída da linguagem atual. Por exemplo: PythonprintNão, não é. JavaScriptconsole.logNão, não. Golangfmt.Println()Não, não é. C++cout

        A informação na plataforma FMZ mostra que há duas posições principais onde a informação é exibida na plataforma de negociação quantitativa do inventor.

        • Barra de estado A página do disco rígido é a seguinte:

          img

          A barra de estado é usada principalmente para mostrar algumas mudanças em tempo real (como as mudanças em tempo real precisam ser observadas em tempo real e não podem ser impressas em logs todas as vezes, essas informações podem ser exibidas na barra de estado. Usos de dados na barra de statusLogStatusA função, mais especificamente, pode ser consultada na documentação da API do FMZ.

        • Diário de Notícias A página do disco real também mostra:

          img

          A barra de registro é usada principalmente para registrar permanentemente alguns dados de um determinado momento ou para registrar uma operação de uma política de um determinado momento. Os diários são divididos em vários tipos: 1, Registro Geral, Política de FMZ usando a função Log para a exportação, Imprimir na Política de Logos.

          img

          2o, o log de subscrição, usado na política do FMZexchange.Sell/exchange.BuyO registro é exibido automaticamente no log.

          img

          3o, registro de retirada, usado na estratégia do FMZexchange.CancelOrderA partir daí, o log de desistência será automaticamente exibido no log.

          img

          4, Logs de erro, a política do FMZ é executada, quando a interface que faz o pedido de rede é chamada de forma errada, quando uma anomalia é lançada (por exemplo, uma frase como "throw"), o log de erro é automaticamente exibido no log.

          img

        A função de API do FMZ, que pode gerar funções de saída de log como Log (...), exchange.Buy ((Price, Amount), exchange.CancelOrder ((Id) etc., pode ser executada com alguns parâmetros de saída conexos após os parâmetros necessários, como: exchange.CancelOrder ((orders[j].Id, orders[j]) assim, quando cancelar o pedido, a informação do pedido é enviada.

        function main() {
            Log("数据1", "数据2", "数据3", "...")
            var data2 = 200
            var id = exchange.Sell(100000, 0.1, "附带数据1", data2, "...")
            exchange.CancelOrder(id, "附带数据1", data2, "...")
            LogProfit(100, "附带数据1", data2, "...")
        }
        
      • Uso de funções indicadoras Antes de falar sobre funções de indicadores, vamos entender o que são indicadores, simplesmente, linhas como a linha média, MACD, ATR e assim por diante. Q: Como surgiram esses indicadores? A: Claro que é calculado. Q: A partir de que cálculo? A: Baseado nos dados da linha K. Q: Um exemplo? A: Para o exemplo mais simples do indicador da linha do horizonte, se usarmos a linha do dia K (ou seja, uma linha do sol ou uma linha do pénis representando um dia) como fonte de dados para o cálculo do indicador. O parâmetro do indicador da linha do horizonte é 10, então o indicador da linha do horizonte calculado é a linha do horizonte de 10 dias. Pergunta: Se o número de BARs da linha K for inferior a 10 bits, é possível calcular o indicador da linha média? Resposta: Não só os indicadores da linha média não podem ser calculados, mas qualquer indicador não pode ser calculado quando o número de dados BAR da linha K não satisfaz o parâmetro do ciclo do indicador.JavaScriptA política de linguagem mostra os dados do indicador calculado ao imprimir.null

        O exemplo de ensino na Praça da Estratégia é:https://www.fmz.com/strategy/125770Revisando este exemplo de estratégia de ensino, você pode ver o gráfico gerado pelo sistema de revisão e a linha média de 10 ciclos:

        img

        A estratégia é criar gráficos personalizados, K-lines desenhados e gráficos homogêneos:

        img

        Q: E se eu quiser uma linha média de 10 horas? A: Os dados da linha K podem ser usados para o ciclo de horas.

        Diz-se que a linha K que vemos, depois de digitalizá-la, é uma matriz (conceito de matriz não é conhecido, pode ser baixado), em que cada elemento é uma coluna de linha K, ordenada em ordem, o primeiro elemento da matriz é o mais distante do tempo atual, e o último elemento da matriz é o mais próximo do tempo atual. Normalmente, a última coluna de linha dos dados da linha K é a coluna de linha do ciclo atual, é variável em tempo real e é incompleta. O indicador calculado também corresponde a uma coluna de linha K. O exemplo acima mostra que um valor de indicador corresponde a uma coluna de linha K. Observe que a última coluna de linha K é variável em tempo real e que o indicador calculado também varia com a mudança da coluna de linha K.

        Na plataforma de negociação quantitativa do inventor, é possível usar a biblioteca TA (uma biblioteca implementada pela plataforma FMZ, integrada no host, com vários idiomas para uso direto) ou usar a biblioteca talib (uma biblioteca de indicadores de marca antiga, JS, integração C ++, Python precisa de instalação própria). Por exemplo, no exemplo acima, a linha média é calculada: Usando o TA:

        function main() {
            var records = exchange.GetRecords()
            var ma = TA.MA(records, 10)
            Log(ma)       // 打印均线
        }
        

        Usando a biblioteca talib:

        function main() {
            var records = exchange.GetRecords()
            var ma = talib.MA(records, 10)
            Log(ma)       // 打印均线
        }      
        

        Os dados indicadores calculados ma são um conjunto de matrizes, cada elemento correspondendo a um conjunto de K linhas (records), ou seja,ma[ma.length -1]Correspondênciarecords[records.length - 1]O que é que ele está a fazer?

        Outros indicadores mais complexos também são semelhantes, e precisam de atenção para indicadores como o MACD.

        var macd = TA.MACD(records)   // 这样只传入K线数据,不传入指标参数,指标参数采用的就是默认值,其它指标函数也是同理
        

        Neste momento, a variável macd é uma matriz bidimensional (não entendo o conceito pode ser o Baudelaire), uma matriz bidimensional é simplesmente uma matriz e cada elemento dela também é uma matriz. Pergunta: Por que os dados do MACD são um conjunto bidimensional? Resposta: Como o indicador macd é composto por duas linhas (linha dif, linha dea) e um conjunto de colunas de quantidade (coluna macd, que também pode ser vista como uma linha), a variável macd pode ser dividida em:

        var dif = macd[0]
        var dea = macd[1]
        var macdColumn = macd[2]
        

        Aqui está também um exemplo de ensino pronto e uma pesquisa interessante:https://www.fmz.com/strategy/151972

        img


Relacionados

Mais.