Thursday 18 May 2017

Trading System Backtest Results


Backtesting O que é Backtesting Backtesting é o processo de testar uma estratégia comercial em dados históricos relevantes para garantir sua viabilidade antes que o comerciante arrisque qualquer capital real. Um comerciante pode simular a negociação de uma estratégia durante um período de tempo adequado e analisar os resultados para os níveis de rentabilidade e risco. BREAKING DOWN Backtesting Se os resultados satisfazem os critérios necessários que são aceitáveis ​​para o comerciante, a estratégia pode ser implementada com algum grau de confiança de que resultará em lucros. Se os resultados forem menos favoráveis, a estratégia pode ser modificada, ajustada e otimizada para alcançar os resultados desejados, ou pode ser completamente descartada. Uma quantidade significativa do volume negociado no mercado financeiro de hoje é feito por comerciantes que usam algum tipo de automação de computador. Isto é especialmente verdadeiro para estratégias de negociação com base em análise técnica. Backtesting é uma parte integrante do desenvolvimento de um sistema automatizado de negociação. Backtesting Significado Quando feito corretamente, backtesting pode ser uma ferramenta inestimável para tomar decisões sobre se deve utilizar uma estratégia de negociação. O período de tempo de amostra em que um backtest é realizado é crítico. A duração do período de tempo de amostragem deve ser suficientemente longa para incluir períodos de condições de mercado variáveis, incluindo tendências de alta, tendências de baixa e negociação de intervalo limitado. Realizar um teste em apenas um tipo de condição de mercado pode produzir resultados únicos que podem não funcionar bem em outras condições de mercado, o que pode levar a conclusões falsas. O tamanho da amostra no número de negócios nos resultados do teste também é crucial. Se o número de amostras de ofícios é muito pequeno, o teste pode não ser estatisticamente significativo. Uma amostra com muitas transações durante um período muito longo pode produzir resultados otimizados em que um número esmagador de trades vencedores coalesce em torno de uma condição de mercado específico ou tendência que é favorável para a estratégia. Isso também pode causar um comerciante para tirar conclusões enganosas. Mantê-lo real Um backtest deve refletir a realidade na medida do possível. Os custos de negociação que de outra forma poderiam ser considerados negligenciáveis ​​pelos comerciantes quando analisados ​​individualmente podem ter um impacto significativo quando o custo agregado é calculado durante todo o período de backtesting. Estes custos incluem comissões, spreads e derrapagens, e eles poderiam determinar a diferença entre se uma estratégia de negociação é rentável ou não. A maioria dos pacotes de software de backtesting inclui métodos para contabilizar esses custos. Talvez a métrica mais importante associada ao backtesting seja o nível de robustez da estratégia. Isto é conseguido comparando os resultados de um teste de volta otimizado em um período de tempo de amostra específico (referido como in-sample) com os resultados de um backtest com a mesma estratégia e configurações em um período de tempo de amostra diferente (referido como out - Da amostra). Se os resultados são igualmente rentáveis, então a estratégia pode ser considerada válida e robusta, e está pronta para ser implementada em mercados em tempo real. Se a estratégia falhar em comparações fora da amostra, então a estratégia precisa de mais desenvolvimento, ou deve ser abandonado completamente. Testar suas idéias de negociação Uma das coisas mais úteis que você pode fazer na janela de análise é a de back - Teste sua estratégia comercial em dados históricos. Isso pode lhe dar uma visão valiosa em pontos fortes e fracos de seu sistema antes de investir dinheiro real. Este recurso único AmiBroker é pode economizar muito dinheiro para você. Escrevendo suas regras de negociação Primeiro você precisa ter regras objetivas (ou mecânicas) para entrar e sair do mercado. Este passo é a base da sua estratégia e você precisa pensar sobre isso sozinho, já que o sistema deve corresponder a sua tolerância ao risco, tamanho de carteira, técnicas de gerenciamento de dinheiro e muitos outros fatores individuais. Depois de ter suas próprias regras para negociação você deve escrevê-los como comprar e vender regras em AmiBroker Formula Lanugage (mais curto e tampa se você quiser testar também negociação curta). Neste capítulo vamos considerar muito básico de média móvel cruzar o sistema. O sistema compraria contratos de ações quando o preço próximo sobe acima da média móvel exponencial de 45 dias e venderá contratos de ações quando o preço próximo cair abaixo da média móvel exponencial de 45 dias. A média móvel exponencial pode ser calculada em AFL usando sua função embutida EMA. Tudo o que você precisa fazer é especificar a matriz de entrada eo período de média, de modo que a média móvel exponencial de 45 dias dos preços de fechamento pode ser obtida pela seguinte declaração: O identificador de fechamento refere-se à matriz incorporada que mantém os preços de fechamento do símbolo atualmente analisado . Para testar se o preço de fechamento cruza acima da média móvel exponencial, usaremos função cruzada interna: buy cross (close, ema (close, 45)) A declaração acima define uma regra de negociação de compra. Dá quot1quot ou quottruequot quando o preço próximo cruza acima do ema (próximo, 45). Então podemos escrever a regra de venda que daria quot1quot quando acontecer a situação oposta - fechar preço cruza abaixo ema (close, 45): sell cross (ema (close, 45), close) Por favor, note que estamos usando a mesma função cross, A ordem inversa dos argumentos. A fórmula completa para negócios longos será parecida com a seguinte: cross (close, ema (close, 45)) cross (ema, close, close) NOTA: Para criar uma nova fórmula, abra o editor de fórmulas utilizando o Analysis-gtFormula Editor , Digite a fórmula e escolha Tools-gtSend no menu Análise no editor de fórmulas Para testar novamente o seu sistema, basta clicar no botão Teste de retrocesso na janela Análise automática. Certifique-se de ter digitado a fórmula que contém, pelo menos, comprar e vender regras comerciais (como mostrado acima). Quando a fórmula está correta, a AmiBroker começa a analisar seus símbolos de acordo com suas regras de negociação e gera uma lista de negócios simulados. Todo o processo é muito rápido - você pode testar milhares de símbolos em questão de minutos. A janela de progresso mostrará o tempo de conclusão estimado. Se quiser interromper o processo, basta clicar no botão Cancelar na janela de progresso. Quando o processo estiver concluído, a lista de negócios simulados é mostrada na parte inferior da janela de análise Automática. (O painel Resultados). Você pode examinar quando os sinais de compra e venda ocorreram apenas clicando duas vezes no comércio no painel Resultados. Isso lhe dará sinais brutos ou não filtrados para cada bar quando as condições de compra e venda forem atendidas. Se você quiser ver apenas setas de comércio único (abertura e fechamento do comércio atualmente selecionado), você deve clicar duas vezes na linha enquanto mantém pressionada a tecla SHIFT. Alternativamente, você pode escolher o tipo de exibição selecionando o item apropriado no menu de contexto que aparece quando você clica no painel de resultados com o botão direito do mouse. Além da lista de resultados, você pode obter estatísticas muito detalhadas sobre o desempenho do seu sistema, clicando no botão Relatório. Para saber mais sobre as estatísticas do relatório, consulte a descrição da janela do relatório. Alterando suas configurações de teste de volta O motor de teste de volta em AmiBroker usa alguns valores predefinidos para executar sua tarefa, incluindo o tamanho da carteira, periodicidade (dailyweeklymonthly), quantidade de comissão, taxa de juros, perda máxima e alvo metas de lucro, tipo de comércios, campos de preço e assim em. Todas essas configurações podem ser alteradas pelo usuário usando a janela de configurações. Depois de alterar as configurações, lembre-se de executar novamente o teste de volta se desejar que os resultados estejam em sincronia com as configurações. Por exemplo, para testar as barras semanais em vez de diariamente, basta clicar no botão Configurações, selecione Semanalmente na caixa de combinação Periodicidade e clique em OK. Em seguida, execute a análise clicando em Voltar ao teste. Nomes de variáveis ​​reservadas A tabela a seguir mostra os nomes das variáveis ​​reservadas usadas pelo Automatic Analyzer. O significado e exemplos sobre como usá-los são apresentados mais adiante neste capítulo. Permite a quantidade de dólar de controle ou porcentagem de carteira que é investido no comércio (veja explicações abaixo) Análise Automática (novo em 3.9) Até agora nós discutimos bastante simples uso do testador de volta. AmiBroker, no entanto, suporta métodos muito mais sofisticados e conceitos que serão discutidos mais adiante neste capítulo. Observe que o usuário iniciante deve primeiro jogar um pouco com os tópicos mais fáceis descritos acima antes de prosseguir. Assim, quando você estiver pronto, por favor, dê uma olhada nos seguintes recursos recentemente introduzidos do back-tester: a) host AFL script para escritores fórmula avançada b) suporte melhorado para operações curtas c) a maneira de controlar o preço de execução de ordem a partir do Script d) vários tipos de paradas no back tester e) dimensionamento da posição f) tamanho do lote redondo e tamanho do carrapato g) conta de margem h) backtesting futuros AFL scripting host é um tópico avançado que é abordado em um documento separado disponível aqui e eu não vou discutir Documento. Recursos restantes são muito mais fáceis de entender. Nas versões anteriores do AmiBroker, se você quisesse back-testar sistema usando longas e curtas transações, você só poderia simular stop-and-reverse estratégia. Quando a posição longa foi fechada, uma nova posição curta foi aberta immediatelly. Foi porque comprar e vender variáveis ​​reservadas foram utilizados para ambos os tipos de comércios. Agora (com a versão 3.59 ou superior) existem variáveis ​​reservadas separadas para abrir e fechar negócios longos e curtos: buy - quottruequot ou 1 value abre trading long trade - quottruequot ou 1 value fecha trade short curto - quottruequot ou 1 value abre short trade cover - quottruequot ou 1 valor fecha comércio curto Som, a fim de back-test operações de curto você precisa atribuir curto e cobrir variáveis. Se você usar sistema stop-and-reverse (sempre no mercado) simplesmente atribuir vender a curto e comprar para cobrir curto vender cobertura comprar Isto simula o modo pré-3.59 versões trabalhadas. Mas agora AmiBroker permite que você tenha regras de negociação separadas para ir muito tempo e para ir curto, como mostrado neste exemplo simples: longas negociações entrada e saída regras: comprar cross (cci (), 100) vender cross (100, cci () (Cci (), -100) Observe que neste exemplo se CCI está entre -100 e 100 você está fora do mercado. Controle de preço de mercado AmiBroker agora fornece 4 novas variáveis ​​reservadas para especificar o preço ao qual as ordens de compra, venda, curto e de cobertura são executadas. Esses arrays têm os seguintes nomes: buyprice, sellprice, shortprice e coverprice. A principal aplicação dessas variáveis ​​é controlar o preço do comércio: BuyPrice IIF (dayofweek () 1, HIGH, CLOSE) na segunda-feira comprar em alta, caso contrário, comprar em close Então você pode escrever o seguinte para simular real stop-orders: BuyStop. A fórmula para comprar stop nível SellStop. A fórmula para o nível do batente da venda se em qualquer altura durante o dia os preços se levantam acima do nível do buystop (highgtbuystop) a ordem de compra ocorre (no buystop ou baixo o que for mais elevado) Compre a cruz (High, BuyStop) se durante o dia os preços caem abaixo do nível do sellprice (Sellstop baixa), certifique-se de preço de compra não inferior a Baixo preço de SellPrice (SellStop, alta) certifique-se Preço de venda não maior do que Alto Observe que AmiBroker predefinições de preço de compra, sellprice, shortprice e coverprice com os valores definidos na janela de configurações de teste do sistema (mostrado abaixo), então você pode, mas não precisa defini-los em sua fórmula. Se você não os define AmiBroker funciona como nas versões antigas. Durante o back-testing, o AmiBroker verificará se os valores que você atribuiu ao buyprice, sellprice, shortprice, coverprice se encaixam no intervalo alto-baixo da determinada barra. Se não, o AmiBroker irá ajustá-lo a um preço alto (se o preço for maior do que alto) ou ao preço baixo (se o preço for menor do que baixo). Como você pode ver na foto acima, novas configurações para As paradas de destino de lucro estão disponíveis na janela de configurações do teste do sistema. As paradas de objetivo de lucro são executadas quando o preço alto para um determinado dia excede o nível de parada que pode ser dado como uma porcentagem ou um aumento de ponto do preço de compra. Por padrão, as paradas são executadas ao preço que você define como matriz de preço de venda (para negócios longos) ou matriz de preço de cobertura (para negócios curtos). Esse comportamento pode ser alterado usando QuotExit no stopquot recurso. QuotExit at stopquot feature Se você marcar quotExit at stopquot box nas configurações, as paradas serão executadas no nível de parada exata, ou seja, se você definir o objetivo de lucro stop em 10 sua parada eo preço de compra foi 50 stop order será executado em 55, mesmo se Sua matriz de preço de venda contém valor diferente (por exemplo preço de fechamento de 56). Perda máxima pára de trabalhar de forma semelhante - eles são executados quando o preço baixo para um determinado dia cai abaixo do nível de parada que pode ser dada como uma porcentagem ou ponto de aumento a partir do preço de compra Este tipo de parar é usado para proteger os lucros como ele Acompanha o seu comércio de modo que cada vez que um valor de posição atinge um novo máximo, o stop de arrasto é colocado em um nível mais alto. Quando o lucro cai abaixo do nível de parada final, a posição é fechada. Este mecanismo é ilustrado na imagem abaixo (10 stop de arrasto é mostrado): um exemplo de implementação de baixo nível de lucro-alvo parar em AFL: Buy Cross (MACD (), Signal ()) para (i 0 i BarCount i) If (priceatbuy 0 Buy i) priceatbuy BuyPrice i if (priceatbuy gt 0 SellPrice i gt 1.1 priceatbuy) Sell i 1 SellPrice i 1.1 preçoatbuy priceatbuy 0 else Sell i 0 Este é um novo recurso na versão 3.9. Posição de dimensionamento no backtester é implementado por meio de nova variável reservada PositionSize ltsize arraygt Agora você pode controlar o montante em dólar ou percentual de carteira que é investido no número de comércio positivo definir (dólar) montante que é investido no comércio por exemplo: PositionSize 1000 investir 1000 em todos os números negativos de comércio -100 ..- 1 define porcentagem: -100 dá 100 do tamanho atual da carteira, -33 dá 33 do capital disponível, por exemplo: PositionSize -50 sempre investir apenas metade do exemplo atual de dimensionamento dinâmico de ações: PositionSize - 100 RSI () como RSI varia de 0..100 isso resultará em posição dependendo dos valores RSI - gt valores baixos de RSI resultará em maior percentagem investido Se menos de 100 de dinheiro disponível é investido, em seguida, o montante remanescente ganha taxa de juros Como definido nas configurações. Há também uma nova caixa de seleção na janela de configurações AA: quotAllow tamanho da posição shrinkingquot - isso controla como backtester lida com a situação quando o tamanho da posição solicitada (através da variável PositionSize) excede o dinheiro disponível: quando este sinalizador é marcado a posição é inserida com o tamanho shinked para Disponível se não estiver selecionado, a posição não será inserida. Para ver os tamanhos de posição reais, use um novo modo de relatório na janela de configurações AA: quotLista comercial com preços e pos. Sizequot Para o fim, aqui está um exemplo da técnica de dimensionamento de posição baseada em Tharps ATR codificada na AFL: Comprar ltyour comprar fórmula heregt Vender 0 vender apenas por parar TrailStopAmount 2 ATR (20) Capital 100000 IMPORTANTE: Defini-lo também nas Configurações: Inicial A técnica pode ser resumida da seguinte forma: O capital total por símbolo é de 100.000, estabelecemos o nível de risco em 1 do patrimônio líquido total. O valor total do capital por símbolo é de 100.000, e nós definimos o nível de risco em 1 do patrimônio líquido total (RiskTrailStopAmount). Nível de risco é definido da seguinte forma: se uma parada de arrasto em um estoque 50 é, digamos, 45 (o valor de dois ATRs contra a posição), a perda 5 é dividido em 1000 de risco para dar 200 ações para comprar. Assim, o risco de perda é 1000, mas o risco de alocação é de 200 ações x 50share ou 10.000. Então, estamos alocando 10 do capital próprio para a compra, mas apenas arriscando 1000. (Excerto editado da lista de discussão AmiBroker) Tamanho do lote e tamanho do carrapato Vários instrumentos são negociados com vários quottrading unitsquot ou quotblocksquot. Por exemplo, você pode comprar número fracionário de unidades de fundo mútuo, mas você não pode comprar o número fracionário de ações. Às vezes você tem que comprar em 10s ou 100s lotes. AmiBroker agora permite que você especifique o tamanho do bloco no nível global e por símbolo. Você pode definir o tamanho do lote redondo por símbolo na página Symbol-gtInformation (figura 3). O valor de zero significa que o símbolo não tem tamanho de lote redondo especial e usará quotDefault round lot sizequot (configuração global) da página de configurações de análise automática (figura 1). Se o tamanho padrão também é definido como zero, isso significa que o número fracionário de contratos de ações é permitido. Você também pode controlar o tamanho do lote redondo diretamente de sua fórmula AFL usando RoundLotSize variável reservada, por exemplo: Esta configuração controla o movimento de preço mínimo do símbolo dado. Você pode defini-lo no nível global e por símbolo. Tal como acontece com o tamanho do lote redondo, pode definir o tamanho do carimbo por símbolo na página Symbol-gtInformation (figura 3). O valor de zero instrui o AmiBroker a usar quotdefault tick sizequot definido na página Configurações (figura 1) da janela Automatic Analysis. Se o tamanho padrão do alerta também estiver definido como zero, significa que não há movimento de preço mínimo. Você pode definir e recuperar o tamanho do carrapato também da fórmula AFL usando a variável reservada TickSize, por exemplo: Note que a configuração do tamanho do carrapato afeta somente os comércios fechados pelas paradas internas e ou ApplyStop (). O backtester assume que os dados de preço seguem os requisitos de tamanho de tick e não altera os arrays de preço fornecidos pelo usuário. Portanto, especificar o tamanho do alerta só faz sentido se você estiver usando as paradas internas para que os pontos de saída sejam gerados em níveis de preços quotallowedquot em vez de calculados. Por exemplo, no Japão - você não pode ter partes fracionárias de ienes para que você deve definir ticksize global para 1, assim built-in pára comércios de saída em níveis inteiros. Configuração da margem da conta define o requisito de margem percentual para toda a conta. O valor padrão da margem da conta é 100. Isso significa que você tem que fornecer 100 fundos para entrar no comércio e esta é a maneira como backtester trabalhou em versões anteriores. Mas agora você pode simular uma conta de margem. Quando você compra na margem você está simplesmente emprestado dinheiro de seu corretor para comprar ações. Com os regulamentos atuais você pode colocar até 50 do preço de compra do estoque que você deseja comprar e emprestar a outra metade de seu corretor. Para simular isso basta digitar 50 no campo Margem da conta (veja a figura 1). Se o seu patrimônio intial é definido como 10000 seu poder de compra será então 20000 e você será capaz de entrar em posições maiores. Observe que essa configuração define a margem para a conta inteira e NÃO está relacionada a negociação de futuros. Em outras palavras, você pode negociar ações na conta de margem. QuotRegistro inverso força a saída para as configurações do Backtester. Quando está ON (a configuração padrão) - backtester funciona como nas versões anteriores e fecha já positon aberto se novo sinal de entrada no sentido inverso é encontrado. Se este interruptor estiver DESLIGADO - mesmo que ocorra sinal inverso, o backtester mantém o comércio aberto e não fecha a posição até que o sinal de saída regular (venda ou cobertura) seja gerado. Em outras palavras, quando este interruptor é OFF backtester ignora sinais curtos durante longos comércios e ignora Buy sinais durante curtas operações. QuotAver a mesma saída de barra (barra única) opção quot para as Configurações Quando está ON (as configurações padrão) - entrada e saída na mesma barra é permitida (como nas versões anteriores) se estiver OFF - a saída pode acontecer a partir de Apenas a barra seguinte (isto aplica-se a sinais regulares, existe uma definição separada para as saídas geradas pelo ApplyStop). Mudar para OFF permite reproduzir o comportamento do MS backtester que não é capaz de lidar com saídas no mesmo dia. QuotActivate pára imediatamentequot Esta definição resolve o problema de testar sistemas que entram em comércios no mercado aberto. Nas versões anteriores a 4.09, o backtester assumiu que você estava entrando em negociações no mercado próximo, de modo que as paradas embutidas foram ativadas a partir do dia seguinte. O problema foi quando você de fato definido preço aberto como o preço de entrada de comércio - então mesmo dia flutuações de preços não desencadear as paradas. Houve algumas soluções publicadas baseadas no código AFL, mas agora você não precisa usá-los. Simplesmente se você trocar em aberto você deve marcar quotActivate pára imediatamentequot (imagem 1). Você pode perguntar por que não basta verificar o buyprice ou shortprice matriz se é igual ao preço aberto. Infelizmente este não funcionará. Por que simplesmente porque há dias de doji quando o preço aberto iguala o close e então o backtester nunca saberá se o comércio foi entrado no mercado aberto ou próximo. Então nós realmente precisamos de uma configuração separada. QuotUtilizar QuickAFLquotQuickAFL (tm) é um recurso que permite um cálculo AFL mais rápido sob certas condições. Inicialmente (desde 2003) estava disponível apenas para indicadores, a partir da versão 5.14 está disponível na Análise Automática também. Inicialmente, a idéia era permitir redesenhos de gráfico mais rápidos através do cálculo da fórmula AFL apenas para aquela parte que é visível no gráfico. De forma semelhante, janela de análise automática pode usar subconjunto de cotações disponíveis para calcular AFL, se selecionado 8220range8221 parâmetro é menor do que 8220Todos os quotationsquot. Explicação detalhada sobre como QuickAFL funciona e como controlá-lo, é fornecida neste artigo da Base de Dados de Conhecimento: amibrokerkb20080703quickafl Observe que essa opção funciona não somente no backtest, mas também em otimizações, explorações e scans. Excel Benchmark em vez do benchmark mais antigo no Post abaixo, Aqui está o link para o novo e bem melhorado Excel Benchmark (adicionado em 2011). Abaixo está a versão antiga do Benchmark. Atualizado em 2 de julho de 2010, adicionado Test of Excel 2010. O desempenho varia muito entre diferentes sistemas operacionais e versões do Excel. O Benchmark. xls mede essa diferença no desempenho e pode ajudar os usuários de excel a decidir se atualizam ou não seus sistemas para um desempenho superior. Benchmark. xls testa atualizações gráficas rápidas com dados Live simulados. Os recursos testados são típicos do que um Stock, Futuros ou Forex automatizado programa de negociação exigiria. Benchmark. xls repete os dados de tick dos futuros SampP 500 ES (Emini). Na planilha de benchmark, existem dois botões de backtest: Fast Backtest desativa screenupdating durante o backtest e Backtest deixa-lo em para que você possa ver a atualização de gráfico e comércios traçados durante o backtest. Conforme listado abaixo Windows XPExcel 2003 levou apenas 4 segundos para executar backtest rápido enquanto o VistaOffice 2007 levou 22 segundos em meu próprio teste listado abaixo. Com o sistema Windows 7 mostrado abaixo, o Excel 2003 completou o Full Backtest em apenas 5 minutos e 41 segundos. O Excel 2007 demorou 40 minutos e 26 segundos eo Excel 2010 mostrou alguma melhora em relação a 2007, levando 34 minutos e 51 segundos. Para testar a velocidade do seu sistema: 1. Faça o download e abra o Benchmark. xls 2. Execute o Backtest e anote o seu tempo 3. Execute Backtest rápido e observe seu tempo Sinta-se Livre para postar seus resultados na seção de comentários, incluindo informações do sistema e versão do Excel. Nome do sistema operacional Microsoft Windows 7 Home Premium Versão 6.1.7600 Build 7600 Outro sistema operacional Descrição Não disponível Sistema operacional Fabricante Microsoft Corporation Fabricante do sistema Fabricante TOSHIBA Modelo de sistema Satellite L555D Tipo de sistema Processador de PC baseado em x64 AMD Turion (tm) II Dual-Core Mobile M520, 2300 Mhz , 2 processador (es) lógico (s) BIOS VersãoDate TOSHIBA V1.20, 11262009 SMBIOS Versão 2.6 Diretório Windows C: windows Diretório do sistema C: windowssystem32 Dispositivo de inicialização DeviceHarddiskVolume1 Locale United States Hardware Abstraction Layer Versão 82206.1.7600.163858221 Fuso horário Central Hora de Verão Instalada Memória Física (RAM) 4.00 GB Memória Física Total 3.75 GB Memória Física Disponível 2.58 GB Memória Virtual Total 7.49 GB Memória Virtual Disponível 6.02 GB Espaço no Ficheiro de Página 3.75 GB Excel 2010 (32 bit) Resultados do Backtest rápido: 00:00:07 (Arquivo Excel 2010 XLS no modo de compatibilidade). Resultados Fast Backtest: 00:00:07 (tipo de arquivo Excel 2010 XLSM).

No comments:

Post a Comment