вторник, 26 июня 2018 г.

Programação do sistema de negociação


Sistemas de Negociação: Construindo um Sistema de Negociação.
Agora você deve estar familiarizado com alguns elementos comuns que compõem um sistema de negociação, as vantagens e desvantagens de usá-los, alguns dos diferentes mercados e estratégias que podem ser usados ​​para construí-los e os componentes básicos de um sistema de negociação.
Vamos agora ver como construir um sistema básico de negociação do zero. Embora esse sistema de negociação não seja otimizado para o lucro, você aprenderá como todos os diferentes componentes se encaixam para criar um sistema de negociação funcional.
Escolhendo um mercado, estratégia e Tecnologia.
Visaremos o mercado cambial (forex), já que os dados estão disponíveis gratuitamente na GainCapital e em outras fontes. Para a estratégia, estaremos empregando uma estratégia de crossover de média móvel muito básica, segundo a qual ficamos longos se uma média móvel de curto prazo cruzar acima de uma média móvel de longo prazo. E, finalmente, estaremos usando a linguagem de programação Python e as populares bibliotecas NumPy, pandas e matplotlib para ler os dados e executar a estratégia.
Vamos supor que você esteja familiarizado com a linguagem de programação Python e a tenha instalado corretamente em seu computador. Se você não for, visite o site do Python para obter recursos de aprendizado ou implemente a mesma funcionalidade em outros idiomas e plataformas.
Configurando o Script.
O primeiro passo é criar um arquivo, chamado ma_cross. py, que abrigará a estratégia. No arquivo, começaremos importando todas as bibliotecas que precisaremos.
import matplotlib. pyplot como plt.
import numpy como np.
importar pandas como pd.
de pandas. io. data import DataReader.
A biblioteca pandas inclui uma função "rolling_mean" que cria médias móveis com base no preço de compra ou venda para cada tick no mercado forex. Uma vez que as médias móveis estiverem concluídas, construiremos uma série de "sinais" definindo a coluna igual a 1,0 quando a média móvel curta for maior que a média móvel longa ou 0,0, caso contrário. Podemos então usar as `posições` para gerar sinais de negociação que podem ser enviados para outro lugar.
Escrevendo a estratégia.
A estratégia pode ser implementada em Python.
def __init __ (self, pair, ticks, short_window = 100, long_window = 400):
sinais ['short_ma'] = pd. rolling_mean (ticks ['ask'], self. short_window, min_periods = 1)
sinais ['long_ma'] = pd. rolling_mean (ticks ['ask'], self. long_window, min_periods = 1)
sinais ['signal'] [self. short_window:] = np. where (sinais ['short_ma'] [self. short_window:] & gt; sinais ['long_ma'] [self. short_window:], 1,0, 0,0)
Esse código gera uma série de sinais sempre que ocorre um cruzamento de média móvel, em que 1.0 sinaliza que uma ordem de compra está sendo feita.
Colocando o código para uso.
O próximo passo é pegar esse código e usá-lo em conjunto com uma estratégia de backtesting para ver como ele seria executado no passado.
A maioria dos traders prefere usar ferramentas de backtesting online, como o Quantopian, onde você pode fazer upload de código e ver automaticamente os resultados. Usando essas ferramentas, o backtesting é tão fácil quanto importar as bibliotecas do Quantopian para o Python e colar o seu script. Em seguida, você pode executar um backtest completo usando datas simuladas, valores de conta e até mercados. Você pode ver retornos, alfa, beta, taxas de Sharpe e rebotes máximos para ter uma ideia de como a estratégia seria executada.
O próximo passo seria integrar a estratégia em um ambiente de negociação ao vivo. Muitas corretoras que oferecem negociações automatizadas incluirão APIs com as quais você pode interagir para fazer negócios. Por exemplo, o InteractiveBrokers tem uma API completa com bibliotecas para Python, Java,.NET e outras tecnologias. Usando essas bibliotecas, você pode facilmente transformar os sinais gerados em negociações que são executadas através da plataforma.
Na próxima seção, veremos algumas outras considerações importantes a serem lembradas.

