A IA está chegando, e não temos medo disso. Proponho quebra-lo ganhando repolho na bolsa de valores. Para iniciantes, veremos.
Termos
Um agente é um programa que possui contas em várias moedas em uma troca, cujo trabalho deve levar a um aumento no valor total.
Ativo do agente - uma lista de contas com a disponibilidade de fundos nelas A = [A1, A2, ..] em que A1, A2, ... o valor na moeda correspondente.
Valor do ativo. Precisamos ter uma medida universal do ativo que nos permita medir o ativo. Tome como certo que isso é $. Um $ (conta) faz parte do ativo. Também assumimos que temos a capacidade do algoritmo de estimar o valor de cada conta na lista através de $.
Um agente pode ser fechado (confie apenas em seu próprio ativo) ou aberto (empréstimo). Para simplificar, assumimos que temos um fechado.
Cada operação de agente tem seu próprio valor So (Ax-> Ay, Sum), que mediremos com nossa medida $ e tempo To (Ax-> Ay).
Ambiente do agente - outros agentes ou pessoas com algoritmos de trabalho semelhantes ou diferentes + qualquer informação que seja válida naquele momento.
Estratégia do agente. Este é um algoritmo que recebe informações sobre o status das contas, o histórico da atividade da bolsa, sua atividade, a atividade da bolsa atual (óculos) e, em resposta, executa ou não executa um conjunto de ações.
As estratégias podem basear-se apenas na atividade atual da bolsa (primitiva),
levar em consideração informações de outras trocas (médio), levar em consideração o histórico de atividades e os padrões estatísticos detectados (profundos). Pessimista ou otimista - diferem na avaliação do risco das operações. Parcial ou completo. Uma estratégia completa cobre todos os aspectos do funcionamento do agente. Parcial pode ser combinado para formar um completo.
Otimização de estratégias e sua escolha. Normalmente, o agente possui várias estratégias, a alternância entre elas ocorre com alguma alteração estável (mais de um determinado intervalo de tempo) no ambiente.
Inércia do agente - por quanto tempo o agente ignora uma mudança no ambiente. Ou uma estratégia que determine sua resistência a distúrbios ambientais. Um agente mais inerte pode vencer e perder, não sucumbindo ao "pânico" do meio ambiente.
Suponha que tenhamos três conjuntos de estratégias incompletas:
St = [1,2,3,4] St = [5,6,7,8] St = [9,10,11,12]
A combinação dessas estratégias fornece 64 comportamentos únicos de agentes que
É correto (útil) para os ambientes [O1, O2, O3] e inútil para [O4, O5, O6] ou prejudicial para [O7, ..]
Analisando o trabalho de estratégias e suas combinações em vários ambientes
Podemos criar uma meta-estratégia que altere o comportamento do agente, dependendo do ambiente atualmente sendo detectado.
A plataforma do agente (doravante denominada plataforma, MetaBot) é um agente específico que cria, coordena e exclui agentes nas trocas conectadas. Como um agente, ele consiste arquitetonicamente em um conjunto de estratégias de controle que podem ser combinadas para melhorar o funcionamento de todo o sistema como um todo. A plataforma armazena um histórico de todas as operações e outros dados úteis que permitem que suas estratégias de componentes gerenciem efetivamente (em US $) agentes subordinados, analisando padrões estatísticos gerais e o histórico do impacto das combinações de estratégias no sucesso em ambientes específicos. A plataforma é dirigida pela metastrategy, cujos parâmetros evoluem ao longo do tempo para maximizar os lucros.
O ambiente do agente de troca consiste em outros agentes e informações atuais. As mudanças ambientais do agente são divididas em ótimas, normais, críticas, catastróficas, etc. pelo grau de sucesso das operações. Notificando a plataforma de sua condição e operações, o agente age enquanto a plataforma estiver 'Satisfeita' com o estado e a dinâmica de suas contas, caso contrário, ela será fechada. A plataforma avalia diferentemente o total de ativos e pode tomar decisões sobre a transferência de um ativo de um agente para outro, que pode operar em uma troca ou em diferentes. A tarefa da plataforma é maximizar o ativo total mantido por todos os agentes.
Considere o conteúdo de uma implementação simples de uma estratégia de agente (no Scala) para processar uma troca de manuais de pedidos:
Trazemos um genoma que se desenvolverá durante a operação do sistema.
StrategyParams é o genoma da estratégia de bot que contém muito Gene para parametrizar a estratégia:
case class StrategyParams(low: IntGene, middle: IntGene, high: IntGene, intense: DoubleGene, threshold: DoubleGene, delay: IntGene)
onde baixo, médio e alto são os períodos em minutos para os valores dos ativos em média sobre ele.
Eles são usados para prever o movimento do valor.
Intenso significa atividade de bot ou agressividade. Com grandes valores de parâmetro, o bot faz transações para grandes quantidades e (ou) avalia previsões com grande otimismo.
Limiar significa a confiança mínima do bot na previsão, o que o solicita a concluir a operação. Atraso - inércia, o tempo mínimo entre ativações.
Postula-se que exista uma estratégia ideal de bot para qualquer período descrito pelos parâmetros StrategyParams que possa ser calculado a partir do histórico da taxa do ativo. Seus parâmetros podem ser calculados usando o algoritmo de seleção de genoma evolutivo. O cálculo tem a forma:
def evalBots(trs: Seq[TimeRate]) = EvolutionFactory( candidate = defaultBotStrategyParams, populationConfig = PopulationConfig(500), evolutionConfig = EvolutionConfig(100), errorRate = (c: StrategyParams) => {errorBot(c, trs)} ).
trs - histórico do livro de pedidos,
PopulaçãoConfig - quantos bots ao mesmo tempo competem pela sobrevivência entre si, evolutionConfig - quantas iterações da vida e reprodução devem ser realizadas. No processo de iterações, os bots com menos ativos têm menor probabilidade de gerar descendentes com outros bots, o que, em última análise, com uma população suficientemente grande e o número de degeneração-evolução, deve nos levar ao bot ideal (bots).
Após ter recebido e calculado esses bot (s) por um determinado período (histórico), é necessário usá-lo de alguma forma para negociações efetivas no futuro. O Platform-Metabot e sua MetaStrategy irão lidar com esse problema.
Considere o conteúdo de uma implementação simples de estratégia de plataforma:
MetaStrategy(rateSensitivity: DoubleGene, volumeSensitivity: DoubleGene, profitSensitivity: DoubleGene, criticalForce: DoubleGene, volumesSize: IntGene, delaySwitching: IntGene)
onde rateSensitivity, volumeSensitivity, profitSensitivity descrevem o quão sensível é o comportamento da Plataforma a alterações nos parâmetros do preço do ativo, volume de negociação e uma diminuição no lucro esperado das operações.
criticalForce define um valor limite com base em uma avaliação abrangente dos parâmetros acima, excedendo o que é um sinal de ineficiência da estratégia de bot atual (não da plataforma) e calculando sua versão mais bem-sucedida (estratégia de bot atual).
Fragmento de implementação:
val force = rateForce * volumeForce * profitForce if (force >= strategy.criticalForce.value.get) changeBot(force / strategy.criticalForce.value.get, extremeBot, tr)
Tendo descrito o algoritmo de estratégia de plataforma usando os parâmetros MetaStrategy, podemos iniciar um processo evolutivo semelhante para o crescimento de uma população de metabotbots de plataforma eficientes, o mais eficaz dos quais se tornará a base do sistema de negociação.
Para testar a eficácia dessas idéias, foi criado um protótipo de sistema de comércio de criptomoedas que pode ser usado como campo de teste. O aterro requer dados sobre o histórico dos cursos e seus valores médios ao longo dos períodos, que são armazenados no Influx e gerados pelo próprio aterro por extração através da API aberta do exchange bitfinex. Consulte o objeto HistoryExtractor.
Resultados do teste

Durante as corridas, conseguimos encontrar algumas estratégias simples para agentes que, sem o uso do gerente da Metabot, apresentavam lucro de 14% ao ano para um teste de 2,5 anos de história. Embora impressionante, não garante o mesmo interesse em períodos futuros. O comportamento do sistema em tempo real não foi testado. O uso de estratégias Metabot projetadas para períodos curtos (um mês ou menos) não gerou lucro, mas por longos períodos meta estratégias eficazes são bem possíveis. Seu cálculo foi difícil devido à grande complexidade computacional (meses de operação ininterrupta de um PC médio). As taxas de criptomoeda caótica só podem ser ajustadas em pequena medida, mas ... usar essa abordagem para negociar outros ativos cuja volatilidade não é tão caótica e tem períodos de sazonalidade pode dar melhores resultados.
As fontes de polígono estão disponíveis aqui .