Programação do sistema de negociação
Criando um sistema de negociação dentro do Trading System Lab.
O Trading System Lab gerará automaticamente Trading Systems em qualquer mercado em poucos minutos usando um programa de computador muito avançado conhecido como AIMGP (Indução Automática do Código de Máquina com Programação Genética). A criação de um sistema de negociação dentro do Trading System Lab é realizada em 3 etapas fáceis. Primeiro, é executado um pré-processador simples que extrai e pré-processa automaticamente os dados necessários do mercado com o qual deseja trabalhar. A TSL aceita dados CSI, MetaStock, AIQ, TradeStation, Internet grátis, ASCII, TXT, CSV, CompuTrac, DowJones, FutureSource, TeleChart2000v3, TechTools, XML, Binário e Internet Streaming. Em segundo lugar, o Gerador de Sistema de Negociação (GP) é executado por vários minutos, ou mais, para evoluir um novo Sistema de Negociação. Você pode usar seus próprios dados, padrões, indicadores, relacionamentos entre mercados ou dados fundamentais no TSL. Em terceiro lugar, o Trading System desenvolvido é formatado para produzir novos sinais do Trading System a partir da TradeStation ™ ou de muitas outras plataformas de negociação. O TSL irá escrever automaticamente Easy Language, Java, Assembler, código C, código C # e WealthLab Script Language. O Sistema de Negociação pode então ser negociado manualmente, negociado através de um corretor ou negociado automaticamente. Você pode criar o Sistema de Negociação sozinho ou nós podemos fazer isso por você. Então, você ou seu corretor podem negociar o sistema manualmente ou automaticamente.
O Programa Genético do Trading System Lab contém vários recursos que reduzem a possibilidade de ajuste de curva ou a produção de um Sistema de Negociação que não continua a funcionar no futuro. Primeiro, os Trading Systems evoluídos têm seu tamanho reduzido ao menor tamanho possível através do que é chamado de pressão de parcimônia, a partir do conceito de comprimento de descrição mínima. Assim, o Sistema de Negociação resultante é o mais simples possível e geralmente se acredita que quanto mais simples for o Sistema de Negociação, melhor será o seu desempenho no futuro. Em segundo lugar, a aleatoriedade é introduzida no processo evolutivo, o que reduz a possibilidade de encontrar soluções que são localmente, mas não globalmente ótimas. A aleatoriedade é introduzida não apenas nas combinações do material genético usado nos Trading Systems evoluídos, mas também na Parsimony Pressure, Mutation, Crossover e outros parâmetros GP de nível superior. O teste Fora da Amostra é realizado enquanto o treinamento está em andamento com as informações estatísticas apresentadas nos testes In Sample e Out of Sample Trading System. Os logs de execução são apresentados ao usuário para os dados Treinamento, Validação e Fora da Amostra. Bem comportado O desempenho fora da amostra pode ser indicativo de que o Sistema de Negociação está evoluindo com características robustas. A deterioração substancial no teste automático Fora da Amostra em comparação com o teste Na Amostra pode implicar que a criação de um Sistema de Negociação robusto está em dúvida ou que o Terminal ou Conjunto de Entrada pode precisar ser alterado. Finalmente, o Conjunto de Terminais é cuidadosamente escolhido de forma a não influenciar excessivamente a seleção do material genético inicial em relação a qualquer tendência ou sentimento do mercado em particular.
A TSL não inicia sua execução com um Sistema de Negociação predefinido. Na verdade, apenas o Input Set e uma seleção de modos de entrada de mercado ou modos, para pesquisa e atribuição automática de entrada, são feitos inicialmente. Um padrão ou comportamento indicador que pode ser considerado uma situação de alta pode ser usado, descartado ou invertido dentro do GP. Nenhum padrão ou indicador é pré-atribuído a qualquer viés de movimento de mercado específico. Este é um afastamento radical do desenvolvimento do Trading System gerado manualmente.
Um Sistema de Negociação é um conjunto lógico de instruções que informa ao comerciante quando comprar ou vender um determinado mercado. Estas instruções raramente requerem intervenção de um profissional. Os Sistemas de Negociação podem ser negociados manualmente, observando as instruções de negociação em uma tela de computador, ou podem ser negociados permitindo que o computador entre no mercado automaticamente. Ambos os métodos estão em uso generalizado hoje. Há mais administradores profissionais de dinheiro que se consideram comerciantes "Sistemáticos ou Mecânicos" do que aqueles que se consideram "discricionários", e o desempenho dos administradores de recursos sistemáticos é geralmente superior ao dos administradores de dinheiro discricionários. Estudos têm mostrado que as contas de negociação geralmente perdem dinheiro com mais frequência se o cliente não estiver usando um sistema de negociação. O aumento significativo nos Sistemas de Negociação nos últimos 10 anos é evidente especialmente nas corretoras de commodities, no entanto, as corretoras de ações e ações estão se tornando cada vez mais conscientes dos benefícios através do uso de Sistemas de Negociação e algumas começaram a oferecer Sistemas de Negociação aos seus clientes de varejo.
A maioria dos gestores de fundos mútuos já está usando algoritmos de computador sofisticados para orientar suas decisões sobre o que "estoque a escolher" ou que "rotação setorial" é a favor. Computadores e algoritmos se tornaram mainstream no investimento e esperamos que essa tendência continue enquanto os investidores mais experientes em informática continuam a permitir que parcelas de seu dinheiro sejam gerenciadas pela Trading Systems para reduzir o risco e aumentar os retornos. As enormes perdas experimentadas pelos investidores que participam na compra e manutenção de ações e fundos mútuos como o mercado de ações derretido nos últimos anos está promovendo esse movimento no sentido de uma abordagem mais disciplinada e lógica para o investimento no mercado de ações. O investidor médio percebe que atualmente ele permite que muitos aspectos de suas vidas e a vida de seus entes queridos sejam mantidos ou controlados por computadores, como os automóveis e aeronaves que usamos para o transporte, os equipamentos de diagnóstico médico que usamos para a manutenção da saúde, os controladores de aquecimento e refrigeração que usamos para controle de temperatura, as redes que usamos para informações baseadas na Internet, até mesmo os jogos que jogamos para entretenimento. Por que então alguns investidores de varejo acreditam que podem "atirar nos quadris" em suas decisões sobre "o que" ações ou fundo mútuo para comprar ou vender e esperar ganhar dinheiro? Finalmente, o investidor médio tornou-se cauteloso com os conselhos e informações encaminhados por corretores inescrupulosos, contadores, diretores de empresas e consultores financeiros.
Nos últimos 20 anos, matemáticos e desenvolvedores de software buscaram indicadores e padrões nos mercados de ações e commodities em busca de informações que apontassem para a direção do mercado. Esta informação pode ser usada para melhorar o desempenho dos Sistemas de Negociação. Geralmente este processo de descoberta é realizado através de uma combinação de tentativa e erro e mais sofisticada "Data Mining". Normalmente, o desenvolvedor levará semanas ou meses processando os números para produzir um Sistema de Negociação em potencial. Muitas vezes este Sistema de Negociação não terá um bom desempenho quando realmente usado no futuro devido ao que é chamado de "ajuste de curva". Ao longo dos anos tem havido muitos Trading Systems (e empresas de desenvolvimento de Trading System) que vêm e vão como seus sistemas falharam em negociação ao vivo. Desenvolver Sistemas Comerciais que continuem a atuar no futuro é difícil, mas não impossível de realizar, embora nenhum desenvolvedor ético ou gestor de dinheiro dê uma garantia incondicional de que qualquer Sistema de Negociação, ou mesmo qualquer ação, título ou fundo mútuo, continuará. para produzir lucros para o futuro para sempre.
O que levou semanas ou meses para o desenvolvedor do Trading System produzir no passado pode agora ser produzido em minutos com o uso do Trading System Lab. O Trading System Lab é uma plataforma para a geração automática de Sistemas de Negociação e Indicadores de Negociação. A TSL utiliza um Mecanismo de Programação Genética de alta velocidade e produzirá Sistemas de Negociação a uma taxa de mais de 16 milhões de barras de sistema por segundo, com base em 56 entradas. Observe que apenas algumas entradas serão realmente usadas ou necessárias, resultando em estruturas de estratégia geralmente simples e evoluídas. Com aproximadamente 40.000 a 200.000 sistemas necessários para uma convergência, o tempo de convergência para qualquer conjunto de dados pode ser aproximado. Note que não estamos simplesmente executando uma otimização de força bruta de indicadores existentes procurando por parâmetros ótimos a partir dos quais usar em um Sistema de Negociação já estruturado. O Gerador de Sistema de Negociação começa em uma origem de ponto zero, não fazendo suposições sobre o movimento do mercado no futuro e então "evolui" Sistemas de negociação a uma taxa muito alta combinando informações presentes no mercado e formulando novos filtros, funções, condições e relacionamentos à medida que avança em direção a um Sistema de Negociação "geneticamente modificado". O resultado é que um excelente Sistema de Negociação pode ser gerado em poucos minutos em 20 a 30 anos de dados diários de mercado em praticamente qualquer mercado.
Nos últimos anos, tem havido várias abordagens para a otimização do Sistema de Negociação que empregam o "Algoritmo" Genético menos poderoso. Os Programas Genéticos (GPs) são superiores aos Algoritmos Genéticos (GA's) por várias razões. Primeiro, os GP's convergem em uma solução a uma taxa exponencial (muito rápida e ficando mais rápida) enquanto os Algoritmos Genéticos convergem a uma taxa linear (muito mais lenta e não ficando mais rápida). Em segundo lugar, os GPs geram realmente código de máquina do Sistema de Negociação que combinava o material genético (indicadores, padrões, dados inter-mercado) de maneiras diferentes. Essas combinações indevidas podem não ser intuitivamente óbvias e não exigem definições iniciais pelo desenvolvedor do sistema. Os relacionamentos matemáticos indevidos criados podem se tornar novos indicadores ou variantes na Análise Técnica, ainda não desenvolvidos ou descobertos. Os GAs, por outro lado, simplesmente procuram soluções ótimas à medida que progridem ao longo da faixa de parâmetros; eles não descobrem novas relações matemáticas e não escrevem seu próprio código de sistema de negociação. O código de criação do Trading System da GP de vários comprimentos, usando genomas de tamanho variável, modificará o comprimento do Sistema de Negociação através do que é chamado crossover não homólogo e descartará completamente um indicador ou padrão que não contribua para a eficiência do Sistema de Negociação. Os GA's usam apenas blocos de instrução de tamanho fixo, fazendo uso somente de crossover homólogo e não produzem códigos de Sistema de negociação de comprimento variável, nem descartarão um indicador ou padrão ineficiente tão facilmente quanto um GP. Finalmente, os Programas Genéticos são um avanço recente no domínio do aprendizado de máquina, enquanto os Algoritmos Genéticos foram descobertos há 30 anos. Os programas genéticos incluem todas as principais funcionalidades dos Algoritmos Genéticos; crossover, reprodução, mutação e fitness, no entanto, as GPs incluem recursos muito mais rápidos e robustos, tornando a GP a melhor escolha para a produção da Trading Systems. O GP empregado no Trading System Generator da TSL é o GP mais rápido atualmente disponível e não está disponível em nenhum outro software do mercado financeiro no mundo.
O Algoritmo de Programação Genética, o Simulador de Negociação e os Motores de Fitness usados ​​na TSL levaram mais de 8 anos para serem produzidos.
O Trading System Lab é o resultado de anos de trabalho duro de uma equipe de engenheiros, cientistas, programadores e traders, e acreditamos que representa a tecnologia mais avançada disponível atualmente para a negociação nos mercados.

Programação do sistema de negociação
A implementação do backtesting do lado do servidor melhorou a velocidade, o desempenho e a confiabilidade e também preparou o aplicativo para sistemas de negociação automática apresentado na versão 10. A transição para negociação automática exigiu a modificação de algumas instruções existentes e a adição de novas instruções descritas nesta página.
Notas sobre compatibilidade de código entre a versão 9.2 e 10: Se você tiver instruções nos códigos do sistema de negociação que não sejam compatíveis com a versão 10, estas instruções serão substituídas por instruções compatíveis na primeira vez que você iniciar a versão 10. Como resultado, sugerimos você verifica seus códigos do sistema de negociação na primeira vez que você lança a versão 10. A lista de instruções que foram removidas ou modificadas na versão 10 está listada na parte inferior deste changelog. Exemplo:
A instrução PreviousTrade (1) será substituída por PositionPerf (1). PositionPerf é o novo comando que substitui o PreviousTrade e faz a mesma coisa. As instruções Buy 10% Capital serão substituídas por Buy 1 Share. A instrução% Capital foi removida na versão 10.
Nota sobre como salvar o código na versão 9.2 e 10: As alterações feitas no seu código na versão 10 não serão transferidas para a versão 9.2. As alterações feitas em seu código na versão 9.2 depois que a versão 10 se tornar disponível na sua conta não serão transferidas para a versão 10.
Mudanças de interface de programação.
A janela de programação foi reprojetada para permitir o backtest de um sistema de negociação ou prepará-lo para negociação automática no ProOrder. Por razões de segurança e para garantir compatibilidade com negociação automática, paradas, destinos e parâmetros de gerenciamento de pedidos (como CumulateOrders e NoCashUpdate) agora devem ser definidos no código. Os parâmetros de gerenciamento de pedidos de quaisquer estratégias de negociação pré-existentes são transferidos para a versão 10 na primeira vez que você os lança.
Nova janela de criação assistida:
Ainda é possível definir facilmente as condições do seu sistema de negociação e suas paradas no modo de criação assistida. Depois que suas condições forem definidas, clique em & quot; Gerar código & quot ;.
Nova criação por janela de programação:
Se você usou a criação assistida para gerar seu código, ele será mostrado na janela de criação por programação. Quaisquer níveis de parada e destino definidos com criação assistida serão incluídos diretamente no código. A janela de programação possui vários aprimoramentos, incluindo:
Presença de números de linha para edição de código mais fácil & quot; Inserir função & quot; botão que fornece texto de ajuda para cada função com exemplos incluindo as funções recém-adicionadas Novos atalhos de teclado como Desfazer (Ctrl + Z), Refazer (Ctrl + Y), Copiar (Ctrl + C), Colar (Ctrl + V) e Localizar / Substitua (Ctrl + F).
Novas instruções
Novas constantes
TickSize: TickSize do instrumento (menor unidade de variação de preço).
Exemplo: 0.5 para o futuro Dax. PointSize ou PipSize: tamanho de um ponto ou tamanho de um pip.
Exemplo: 1 para o Dax Future. PipValue ou PointValue: Valor de um ponto na moeda do instrumento.
Novas variáveis ​​de status.
PositionPrice: Preço médio de entrada da posição atualmente aberta, excluindo as taxas de corretagem. StrategyProfit [n]: Ganho ou perda desde o início do sistema de negociação desde o fechamento de n barras atrás.
Variáveis ​​de status modificadas.
TradeIndex (n): Índice da barra onde a enésima última ordem foi colocada. Isso substitui a instrução anterior ENTRYINDEX [n] TradePrice (n): Preço de execução da enésima última ordem (entrada ou saída). Isso substitui a instrução anterior ENTRYQUOTE [n] PositionPerf (n): Ganho ou perda em% da enésima última posição, sem incluir as taxas de corretagem. Isso substitui a instrução anterior PreviousTrade (n)
Novos parâmetros que podem ser definidos no início do código.
DefParam: permite definir parâmetros. Veja as seguintes instruções para exemplos. As instruções Defparam devem ser colocadas nas primeiras linhas do código. CumulateOrders: Permite adicionar um tamanho de posição depois de aberto. Esta instrução é verdadeira por padrão.
Exemplo: Defparam CumulateOrders = False.
Se você usar as instruções para definir um stop loss, trailing stop ou profit target com pedidos acumulados ativados, o nível será calculado com base no preço médio de entrada de suas posições e será recalculado sempre que a quantidade de posições for modificada. PreloadBars: Este parâmetro permite definir a quantidade máxima de barras que são pré-carregadas antes do início de um sistema de negociação para o pré-cálculo dos indicadores usados ​​no sistema. Por padrão, esse parâmetro é igual a 200.
Exemplo: Defparam PreloadBars = 500 NoCashUpdate: Este parâmetro é desativado por padrão e pode ser usado somente para backtesting. Se ativado, significa que o capital inicial do sistema de negociação não é atualizado com ganhos e perdas.
Exemplo: Defparam NoCashUpdate = True FlatBefore = HHMMSS e FlatAfter = HHMMSS: cria um sistema de negociação e bloqueia todas as ordens de entrada antes / depois de um certo tempo. MinOrder = n e MaxOrder = p: bloqueia todas as ordens cuja quantidade esteja abaixo de n ou acima de p.
Novos comandos do sistema de negociação.
SAIR: Pare o sistema de negociação, feche todas as posições do sistema e cancele todas as ordens pendentes do sistema.
SET TARGET LUCRO x: Defina uma meta de lucro para fechar a posição x unidades do preço de entrada da posição. SET TARGET pPROFIT x: Defina uma meta de lucro para fechar a posição x pontos do preço de entrada da posição. SET TARGET% PROFIT x: Defina uma meta de lucro para fechar a posição quando o lucro atingir x%.
Exemplo: SET TARGET% PROFIT 2 // define uma meta de lucro de 2%. SET TARGET $ LUCRO x: Coloque uma ordem de lucro de x e euro; ou $ (moeda do instrumento).
SET STOP LOSS x: Defina uma parada para fechar a posição x unidades a partir do preço de entrada da posição. SET STOP p LOSS x: Defina uma parada para fechar a posição x pontos a partir do preço de entrada da posição. SET STOP% LOSS x: Defina um stop loss para fechar a posição quando a perda atingir x%. SET STOP $ LOSS x: define um stop loss para fechar a posição quando a perda atinge xe euro; ou $ (moeda do instrumento).
SET STOP TRAILING y: Defina uma parada final de y pontos. SET STOP p TRAILING y: Defina uma parada final de y pontos. SET STOP% TRAILING y: defina uma parada final de y%. SET STOP $ TRAILING y: defina um ponto final de y & euro; ou $ (moeda do instrumento).
SET STOP LOSS x TRAILING y: Um stop loss é colocado em x unidades a partir do preço de entrada da posição e se torna um stop final de y unidades se o nível de parada móvel se aproximar do preço atual do que o nível de stop loss. SET STOP LOSS x $ TRAILING y: Um stop loss é colocado em x unidades a partir do preço de entrada da posição e torna-se um stop final de y $ ou & euro; (moeda do instrumento) se o nível de parada móvel se aproximar do preço atual do que o nível de perda de parada. SET STOP LOSS x% TRAILING y: Um stop loss é colocado em x unidades a partir do preço de entrada da posição e torna-se um stop final de y% se o nível de stop móvel se aproximar do preço atual do que o nível de stop loss.
SET STOP $ LOSS x TRAILING y: Um stop loss de x $ ou & euro; (moeda do instrumento) é colocada e torna-se uma parada móvel de unidades y se o nível de parada móvel se aproximar do preço atual do que o nível de perda de parada. SET STOP $ LOSS x $ TRAILING y: Um stop loss de x $ ou & euro; (moeda do instrumento) é colocada e se torna um stop final de y $ ou & euro; (moeda do instrumento) se o nível de parada móvel estiver mais próximo do preço atual do que o nível de perda de parada. SET STOP $ LOSS x% TRAILING y: Um stop loss de x $ ou & euro; (moeda do instrumento) é colocada e se torna um stop final de y% se o nível de parada móvel se aproximar do preço atual do que o nível de perda de parada.
SET% DE PERDA DE PARAR x FALHA y: Um stop loss de x% é colocado e se torna um stop final de y unidades se o nível de parada móvel se aproximar do preço atual do que o nível de perda de parada. SET STOP% LOSS x $ TRAILING y: um stop loss de x% é colocado e se torna um ponto final de y $ ou & euro; (moeda do instrumento) se o nível de parada móvel estiver mais próximo do preço atual do que o nível de perda de parada. SET%% de perda de parada x% TRAILING y: um stop loss de x% é colocado e se torna um stop final de y% se o nível de parada móvel se aproximar do preço atual do que o nível de stop loss.
ROUNDEDUP ou ROUNDEDDOWN: Arredondar uma quantidade de títulos a serem comprados ou vendidos para cima ou para baixo quando a quantidade é definida em dinheiro (somente ações).
Exemplo: COMPRAR 1000 ROUNDEDUP DE DINHEIRO NO MERCADO.
As taxas de corretagem não são levadas em consideração para qualquer cálculo de níveis de meta de parada ou lucro. Apenas um "Set Stop" e um "Definir alvo" comando pode estar ativo por vez para um determinado código. Se houver sucessivos & quot; Set Stop & quot; ou & quot; Definir alvo & quot; comandos no mesmo código, o último comando substitui o comando anterior. É possível combinar paradas fixas e finais com um único "Set Stop" comando conforme descrito na seção anterior. Para informações mais detalhadas sobre isso, consulte o manual atualizado dos sistemas de negociação. É possível usar o & quot; Set Stop & quot; comandos dentro de condicional & quot; Se & quot; comandos para definir diferentes tipos de paradas em diferentes condições.
Alteração de sintaxe para paradas e limites de preço absoluto.
A instrução SET STOP & lt; price & gt; foi removido. É possível usar uma das seguintes instruções em seu lugar: SELL AT & lt; price & gt; STOP, EXITSHORT AT & lt; price & gt; PARE . A instrução SET LIMIT & lt; price & gt; foi removido. É possível usar uma das seguintes instruções em seu lugar: SELL AT & lt; price & gt; LIMIT, EXITSHORT AT & lt; price & gt; LIMITE
As ordens mencionadas nesta seção funcionam da mesma forma que COMPRA / VENDA / VENDA & lt; quantidade & gt; AÇÕES A & lt; preço & gt; LIMIT / STOP. Eles são válidos para uma barra por padrão, mas é possível alterar a validade (consulte o manual para obter mais informações).
Instruções removidas.
Instruções para comprar ou vender um percentual de capital ou luidez: Os sistemas de negociação automática executados com o ProOrder não têm uma quantidade definida de capital inicial ou luidez atribuída a cada um deles. Em vez disso, eles controlam a exposição máxima, limitando o tamanho da posição. Como resultado, as seguintes instruções foram removidas:
Essas instruções devem ser substituídas por instruções para comprar ou vender valores específicos.
Exemplo: COMPRE 1 CONTRATO ou VENDA 1 CONTRATO ou VENDEDOR 1 CONTRATO ou CONTRATO EXISTO 1.
Para as ações, é possível definir valores para comprar ou vender em dinheiro, excluindo as taxas de corretagem.
Exemplo: COMPRAR 1.000 DINHEIRO DEIXADO NO MERCADO.
Instruções para comprar ou vender a preços desconhecidos no momento em que o pedido é feito: As ordens de mercado só podem ser executadas se uma condição for verificada no fechamento de uma barra. O preço obtido neste caso será o melhor preço disponível no próximo bar aberto. Não é possível comprar no fechamento da barra atual, ou no fechamento de hoje ou de um dia do futuro. Como resultado, as seguintes instruções foram removidas:
A instrução & quot; Compre 1 Compartilhar no mercado & quot; vai comprar por padrão na abertura da próxima barra após a condição ser cumprida. Também é possível usar a instrução & quot; NextBarOpen & quot ;. A instrução & quot; Compre 1 Compartilhar no mercado TomorrowOpen & quot; pode ser usado para fazer um pedido de compra a preço de mercado na abertura do próximo dia de negociação.
Variável contendo um preço desconhecido no momento em que um pedido é feito: A variável & quot; OpenOfNextBar & quot; continha o preço de abertura da barra após a atual. Essa variável foi removida porque é impossível saber esse preço em uma situação de negociação automática. Esta instrução não deve ser confundida com & quot; NextBarOpen & quot; que é uma instrução que pode ser usada para fazer um pedido no preço de abertura da próxima barra e ainda está disponível como mostrado na última seção.
Para uma visão completa de todas as instruções, verifique o manual atualizado dos sistemas de negociação.

Codificação de Sistemas de Negociação.
Por Justin Kuepper.
Como os sistemas de negociação automatizados são criados?
Este tutorial se concentrará na segunda e na terceira partes deste processo, onde suas regras são convertidas em um código que seu software de negociação pode entender e usar.
Vantagens e desvantagens.
Um sistema automatizado tira a emoção e o trabalho ocupado da negociação, o que permite que você se concentre em melhorar suas regras de estratégia e gerenciamento de dinheiro. Uma vez que um sistema lucrativo é desenvolvido, ele não requer nenhum trabalho de sua parte até que ele quebre, ou as condições do mercado exigem uma mudança. Desvantagens:
Se o sistema não for devidamente codificado e testado, grandes perdas podem ocorrer muito rapidamente. Às vezes é impossível colocar certas regras no código, o que dificulta o desenvolvimento de um sistema de negociação automatizado. Neste tutorial, você aprenderá como planejar e projetar um sistema de negociação automatizado, como converter esse design em código que seu computador entenderá, como testar seu plano para garantir o desempenho ideal e, finalmente, como colocar seu sistema em uso.

Melhor Linguagem de Programação para Sistemas de Negociação Algorítmica?
Melhor Linguagem de Programação para Sistemas de Negociação Algorítmica?
Uma das perguntas mais freqüentes que recebo no mailbag do QS é "Qual é a melhor linguagem de programação para negociação algorítmica?". A resposta curta é que não há "melhor" linguagem. Parâmetros de estratégia, desempenho, modularidade, desenvolvimento, resiliência e custo devem ser considerados. Este artigo descreverá os componentes necessários de uma arquitetura de sistema de comércio algorítmico e como as decisões relativas à implementação afetam a escolha da linguagem.
Primeiramente, os principais componentes de um sistema de negociação algorítmica serão considerados, como as ferramentas de pesquisa, o otimizador de portfólio, o gerenciador de risco e o mecanismo de execução. Posteriormente, diferentes estratégias de negociação serão examinadas e como elas afetam o design do sistema. Em particular, a frequência de negociação e o volume de negociação provável serão ambos discutidos.
Uma vez que a estratégia de negociação tenha sido selecionada, é necessário arquitetar todo o sistema. Isso inclui a escolha de hardware, o sistema operacional e a resiliência do sistema contra eventos raros e potencialmente catastróficos. Enquanto a arquitetura está sendo considerada, a devida atenção deve ser dada ao desempenho - tanto para as ferramentas de pesquisa quanto para o ambiente de execução ao vivo.
Qual é o sistema de negociação tentando fazer?
Antes de decidir sobre a "melhor" linguagem com a qual escrever um sistema de negociação automatizado, é necessário definir os requisitos. O sistema será puramente baseado em execução? O sistema exigirá um módulo de gerenciamento de risco ou de construção de portfólio? O sistema exigirá um backtester de alto desempenho? Para a maioria das estratégias, o sistema de negociação pode ser dividido em duas categorias: Pesquisa e geração de sinais.
A pesquisa está preocupada com a avaliação de um desempenho da estratégia em relação aos dados históricos. O processo de avaliação de uma estratégia de negociação sobre dados de mercado anteriores é conhecido como backtesting. O tamanho dos dados e a complexidade algorítmica terão um grande impacto na intensidade computacional do backtester. A velocidade e a simultaneidade da CPU costumam ser os fatores limitantes na otimização da velocidade de execução da pesquisa.
A geração de sinais preocupa-se em gerar um conjunto de sinais de negociação de um algoritmo e enviar esses pedidos ao mercado, geralmente por meio de uma corretora. Para determinadas estratégias, é necessário um alto nível de desempenho. Problemas de E / S, como largura de banda de rede e latência, são muitas vezes o fator limitante na otimização de sistemas de execução. Assim, a escolha de idiomas para cada componente de todo o seu sistema pode ser bem diferente.
Tipo, Frequência e Volume de Estratégia.
O tipo de estratégia algorítmica empregada terá um impacto substancial no design do sistema. Será necessário considerar os mercados que estão sendo negociados, a conectividade com fornecedores de dados externos, a frequência e o volume da estratégia, o tradeoff entre facilidade de desenvolvimento e otimização de desempenho, bem como qualquer hardware personalizado, incluindo customização co-localizada servidores, GPUs ou FPGAs que possam ser necessários.
As escolhas tecnológicas para uma estratégia de ações norte-americanas de baixa frequência serão muito diferentes daquelas de uma negociação de estratégia de arbitragem estatística de alta frequência no mercado de futuros. Antes da escolha da linguagem, muitos fornecedores de dados devem ser avaliados quanto à estratégia em questão.
Será necessário considerar a conectividade com o fornecedor, a estrutura de quaisquer APIs, a pontualidade dos dados, os requisitos de armazenamento e a resiliência em face de um fornecedor ficar off-line. Também é aconselhável ter acesso rápido a vários fornecedores! Vários instrumentos têm suas próprias peculiaridades de armazenamento, exemplos dos quais incluem vários símbolos de ticker para ações e datas de vencimento para futuros (para não mencionar quaisquer dados OTC específicos). Isso precisa ser levado em conta no design da plataforma.
A frequência da estratégia é provavelmente um dos maiores impulsionadores de como a pilha de tecnologia será definida. Estratégias que empregam dados com mais freqüência do que minuciosamente ou em segundo lugar exigem consideração significativa com relação ao desempenho.
Uma estratégia que excede as segundas barras (isto é, dados de ticks) leva a um design orientado pelo desempenho como o requisito primário. Para estratégias de alta frequência, uma quantidade substancial de dados de mercado precisará ser armazenada e avaliada. Softwares como HDF5 ou kdb + são comumente usados ​​para essas funções.
Para processar os volumes extensos de dados necessários para aplicativos HFT, um backtester e um sistema de execução extensivamente otimizados devem ser usados. C / C ++ (possivelmente com algum montador) é provável que seja o candidato a idioma mais forte. Estratégias de frequência ultra-alta quase certamente exigirão hardware customizado, como FPGAs, co-location de troca e ajuste de interface de rede / kernal.
Sistemas de pesquisa.
Os sistemas de pesquisa geralmente envolvem uma mistura de desenvolvimento interativo e scripts automatizados. O primeiro ocorre com frequência dentro de um IDE, como o Visual Studio, o MatLab ou o R Studio. Este último envolve extensos cálculos numéricos sobre numerosos parâmetros e pontos de dados. Isso leva a uma escolha de idioma que fornece um ambiente simples para testar o código, mas também fornece desempenho suficiente para avaliar estratégias em várias dimensões de parâmetro.
IDEs típicos nesse espaço incluem o Microsoft Visual C ++ / C #, que contém extensos utilitários de depuração, recursos de conclusão de código (via "Intellisense") e visões gerais simples da pilha inteira do projeto (via banco de dados ORM, LINQ); MatLab, que é projetado para extensa álgebra linear numérica e operações vetorizadas, mas de uma forma de console interativo; R Studio, que envolve o console de linguagem estatística R em um IDE completo; Eclipse IDE para Linux Java e C ++; e IDEs semi-proprietários como o Enthought Canopy for Python, que incluem bibliotecas de análise de dados como NumPy, SciPy, scikit-learn e pandas em um único ambiente interativo (console).
Para backtesting numérico, todos os idiomas acima são adequados, embora não seja necessário utilizar uma GUI / IDE, pois o código será executado "em segundo plano". A consideração principal neste estágio é a velocidade de execução. Uma linguagem compilada (como C ++) é geralmente útil se as dimensões do parâmetro de backtesting forem grandes. Lembre-se que é necessário ter cuidado com esses sistemas, se for esse o caso!
Linguagens interpretadas, como Python, geralmente usam bibliotecas de alto desempenho, como NumPy / pandas, para a etapa de backtesting, a fim de manter um grau razoável de competitividade com equivalentes compilados. Em última análise, a linguagem escolhida para o backtesting será determinada por necessidades algorítmicas específicas, bem como o leque de bibliotecas disponíveis na linguagem (mais sobre isso abaixo). No entanto, a linguagem usada para os ambientes de backtester e de pesquisa pode ser completamente independente daquelas usadas nos componentes de construção de portfólio, gerenciamento de risco e execução, como será visto.
Construção de Carteira e Gestão de Risco.
Os componentes de gerenciamento de risco e de construção de portfólio são frequentemente ignorados pelos traders algorítmicos de varejo. Isso é quase sempre um erro. Essas ferramentas fornecem o mecanismo pelo qual o capital será preservado. Eles não apenas tentam aliviar o número de apostas "arriscadas", mas também minimizam a rotatividade dos negócios, reduzindo os custos de transação.
Versões sofisticadas desses componentes podem ter um efeito significativo na qualidade e consistência da lucratividade. É fácil criar uma estratégia estável, pois o mecanismo de construção de portfólio e o gerenciador de risco podem ser facilmente modificados para lidar com vários sistemas. Assim, eles devem ser considerados componentes essenciais no início do projeto de um sistema de negociação algorítmica.
O trabalho do sistema de construção de portfólio é pegar um conjunto de negócios desejados e produzir o conjunto de negociações reais que minimizam o churn, manter exposições a vários fatores (como setores, classes de ativos, volatilidade, etc.) e otimizar a alocação de capital para vários estratégias em um portfólio.
A construção de portfólio geralmente se reduz a um problema de álgebra linear (como uma fatoração de matriz) e, portanto, o desempenho é altamente dependente da eficácia da implementação da álgebra linear numérica disponível. Bibliotecas comuns incluem uBLAS, LAPACK e NAG para C ++. O MatLab também possui operações de matriz amplamente otimizadas. O Python utiliza o NumPy / SciPy para tais cálculos. Um portfólio freqüentemente reequilibrado exigirá uma biblioteca matricial compilada (e bem otimizada!) Para realizar este passo, de modo a não afunilar o sistema de negociação.
O gerenciamento de riscos é outra parte extremamente importante de um sistema de negociação algorítmica. O risco pode vir de várias formas: aumento da volatilidade (embora isso possa ser visto como desejável para certas estratégias!), Aumento de correlações entre classes de ativos, inadimplência de terceiros, interrupções de servidor, eventos "black swan" e erros não detectados no código de negociação. para nomear alguns.
Os componentes de gerenciamento de risco tentam antecipar os efeitos da volatilidade excessiva e correlação entre as classes de ativos e seus efeitos subseqüentes sobre o capital comercial. Muitas vezes, isso reduz a um conjunto de cálculos estatísticos, como os "testes de estresse" de Monte Carlo. Isso é muito semelhante às necessidades computacionais de um mecanismo de precificação de derivativos e, como tal, será vinculado à CPU. Estas simulações são altamente paralelizáveis ​​(veja abaixo) e, até certo ponto, é possível "lançar hardware no problema".
Sistemas de Execução.
O trabalho do sistema de execução é receber sinais de negociação filtrados dos componentes de construção de carteira e gerenciamento de risco e enviá-los para uma corretora ou outros meios de acesso ao mercado. Para a maioria das estratégias de negociação algorítmica de varejo, isso envolve uma conexão API ou FIX para uma corretora como a Interactive Brokers. As principais considerações ao decidir sobre uma linguagem incluem a qualidade da API, a disponibilidade do wrapper de idioma para uma API, a frequência de execução e o escorregamento previsto.
A "qualidade" da API refere-se a quão bem documentada ela é, que tipo de desempenho ela fornece, se precisa de software independente para ser acessado ou se um gateway pode ser estabelecido de maneira sem cabeça (ou seja, sem GUI). No caso dos Interactive Brokers, a ferramenta Trader WorkStation precisa estar em execução em um ambiente GUI para acessar sua API. Certa vez, tive que instalar uma edição Ubuntu Desktop em um servidor de nuvem da Amazon para acessar remotamente o Interactive Brokers, puramente por esse motivo!
A maioria das APIs fornecerá uma interface C ++ e / ou Java. Geralmente, cabe à comunidade desenvolver wrappers específicos de linguagem para C #, Python, R, Excel e MatLab. Observe que, com cada plug-in adicional utilizado (especialmente os wrappers de APIs), há escopo para os bugs se infiltrarem no sistema. Sempre teste plugins desse tipo e garanta que eles sejam ativamente mantidos. Um indicador que vale a pena é ver quantas novas atualizações foram feitas em uma base de código nos últimos meses.
Freqüência de execução é da maior importância no algoritmo de execução. Observe que centenas de pedidos podem ser enviados a cada minuto e, como tal, o desempenho é crítico. A derrapagem será incorrida através de um sistema de execução com péssimo desempenho e isso terá um impacto dramático na lucratividade.
As linguagens com tipagem estática (veja abaixo) como C ++ / Java são geralmente ótimas para execução, mas há um compromisso no tempo de desenvolvimento, teste e facilidade de manutenção. Linguagens dinamicamente tipificadas, como Python e Perl, são geralmente "rápidas o suficiente". Certifique-se sempre de que os componentes são projetados de maneira modular (veja abaixo) para que possam ser "trocados" conforme o sistema é dimensionado.
Planejamento arquitetônico e processo de desenvolvimento.
Os componentes de um sistema de negociação, seus requisitos de frequência e volume foram discutidos acima, mas a infra-estrutura do sistema ainda não foi coberta. Aqueles que atuam como comerciantes de varejo ou que trabalham em um fundo pequeno provavelmente estarão "usando muitos chapéus". Será necessário cobrir o modelo alfa, os parâmetros de gerenciamento de risco e execução, e também a implementação final do sistema. Antes de aprofundar em linguagens específicas, o design de uma arquitetura de sistema ideal será discutido.
Separação de preocupações.
Uma das decisões mais importantes que devem ser tomadas no início é como "separar as preocupações" de um sistema de negociação. No desenvolvimento de software, isso significa essencialmente dividir os diferentes aspectos do sistema de negociação em componentes modulares separados.
Ao expor interfaces em cada um dos componentes, é fácil trocar partes do sistema por outras versões que auxiliem o desempenho, a confiabilidade ou a manutenção, sem modificar nenhum código de dependência externo. Essa é a "melhor prática" para esses sistemas. Para estratégias em freqüências mais baixas, tais práticas são recomendadas. Para negociação de ultra alta frequência, o livro de regras pode ter que ser ignorado em detrimento do ajuste do sistema para um desempenho ainda maior. Um sistema mais fortemente acoplado pode ser desejável.
Criar um mapa de componentes de um sistema de negociação algorítmico vale um artigo em si. No entanto, uma abordagem ideal é garantir que haja componentes separados para as entradas de dados de mercado históricas e em tempo real, armazenamento de dados, API de acesso a dados, backtester, parâmetros estratégicos, construção de portfólio, gerenciamento de risco e sistemas automatizados de execução.
Por exemplo, se o armazenamento de dados em uso estiver atualmente com desempenho insatisfatório, mesmo em níveis significativos de otimização, ele poderá ser substituído com reescritas mínimas para a API de acesso a dados ou acesso a dados. Tanto quanto o backtester e componentes subseqüentes estão em causa, não há diferença.
Outro benefício dos componentes separados é que ele permite que uma variedade de linguagens de programação seja usada no sistema geral. Não há necessidade de se restringir a um único idioma se o método de comunicação dos componentes for independente de idioma. Este será o caso se eles estiverem se comunicando via TCP / IP, Zero ou algum outro protocolo independente de linguagem.
Como um exemplo concreto, considere o caso de um sistema de backtesting sendo escrito em C ++ para desempenho "processamento de números", enquanto o gerenciador de portfólio e os sistemas de execução são escritos em Python usando SciPy e IBPy.
Considerações de desempenho.
O desempenho é uma consideração significativa para a maioria das estratégias de negociação. Para estratégias de maior frequência, é o fator mais importante. "Desempenho" abrange uma ampla variedade de problemas, como velocidade de execução algorítmica, latência de rede, largura de banda, E / S de dados, simultaneidade / paralelismo e dimensionamento. Cada uma dessas áreas é coberta individualmente por grandes livros didáticos, portanto, este artigo apenas arranhará a superfície de cada tópico. A arquitetura e a escolha de idiomas serão agora discutidas em termos de seus efeitos no desempenho.
A sabedoria predominante, como afirma Donald Knuth, um dos pais da Ciência da Computação, é que "a otimização prematura é a raiz de todo o mal". Isso é quase sempre o caso - exceto quando se constrói um algoritmo de negociação de alta frequência! Para aqueles que estão interessados ​​em estratégias de baixa frequência, uma abordagem comum é construir um sistema da maneira mais simples possível e apenas otimizar à medida que os gargalos começam a aparecer.
As ferramentas de criação de perfil são usadas para determinar onde surgem os gargalos. Os perfis podem ser feitos para todos os fatores listados acima, seja em um ambiente MS Windows ou Linux. Existem muitas ferramentas de sistema operacional e idioma disponíveis para isso, bem como utilitários de terceiros. A escolha da língua será agora discutida no contexto do desempenho.
C ++, Java, Python, R e MatLab contêm bibliotecas de alto desempenho (como parte de seus padrões ou externamente) para estrutura de dados básica e trabalho algorítmico. O C ++ é fornecido com a Biblioteca de Modelos Padrão, enquanto o Python contém o NumPy / SciPy. Tarefas matemáticas comuns são encontradas nessas bibliotecas e raramente é benéfico escrever uma nova implementação.
Uma exceção é se a arquitetura de hardware altamente personalizada for necessária e um algoritmo estiver fazendo uso extensivo de extensões proprietárias (como caches personalizados). No entanto, muitas vezes a "reinvenção da roda" desperdiça tempo que poderia ser mais bem gasto desenvolvendo e otimizando outras partes da infraestrutura de negociação. O tempo de desenvolvimento é extremamente precioso, especialmente no contexto de desenvolvedores únicos.
A latência é frequentemente uma questão do sistema de execução, pois as ferramentas de pesquisa geralmente estão situadas na mesma máquina. Para o primeiro, a latência pode ocorrer em vários pontos ao longo do caminho de execução. Os bancos de dados devem ser consultados (latência de disco / rede), os sinais devem ser gerados (sistema operacional, latência do sistema de mensagens kernal), sinais comerciais enviados (latência NIC) e pedidos processados ​​(latência interna dos sistemas de troca).
Para operações de freqüência mais alta, é necessário tornar-se intimamente familiarizado com a otimização do kernal, bem como com a otimização da transmissão da rede. Esta é uma área profunda e está significativamente além do escopo do artigo, mas se um algoritmo UHFT for desejado, esteja ciente da profundidade do conhecimento necessário!
O cache é muito útil no kit de ferramentas de um desenvolvedor de comércio quantitativo. O armazenamento em cache se refere ao conceito de armazenamento de dados acessados ​​com frequência de uma maneira que permite acesso de maior desempenho, em detrimento do possível enfraquecimento dos dados. Um caso de uso comum ocorre no desenvolvimento da Web ao obter dados de um banco de dados relacional baseado em disco e colocá-lo na memória. Quaisquer solicitações subsequentes para os dados não precisam "atingir o banco de dados" e, portanto, os ganhos de desempenho podem ser significativos.
Para situações de negociação, o armazenamento em cache pode ser extremamente benéfico. Por exemplo, o estado atual de um portfólio de estratégias pode ser armazenado em um cache até que seja reequilibrado, de modo que a lista não precise ser regenerada em cada loop do algoritmo de negociação. Essa regeneração provavelmente será uma operação alta de CPU ou E / S de disco.
No entanto, o armazenamento em cache não é isento de seus próprios problemas. A regeneração dos dados em cache de uma só vez, devido à natureza volátil do armazenamento em cache, pode colocar uma demanda significativa na infraestrutura. Outro problema é o empilhamento de cães, em que múltiplas gerações de uma nova cópia de cache são realizadas sob uma carga extremamente alta, o que leva a uma falha em cascata.
Alocação de memória dinâmica é uma operação cara na execução de software. Assim, é imperativo que os aplicativos de negociação de desempenho mais alto conheçam bem como a memória está sendo alocada e desalocada durante o fluxo do programa. Novos padrões de linguagem, como Java, C # e Python, executam a coleta de lixo automática, que se refere à desalocação da memória alocada dinamicamente quando os objetos saem do escopo.
A coleta de lixo é extremamente útil durante o desenvolvimento, pois reduz os erros e ajuda na legibilidade. No entanto, muitas vezes é sub-ótimo para certas estratégias de negociação de alta frequência. A coleta de lixo personalizada é geralmente desejada para esses casos. Em Java, por exemplo, ajustando o coletor de lixo e a configuração de heap, é possível obter alto desempenho para estratégias de HFT.
C++ doesn't provide a native garbage collector and so it is necessary to handle all memory allocation/deallocation as part of an object's implementation. While potentially error prone (potentially leading to dangling pointers) it is extremely useful to have fine-grained control of how objects appear on the heap for certain applications. When choosing a language make sure to study how the garbage collector works and whether it can be modified to optimise for a particular use case.
Many operations in algorithmic trading systems are amenable to parallelisation . This refers to the concept of carrying out multiple programmatic operations at the same time, i. e in "parallel". So-called "embarassingly parallel" algorithms include steps that can be computed fully independently of other steps. Certain statistical operations, such as Monte Carlo simulations, are a good example of embarassingly parallel algorithms as each random draw and subsequent path operation can be computed without knowledge of other paths.
Other algorithms are only partially parallelisable. Fluid dynamics simulations are such an example, where the domain of computation can be subdivided, but ultimately these domains must communicate with each other and thus the operations are partially sequential. Parallelisable algorithms are subject to Amdahl's Law, which provides a theoretical upper limit to the performance increase of a parallelised algorithm when subject to $N$ separate processes (e. g. on a CPU core or thread ).
Parallelisation has become increasingly important as a means of optimisation since processor clock-speeds have stagnated, as newer processors contain many cores with which to perform parallel calculations. The rise of consumer graphics hardware (predominently for video games) has lead to the development of Graphical Processing Units (GPUs), which contain hundreds of "cores" for highly concurrent operations. Such GPUs are now very affordable. High-level frameworks, such as Nvidia's CUDA have lead to widespread adoption in academia and finance.
Such GPU hardware is generally only suitable for the research aspect of quantitative finance, whereas other more specialised hardware (including Field-Programmable Gate Arrays - FPGAs) are used for (U)HFT. Nowadays, most modern langauges support a degree of concurrency/multithreading. Thus it is straightforward to optimise a backtester, since all calculations are generally independent of the others.
Scaling in software engineering and operations refers to the ability of the system to handle consistently increasing loads in the form of greater requests, higher processor usage and more memory allocation. In algorithmic trading a strategy is able to scale if it can accept larger quantities of capital and still produce consistent returns. The trading technology stack scales if it can endure larger trade volumes and increased latency, without bottlenecking .
While systems must be designed to scale, it is often hard to predict beforehand where a bottleneck will occur. Rigourous logging, testing, profiling and monitoring will aid greatly in allowing a system to scale. Languages themselves are often described as "unscalable". This is usually the result of misinformation, rather than hard fact. It is the total technology stack that should be ascertained for scalability, not the language. Clearly certain languages have greater performance than others in particular use cases, but one language is never "better" than another in every sense.
One means of managing scale is to separate concerns, as stated above. In order to further introduce the ability to handle "spikes" in the system (i. e. sudden volatility which triggers a raft of trades), it is useful to create a "message queuing architecture". This simply means placing a message queue system between components so that orders are "stacked up" if a certain component is unable to process many requests.
Rather than requests being lost they are simply kept in a stack until the message is handled. This is particularly useful for sending trades to an execution engine. If the engine is suffering under heavy latency then it will back up trades. A queue between the trade signal generator and the execution API will alleviate this issue at the expense of potential trade slippage. A well-respected open source message queue broker is Rabbit.
Hardware and Operating Systems.
The hardware running your strategy can have a significant impact on the profitability of your algorithm. This is not an issue restricted to high frequency traders either. A poor choice in hardware and operating system can lead to a machine crash or reboot at the most inopportune moment. Thus it is necessary to consider where your application will reside. The choice is generally between a personal desktop machine, a remote server, a "cloud" provider or an exchange co-located server.
Desktop machines are simple to install and administer, especially with newer user friendly operating systems such as Windows 7/8, Mac OSX and Ubuntu. Desktop systems do possess some significant drawbacks, however. The foremost is that the versions of operating systems designed for desktop machines are likely to require reboots/patching (and often at the worst of times!). They also use up more computational resources by the virtue of requiring a graphical user interface (GUI).
Utilising hardware in a home (or local office) environment can lead to internet connectivity and power uptime problems. The main benefit of a desktop system is that significant computational horsepower can be purchased for the fraction of the cost of a remote dedicated server (or cloud based system) of comparable speed.
A dedicated server or cloud-based machine, while often more expensive than a desktop option, allows for more significant redundancy infrastructure, such as automated data backups, the ability to more straightforwardly ensure uptime and remote monitoring. They are harder to administer since they require the ability to use remote login capabilities of the operating system.
In Windows this is generally via the GUI Remote Desktop Protocol (RDP). In Unix-based systems the command-line Secure SHell (SSH) is used. Unix-based server infrastructure is almost always command-line based which immediately renders GUI-based programming tools (such as MatLab or Excel) to be unusable.
A co-located server, as the phrase is used in the capital markets, is simply a dedicated server that resides within an exchange in order to reduce latency of the trading algorithm. This is absolutely necessary for certain high frequency trading strategies, which rely on low latency in order to generate alpha.
The final aspect to hardware choice and the choice of programming language is platform-independence. Is there a need for the code to run across multiple different operating systems? Is the code designed to be run on a particular type of processor architecture, such as the Intel x86/x64 or will it be possible to execute on RISC processors such as those manufactured by ARM? These issues will be highly dependent upon the frequency and type of strategy being implemented.
Resilience and Testing.
One of the best ways to lose a lot of money on algorithmic trading is to create a system with no resiliency . This refers to the durability of the sytem when subject to rare events, such as brokerage bankruptcies, sudden excess volatility, region-wide downtime for a cloud server provider or the accidental deletion of an entire trading database. Years of profits can be eliminated within seconds with a poorly-designed architecture. It is absolutely essential to consider issues such as debuggng, testing, logging, backups, high-availability and monitoring as core components of your system.
It is likely that in any reasonably complicated custom quantitative trading application at least 50% of development time will be spent on debugging, testing and maintenance.
Nearly all programming languages either ship with an associated debugger or possess well-respected third-party alternatives. In essence, a debugger allows execution of a program with insertion of arbitrary break points in the code path, which temporarily halt execution in order to investigate the state of the system. The main benefit of debugging is that it is possible to investigate the behaviour of code prior to a known crash point .
Debugging is an essential component in the toolbox for analysing programming errors. However, they are more widely used in compiled languages such as C++ or Java, as interpreted languages such as Python are often easier to debug due to fewer LOC and less verbose statements. Despite this tendency Python does ship with the pdb, which is a sophisticated debugging tool. The Microsoft Visual C++ IDE possesses extensive GUI debugging utilities, while for the command line Linux C++ programmer, the gdb debugger exists.
Testing in software development refers to the process of applying known parameters and results to specific functions, methods and objects within a codebase, in order to simulate behaviour and evaluate multiple code-paths, helping to ensure that a system behaves as it should. A more recent paradigm is known as Test Driven Development (TDD), where test code is developed against a specified interface with no implementation. Prior to the completion of the actual codebase all tests will fail. As code is written to "fill in the blanks", the tests will eventually all pass, at which point development should cease.
TDD requires extensive upfront specification design as well as a healthy degree of discipline in order to carry out successfully. In C++, Boost provides a unit testing framework. In Java, the JUnit library exists to fulfill the same purpose. Python also has the unittest module as part of the standard library. Many other languages possess unit testing frameworks and often there are multiple options.
In a production environment, sophisticated logging is absolutely essential. Logging refers to the process of outputting messages, with various degrees of severity, regarding execution behaviour of a system to a flat file or database. Logs are a "first line of attack" when hunting for unexpected program runtime behaviour. Unfortunately the shortcomings of a logging system tend only to be discovered after the fact! As with backups discussed below, a logging system should be given due consideration BEFORE a system is designed.
Both Microsoft Windows and Linux come with extensive system logging capability and programming languages tend to ship with standard logging libraries that cover most use cases. It is often wise to centralise logging information in order to analyse it at a later date, since it can often lead to ideas about improving performance or error reduction, which will almost certainly have a positive impact on your trading returns.
While logging of a system will provide information about what has transpired in the past, monitoring of an application will provide insight into what is happening right now . All aspects of the system should be considered for monitoring. System level metrics such as disk usage, available memory, network bandwidth and CPU usage provide basic load information.
Trading metrics such as abnormal prices/volume, sudden rapid drawdowns and account exposure for different sectors/markets should also be continuously monitored. Further, a threshold system should be instigated that provides notification when certain metrics are breached, elevating the notification method (email, SMS, automated phone call) depending upon the severity of the metric.
System monitoring is often the domain of the system administrator or operations manager. However, as a sole trading developer, these metrics must be established as part of the larger design. Many solutions for monitoring exist: proprietary, hosted and open source, which allow extensive customisation of metrics for a particular use case.
Backups and high availability should be prime concerns of a trading system. Consider the following two questions: 1) If an entire production database of market data and trading history was deleted (without backups) how would the research and execution algorithm be affected? 2) If the trading system suffers an outage for an extended period (with open positions) how would account equity and ongoing profitability be affected? The answers to both of these questions are often sobering!
It is imperative to put in place a system for backing up data and also for testing the restoration of such data. Many individuals do not test a restore strategy. If recovery from a crash has not been tested in a safe environment, what guarantees exist that restoration will be available at the worst possible moment?
Similarly, high availability needs to be "baked in from the start". Redundant infrastructure (even at additional expense) must always be considered, as the cost of downtime is likely to far outweigh the ongoing maintenance cost of such systems. I won't delve too deeply into this topic as it is a large area, but make sure it is one of the first considerations given to your trading system.
Choosing a Language.
Considerable detail has now been provided on the various factors that arise when developing a custom high-performance algorithmic trading system. The next stage is to discuss how programming languages are generally categorised.
Type Systems.
When choosing a language for a trading stack it is necessary to consider the type system . The languages which are of interest for algorithmic trading are either statically - or dynamically-typed . A statically-typed language performs checks of the types (e. g. integers, floats, custom classes etc) during the compilation process. Such languages include C++ and Java. A dynamically-typed language performs the majority of its type-checking at runtime. Such languages include Python, Perl and JavaScript.
For a highly numerical system such as an algorithmic trading engine, type-checking at compile time can be extremely beneficial, as it can eliminate many bugs that would otherwise lead to numerical errors. However, type-checking doesn't catch everything, and this is where exception handling comes in due to the necessity of having to handle unexpected operations. 'Dynamic' languages (i. e. those that are dynamically-typed) can often lead to run-time errors that would otherwise be caught with a compilation-time type-check. For this reason, the concept of TDD (see above) and unit testing arose which, when carried out correctly, often provides more safety than compile-time checking alone.
Another benefit of statically-typed languages is that the compiler is able to make many optimisations that are otherwise unavailable to the dynamically - typed language, simply because the type (and thus memory requirements) are known at compile-time. In fact, part of the inefficiency of many dynamically-typed languages stems from the fact that certain objects must be type-inspected at run-time and this carries a performance hit. Libraries for dynamic languages, such as NumPy/SciPy alleviate this issue due to enforcing a type within arrays.
Open Source or Proprietary?
One of the biggest choices available to an algorithmic trading developer is whether to use proprietary (commercial) or open source technologies. Existem vantagens e desvantagens para ambas as abordagens. It is necessary to consider how well a language is supported, the activity of the community surrounding a language, ease of installation and maintenance, quality of the documentation and any licensing/maintenance costs.
The Microsoft. NET stack (including Visual C++, Visual C#) and MathWorks' MatLab are two of the larger proprietary choices for developing custom algorithmic trading software. Both tools have had significant "battle testing" in the financial space, with the former making up the predominant software stack for investment banking trading infrastructure and the latter being heavily used for quantitative trading research within investment funds.
Microsoft and MathWorks both provide extensive high quality documentation for their products. Further, the communities surrounding each tool are very large with active web forums for both. The. NET software allows cohesive integration with multiple languages such as C++, C# and VB, as well as easy linkage to other Microsoft products such as the SQL Server database via LINQ. MatLab also has many plugins/libraries (some free, some commercial) for nearly any quantitative research domain.
There are also drawbacks. With either piece of software the costs are not insignificant for a lone trader (although Microsoft does provide entry-level version of Visual Studio for free). Microsoft tools "play well" with each other, but integrate less well with external code. Visual Studio must also be executed on Microsoft Windows, which is arguably far less performant than an equivalent Linux server which is optimally tuned.
MatLab also lacks a few key plugins such as a good wrapper around the Interactive Brokers API, one of the few brokers amenable to high-performance algorithmic trading. The main issue with proprietary products is the lack of availability of the source code. This means that if ultra performance is truly required, both of these tools will be far less attractive.
Open source tools have been industry grade for sometime. Much of the alternative asset space makes extensive use of open-source Linux, MySQL/PostgreSQL, Python, R, C++ and Java in high-performance production roles. However, they are far from restricted to this domain. Python and R, in particular, contain a wealth of extensive numerical libraries for performing nearly any type of data analysis imaginable, often at execution speeds comparable to compiled languages, with certain caveats.
The main benefit of using interpreted languages is the speed of development time. Python and R require far fewer lines of code (LOC) to achieve similar functionality, principally due to the extensive libraries. Further, they often allow interactive console based development, rapidly reducing the iterative development process.
Given that time as a developer is extremely valuable, and execution speed often less so (unless in the HFT space), it is worth giving extensive consideration to an open source technology stack. Python and R possess significant development communities and are extremely well supported, due to their popularity. Documentation is excellent and bugs (at least for core libraries) remain scarce.
Open source tools often suffer from a lack of a dedicated commercial support contract and run optimally on systems with less-forgiving user interfaces. A typical Linux server (such as Ubuntu) will often be fully command-line oriented. In addition, Python and R can be slow for certain execution tasks. There are mechanisms for integrating with C++ in order to improve execution speeds, but it requires some experience in multi-language programming.
While proprietary software is not immune from dependency/versioning issues it is far less common to have to deal with incorrect library versions in such environments. Open source operating systems such as Linux can be trickier to administer.
I will venture my personal opinion here and state that I build all of my trading tools with open source technologies. In particular I use: Ubuntu, MySQL, Python, C++ and R. The maturity, community size, ability to "dig deep" if problems occur and lower total cost ownership (TCO) far outweigh the simplicity of proprietary GUIs and easier installations. Having said that, Microsoft Visual Studio (especially for C++) is a fantastic Integrated Development Environment (IDE) which I would also highly recommend.
Batteries Included?
The header of this section refers to the "out of the box" capabilities of the language - what libraries does it contain and how good are they? This is where mature languages have an advantage over newer variants. C++, Java and Python all now possess extensive libraries for network programming, HTTP, operating system interaction, GUIs, regular expressions (regex), iteration and basic algorithms.
C++ is famed for its Standard Template Library (STL) which contains a wealth of high performance data structures and algorithms "for free". Python is known for being able to communicate with nearly any other type of system/protocol (especially the web), mostly through its own standard library. R has a wealth of statistical and econometric tools built in, while MatLab is extremely optimised for any numerical linear algebra code (which can be found in portfolio optimisation and derivatives pricing, for instance).
Outside of the standard libraries, C++ makes use of the Boost library, which fills in the "missing parts" of the standard library. In fact, many parts of Boost made it into the TR1 standard and subsequently are available in the C++11 spec, including native support for lambda expressions and concurrency.
Python has the high performance NumPy/SciPy/Pandas data analysis library combination, which has gained widespread acceptance for algorithmic trading research. Further, high-performance plugins exist for access to the main relational databases, such as MySQL++ (MySQL/C++), JDBC (Java/MatLab), MySQLdb (MySQL/Python) and psychopg2 (PostgreSQL/Python). Python can even communicate with R via the RPy plugin!
An often overlooked aspect of a trading system while in the initial research and design stage is the connectivity to a broker API. Most APIs natively support C++ and Java, but some also support C# and Python, either directly or with community-provided wrapper code to the C++ APIs. In particular, Interactive Brokers can be connected to via the IBPy plugin. If high-performance is required, brokerages will support the FIX protocol.
Conclusão.
As is now evident, the choice of programming language(s) for an algorithmic trading system is not straightforward and requires deep thought. The main considerations are performance, ease of development, resiliency and testing, separation of concerns, familiarity, maintenance, source code availability, licensing costs and maturity of libraries.
The benefit of a separated architecture is that it allows languages to be "plugged in" for different aspects of a trading stack, as and when requirements change. A trading system is an evolving tool and it is likely that any language choices will evolve along with it.
A Quantcademy.
Participe do portal de associação da Quantcademy que atende à crescente comunidade de traders de quantificação de varejo e aprenda como aumentar a lucratividade de sua estratégia.
Negociação Algorítmica Bem Sucedida.
Como encontrar novas ideias de estratégia de negociação e avaliá-las objetivamente para o seu portfólio usando um mecanismo de backtesting personalizado no Python.
Comércio Algorítmico Avançado.
Como implementar estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas Bayesianas com R e Python.

US Search Desktop.
Agradecemos seus comentários sobre como melhorar a Pesquisa do Yahoo. Este fórum é para você fazer sugestões de produtos e fornecer feedback atencioso. Estamos sempre tentando melhorar nossos produtos e podemos usar o feedback mais popular para fazer uma mudança positiva!
Se você precisar de assistência de qualquer tipo, visite nosso fórum de suporte à comunidade ou encontre ajuda individualizada em nosso site de ajuda. Este fórum não é monitorado por nenhum problema relacionado a suporte.
O fórum de comentários do produto do Yahoo agora exige um ID e uma senha válidos do Yahoo para participar.
Agora você precisa fazer login usando sua conta de e-mail do Yahoo para nos fornecer feedback e enviar votos e comentários para as ideias existentes. Se você não tiver um ID do Yahoo ou a senha do seu ID do Yahoo, inscreva-se para obter uma nova conta.
Se você tiver um ID e uma senha válidos do Yahoo, siga estas etapas se quiser remover suas postagens, comentários, votos e / ou perfil do fórum de comentários do produto do Yahoo.
Vote em uma ideia existente () ou publique uma nova ideia…
Idéias quentes Idéias superiores Novas ideias Categoria Status Meu feedback.
Xnxx vedios.
Trazer de volta o layout antigo com pesquisa de imagens.
sim: a única possibilidade (eu acho) enviar todas as informações para (alienvault.
Desinformação na ordem DVD.
Eu pedi DVD / Blueray "AL. A confidencial" tudo que eu consegui foi Blue ray & amp; um contato # para obter o DVD que não funcionou. Eu encomendo minha semana com Marilyn ____DVD / blue ray & amp; Eu peguei os dois - tolamente, assumi que o mesmo se aplicaria a L. A.___ETC não. Eu não tenho uma máquina de raio azul ----- Eu não quero uma máquina de raio azul Eu não quero filmes blueray. Como obtenho minha cópia de DVD de L. A. Confidential?
yahoo, pare de bloquear email.
Passados ​​vários meses agora, o Yahoo tem bloqueado um servidor que pára nosso e-mail.
O Yahoo foi contatado pelo dono do servidor e o Yahoo alegou que ele não bloquearia o servidor, mas ainda está sendo bloqueado. CEASE & amp; DESISTIR.
Não consigo usar os idiomas ingleses no e-mail do Yahoo.
Por favor, me dê a sugestão sobre isso.
Motor de busca no Yahoo Finance.
Um conteúdo que está no Yahoo Finance não aparece nos resultados de pesquisa do Yahoo ao pesquisar por título / título da matéria.
Existe uma razão para isso, ou uma maneira de reindexar?
Procure por "turkey ******" imagens sem ser avisado de conteúdo adulto ou que o mostre.
O Yahoo está tão empenhado em atender os gostos lascivos das pessoas que nem posso procurar imagens de uma marca de "peitos de peru" sem ser avisado sobre conteúdo adulto? Apenas usar a palavra "******" em QUALQUER contexto significa que provavelmente vou pegar seios humanos em toda a página e ter que ser avisado - e passar por etapas para evitá-lo?
Aqui está minha sugestão Yahoo:
Invente um programa de computador que reconheça palavras como 'câncer' ou 'peru' ou 'galinha' em uma frase que inclua a palavra '******' e não assuma automaticamente que a digitação "***** * "significa que estou procurando por ***********.
Descobrir uma maneira de fazer com que as pessoas que ESTÃO procurando *********** busquem ativamente por si mesmas, sem assumir que o resto de nós deve querer ************************************************ uma palavra comum - ****** - que qualquer um pode ver qualquer dia em qualquer seção de carne em qualquer supermercado em todo o país. :(
O Yahoo está tão empenhado em atender os gostos lascivos das pessoas que nem posso procurar imagens de uma marca de "peitos de peru" sem ser avisado sobre conteúdo adulto? Apenas usar a palavra "******" em QUALQUER contexto significa que provavelmente vou pegar seios humanos em toda a página e ter que ser avisado - e passar por etapas para evitá-lo?
Aqui está minha sugestão Yahoo:
Invente um programa de computador que reconheça palavras como 'câncer' ou 'peru' ou 'galinha' em uma frase que inclua a palavra '******' e não assuma automaticamente que a digitação "***** * "significa que estou procurando por mais ...
Por que, quando eu faço login no YahooGroups, todos os grupos aparecem em francês ?!
Quando entro no YahooGroups e ligo para um grupo, de repente tudo começa a aparecer em francês? O que diabos está acontecendo lá ?! Por alguma razão, o sistema está automaticamente me transferindo para o fr. groups. yahoo. Alguma ideia?
consertar o que está quebrado.
Eu não deveria ter que concordar com coisas que eu não concordo com a fim de dizer o que eu acho - eu não tive nenhum problema resolvido desde que comecei a usar o Yahoo - fui forçado a jogar meu antigo mensageiro, trocar senhas, obter novas messenger, disse para usar o meu número de telefone para alertar as pessoas que era o meu código de segurança, receber mensagens diárias sobre o bloqueio de yahoo tentativas de uso (por mim) para quem sabe por que como ele não faz e agora eu obter a nova política aparecer em cada turno - as empresas costumam pagar muito caro pela demografia que os usuários fornecem para você, sem custo, pois não sabem o que você está fazendo - está lá, mas não está bem escrito - e ninguém pode responder a menos que concordem com a política. Já é ruim o suficiente você empilhar o baralho, mas depois não fornece nenhuma opção de lidar com ele - o velho era bom o suficiente - todas essas mudanças para o pod de maré comendo mofos não corta - vou relutantemente estar ativamente olhando - estou cansado do mudanças em cada turno e mesmo aqueles que não funcionam direito, eu posso apreciar o seu negócio, mas o Ameri O homem de negócios pode vender-nos ao licitante mais alto por muito tempo - desejo-lhe boa sorte com sua nova safra de guppies - tente fazer algo realmente construtivo para aqueles a quem você serve - a cauda está abanando o cachorro novamente - isso é como um replay de Washington d c
Eu não deveria ter que concordar com coisas que eu não concordo com a fim de dizer o que eu acho - eu não tive nenhum problema resolvido desde que comecei a usar o Yahoo - fui forçado a jogar meu antigo mensageiro, trocar senhas, obter novas messenger, disse para usar o meu número de telefone para alertar as pessoas que era o meu código de segurança, receber mensagens diárias sobre o bloqueio de yahoo tentativas de uso (por mim) para quem sabe por que isso acontece e agora eu recebo a nova política em cada turno - as empresas costumam pagar muito pela demografia que os usuários fornecem para você ... mais.

Aprendendo a programar sistemas de negociação.
Eu publiquei muito conteúdo neste site nos últimos anos. Algumas delas são boas. Algumas coisas são uma porcaria. Uma coisa que continua a me surpreender é que dois dos posts mais populares do ano passado cobrem um tópico sobre o qual eu praticamente não sei nada.
Em janeiro de 2013, escrevi um post no Building & amp; Backtesting Trading Systems. Então, eu segui isso com um post no Trading System Software em abril. Deixei claro em cada uma dessas postagens que não tenho experiência ou conhecimento nesta área, mas parece ser para onde minha negociação poderia estar indo. Aprender a programar sistemas de negociação é o próximo passo lógico na minha evolução como trader.
Aparentemente, existem alguns leitores de DTAYS que se sentem da mesma maneira. There are lots of us that want to build and backtest our own strategies, but have no idea where to even start doing that. Proponho que comecemos a trabalhar para descobrir isso. Ao fazer isso, deixaremos um rastro que pode ser seguido no futuro por qualquer um que compartilhe nosso interesse e a paixão por aprender.
Com isso dito, aqui está o que eu pensei até agora:
NinjaTrader.
Depois de descartar todos os pacotes de software extremamente caros que foram abordados na publicação Trading System Software, o primeiro pacote com o qual eu realmente trabalhei foi o NinjaTrader.
NinjaTrader tinha dois pontos fortes importantes ao seu lado. Em primeiro lugar, é livre para aprender. You can download a fully functional demo that allows you to do everything the software is capable of except place live trades. Obviamente, o preço era um grande ponto de venda para mim.
Outra grande vantagem que o NinjaTrader ofereceu foi a disponibilidade de tutoriais para ajudá-lo a aprender como usar o software. Isso significa que talvez seja possível aprender sozinho o software.
A grande desvantagem que eu encontrei com NinjaTrader foi que ninguém que eu falei parecia usá-lo. Entrevistei dezenas de operadores quantitativos e nenhum deles sequer mencionou o NinjaTrader como opção. This doesn’t necessarily mean it’s a poor software package, but it did raise some concerns with me.
TradeStation.
Na época em que comecei a perceber que ninguém parecia estar usando o NinjaTrader, entrevistei Jeff, da System Trader Success. Naquela entrevista, Jeff falou longamente sobre a plataforma da TradeStation e tudo o que ele era capaz de fazer com ela.
Depois dessa entrevista, eu não pude deixar de ficar curioso, então abri uma conta na TradeStation e comecei a experimentar o software deles. Eu realmente gostei da plataforma, mas fiquei desapontado ao descobrir que eu não poderia executá-lo no meu MacBook. Eu também tive problemas para instalar a versão mais recente no meu laptop Windows.
Uma das grandes vantagens da TradeStation é que existem livros publicados sobre como programar sistemas com o código EasyLanguage. Mais uma vez, essa era uma maneira de aprender a programar estratégias quantitativas de negociação.
A grande desvantagem da TradeStation era que, depois de meus três primeiros meses, eles iriam começar a cobrar US $ 100 por mês para usar sua plataforma, a menos que eu fizesse algo como 50 negociações por mês. Havia também taxas adicionais que envolviam feeds de dados e capacidade de fazer backtest de estratégias de portfólio. O crescente custo da minha educação no TradeStation tornou-se preocupante, então fechei a conta.
thinkorswim.
Apesar da minha confusão sobre a falta de uso de letras maiúsculas, minha próxima experiência de plataforma foi com thinkorswim da TD Ameritrade. O grande ponto de venda aqui era que eu não tinha que depositar nenhum dinheiro para ter acesso ao software deles. Outra grande vantagem é que eles têm uma versão para Mac. A plataforma também vem com "pense em dinheiro", & # 8221; que lhe dá contas em dinheiro para testar estratégias.
Tanto quanto uma plataforma, thinkorswim é capaz de fazer praticamente tudo que eu estava fazendo com a TradeStation. Claro, eu não estava realmente fazendo muito. I was able to edit some “studies” a fim de ajudar com as varreduras para o Quantitative Growth Fund, mas ainda estou entrando em todas as negociações manualmente e não fazendo nenhuma programação.
Embora eu não tenha nada de ruim a dizer sobre thinkorswim, minha entrevista com Cesar Alvarez da Alvarez Quant Trading foi um abridor de olhos. Nessa entrevista, Cesar ecoou o brilhante elogio que Nick Radge havia dado à Amibroker em uma entrevista anterior.
O momento da lâmpada para mim foi perceber que este era o segundo operador profissional que estava me dizendo que o Amibroker era o melhor pacote de software para eles. Se este é o software com o qual os profissionais se sentem confortáveis, por que não é este o software que estou aprendendo? Por que estou arrastando meus pés para configurá-lo?
Então, há dois pontos de venda enormes sobre a Amibroker. Primeiro, o preço. A versão padrão atualmente vale por uma taxa única de US $ 219. Segundo, há vários livros que Cesar recomendou como tutoriais para aprender o software.
Seguindo em frente.
Com tudo isso em mente, comprei a versão de licença padrão da Amibroker. Também solicitei a Quantitative Trading Systems, de Howard Bandy, e baixei o guia gratuito da Amibroker. Se esta é a rota que os profissionais iriam, esta é a rota que devo seguir. Especialmente considerando o preço não é escandaloso.
Este é o ponto de partida para quem quer aprender sobre programação de estratégias de negociação quantitativa, mas não tem idéia de como começar. Este é o começo de nossa jornada para o lado de programação da quant trading, e qualquer um que esteja interessado é bem-vindo a vir para o passeio.
Pelo custo de US $ 219, tenho uma versão padrão do Amibroker comprada. Então, pelo custo de US $ 50, tenho dois livros de Howard Bandy. Isso significa que, por menos de US $ 300, reuni o que deveria ser uma excelente educação para iniciantes para aprender a programar sistemas de negociação.

The Easiest Programming Language for Traders.
Introducing TradeScript, our powerful new programming language which allows traders to design trading systems without prior programming experience.
Para quem é isso?
TradeScript is a development component designed for software developers who want to expand the set of features on their trading application by providing a scripting language.
TradeScript, as a language, is intended for traders who need to write their own trading strategies but don't know how to program in low-level languages such as C and C++.
TradeScript allows traders develop trading systems quickly and effortlessly. É tão fácil quanto o 1-2-3.
With TradeScript, you can enable your trading application to run scripts which provide alerts when the price of a security (stock, futures, or forex) reaches a new high, crosses over a moving average, or drops a set percentage, though those are only a few examples. TradeScript can also scan the market, generate trade signals, back-test trading strategies, and much more.
Vector Programming Languages.
Most popular trading applications such as MetaStock™, TradeStation™, NinjaTrader™, ™ and others provide their own programming languages (such as 4, 5, EasyLanguage, MetaStock's scripting language, etc.). Without a programming language, traders are unable to develop automated trading systems or perform back-testing of strategies.
A vector programming language offers extreme flexibility with a minimal learning curve. In fact, in just five minutes, you can start writing with TradeScript.
So what is a vector programming language, and why is it so easy to learn?
Vector programming languages (also known as array or multidimensional languages) generalize operations on scalars to apply transparently to vectors, matrices, and higher dimensional arrays. The idea behind vector programming is that operations apply at once to an entire set of values (a vector or field). This allows you to think and operate on whole aggregates of data, without resorting to explicit loops of individual scalar operations.
In other words, it's similar to the macro language found in Excel.
The easiest programming language for traders. The most powerful, too.
An example: to calculate a simple moving average based on the median price of a security over 30 days, in a traditional programming language such as BASIC, you would be required to write a program similar to the code shown in this block of code.
Several lines of code would be required to create the "MedianAverages" vector. But with TradeScript, you can accomplish the same thing using only one line of code as show below.
For n = bar - 30 to bar.
median = (CLOSE + OPEN) / 2.
Average = Average + median.
MedianAverages(bar) = Average / 30.
And now MedianAverage becomes a new vector which contains the 30-period simple moving average of the median price of the security.
It is not uncommon to find array programming language "one-liners" that require more than a couple of pages of BASIC, Java, or C++ code. The same holds true for creating trading systems for back testing and trade alerts.
TradeScript was originally designed as a high-performance programming language for high-frequency traders. It was designed to scan over 100,000 stocks based on complex technical criteria and return instantaneious results - in under five milliseconds. That was over ten years ago. Today it is even faster.
Back Test Statistics.
In addition to an actual Trade Log, TradeScript back test results include over 24 statistical outputs: Total Number of Trades, Average Number of Trades per Period, Number of Profitable Trades, Number of Loosing Trades, Total Profit, Total Loss, Percent Profit, Largest Profit, Largest Loss, Maximum Drawdown, Maximum Drawdown (Monte Carlo), Value Added Monthly Index (VAMI), Compound Monthly ROR, Standard Deviation, Annualized Standard Deviation, Downside Deviation, Sharpe Ratio, Annualized Sharpe Ratio, Sortino Ratio, Calmar Ratio, and Sterling Ratio.
Quick & Easy Development Solution.
If you're a software developer, you'll be surprised to know that it only takes about 30 minutes to implement TradeScript into your trading application. TradeScript comes with context-sensitive help, and our Programmer's Guide can be shipped with your application. Adding a scripting language to your trading application couldn't be any easier.
Get Started with TradeScript >
M4 Trading Platform Implementation.
TradeScript is the programming language used in our M4 trading platform, where it executes automated trades, processes real time alerts, runs stock scans, and back-tests trading systems.
Available in C++ and in C# Versions.
TradeScript is available in both C++ (x64 for best performance) and C# for developing web applications. It comes with over 30 example projects and extensive developer support to help you implement the library into your project.
Common Development Scenarios.
TradeScript is most commonly used in one of three scenarios. It is often used inside desktop trading applications, where it is embedded on the client side. It is also commonly used on the server side, where it runs strategies for thin clients, such as mobile and web applications. Another common scenario is where TradeScript is run on the server side in order to provide real time scanning results to web and mobile users.
Programação Genética.
A genetic algorithm can be integrated into TradeScript to create an autonomous trading system creation engine. Check our Evo2 genetic algorithm engine which comes with TradeScript examples.
Estudo de caso.
TradeScript is used in a number of popular trading applications, one of which is the WhenToTrade Cycles and Genetic Algorithm Platform. The case study describes how TradeScript is implemented to perform cyclical analysis of the markets.
The WhenToTrade Cycles and GA Platform combines technical analysis using TradeScript and financial charting using StockChartX with novel algorithms for cyclic analysis. The solution is part of a complete knowledge package and enables traders to apply the derived strategies to all kinds of markets and timeframes.

Комментариев нет:

Отправить комментарий