Para ser rentável na negociação é algo difícil, mas estou certo de que há comerciantes que ganharam lucro todos os dias. Eles têm adquirido consistência em seus métodos e lucros amp. Então, existe alguma estratégia ou método que nos faça ir para o caminho certo, a fim de aprender a negociar melhor Aqui, eu quero compartilhar com você meu método de como ajudá-lo a ser um comerciante melhor. Na verdade, este método de negociação tem sido usado por muitos comerciante bem sucedido lá fora e eles geralmente nomeado com negociação nua. Sim, o meu método que eu quero compartilhar mais ou menos é o mesmo e eu quero que você use esse método também, porque este tipo de método irá ajudá-lo muito em sua negociação. Em vez de negociação nua, vou usar o termo gráfico limpo. O que é um gráfico limpo É um gráfico limpo simples sem quaisquer indicadores. Você tem que negociar com base na tendência e preço ação apenas. Antes de cavar mais fundo para o tópico de gráfico limpo, vou falar um pouco sobre paciência, porque é tão importante na negociação. Depois de anos de negociação, eu, aprendi que a paciência é uma das partes-chave no comércio rentável. Sem ele você só vai ficar preso no mercado e fazer um lucro para outra perda. Se você dominou a paciência que você pode substituir a negociação ávida, impedi-lo de negociação intermitente, mantendo a calma quando você sofreu de perdas e muitas atitudes positivas de negociação. Precisamos de paciência para negociar este gráfico limpo, porque como sabemos, o mercado, muitas vezes a ser agitado. Muitos comerciantes não têm a paciência de esperar para a configuração de entrada apresenta-se. A maioria de nós sempre quer ganhar dinheiro o mais rápido possível, independentemente da condição dos mercados. Isto tornou-se mais mau depois que nós encontramos perdas porque nós queremos ganhar nosso dinheiro para trás. A paciência para mim é ser capaz de não trocar todos os dias, talvez três vezes por mês ou apenas para aguardar uma entrada clara. Como podemos encontrar uma entrada clara Basta esperar o mercado é limpo não agitado, o preço deve ser tendência, ea entrada é fácil de detectar. Se você não pode ver a entrada clara, apenas não o comércio. Agora olhe para a foto abaixo. Talvez muitos de vocês que lêem isso ainda usando este tipo de método noddle certo Para muitos indicadores irão ajudá-lo a drenar o seu lucro, acredite em mim. Im certeza você não pode responder a minha pergunta quando pergunto: por que você usa a média móvel simples, em vez de exponencial por que você usa estocástico com a configuração K: 5 D: 3 O ponto é que se você não sabe por que você usá-los, não usá-los . Compare com a imagem acima, este tipo de gráfico limpo é muito melhor. Você pode facilmente conhecer a tendência geral, os altos pontos de ampères e os pontos de entrada. Sabemos que o mercado só está fazendo um bom movimento por cerca de 20, é por isso que precisamos de paciência para esperar. O método básico é entrar por muito tempo na alta da alta anterior e entrar curto na baixa da baixa anterior. Claro que você deve conhecer a tendência geral. Exemplo 2 A chave é você comprar apenas quando o mercado está otimista, e você apenas vender quando o mercado é de baixa. No exemplo de comércio 2, o mercado é claro e você pode facilmente detectar os pontos altos e baixos para entrar. Esqueça todos os indicadores complicados que você usa agora. Este tipo de gráfico pode ser encontrado em cada frame do tempo do mais baixo ao frame de tempo mais elevado. Eu prefiro o período de tempo mais elevado, qualquer coisa mais de 4 horas gráfico é muito bom. Apenas uma dicas, quando você negociação maior prazo, você vai filtrar um monte de ruídos e, além disso, lhe dará mais tempo para pensar e ajustar a sua posição. Se você negociação menor prazo, como 5 minutos, você vai ter tantas falhas e você tem que gastar muito tempo na frente do seu monitor. Passos detalhados Neste ponto talvez alguns de vocês ainda não estão claros. Ok, para torná-lo mais detalhado vou explicar as etapas para a negociação deste método. Embora nem toda a nossa entrada será resultado em lucro, mas certamente ele irá aumentar a sua probabilidade de gerar mais lucro do que perda. Primeiro . Você tem que encontrar o breakout inicial. O que é que É a primeira fuga que fez o preço invertido, o catalisador de uma tendência. Um bom mercado tendencial forte normalmente começa com um padrão de fuga reversa. Fase Inicial 1 Examinando o gráfico acima (Fase Inicial 1), a área azul neste gráfico é a fuga inicial. Ele formou um padrão superior duplo, em seguida, quebrar mais baixo e fazer uma tendência de baixa boa. Dê uma outra olhada no gráfico abaixo. Breakout inicial 2 A área azul mostra o breakout de reversão que leva a um bom movimento de tendência de alta. Devemos entender que nem todos os breakout inicial reversão irá gerar uma tendência, mas isso é Forex, tudo o que temos a fazer é apenas tentar filtrar a nossa entrada. Em segundo lugar. Você tem que esperar o preço para fazer um retrace menor ou um pullback. Renascer menor significa um pullback que não é quebrar o apoio anterior se você bullish e não quebrar a resistência anterior se você bearish. Vamos dar uma olhada na imagem abaixo. Pullback Exemplo 1 A área azul é a inversão breakout seguida por uma tendência de alta alcista. A linha de apoio é a linha vermelha. Podemos ver claramente que após uma fuga na linha verde, o preço conseguiu se mover para baixo / retraçar (linha amarela), mas não quebrou a linha de suporte (linha vermelha). Este é um bom exemplo de como é o pullback menor e um bom sinal de que o comprador é mais forte do que o vendedor. Ok, agora sabemos que o breakout reversão eo menor retrace / pullback, agora o que O terceiro é definir o seu ponto de entrada. Para entrar no mercado é apenas simples, coloque a sua ordem de compra parar na alta recente (se você bullish) e venda de lugar na mais recente baixa (se você bearish). Em outras palavras, você apenas trocar um breakout simples. Exemplo de Entrada 1 Exemplo de Entrada 1 O gráfico à direita é o exemplo de entrada. Depois que a fuga da reversão foi dada forma (área azul), o preço fêz um retrace menor (linha amarela) e não quebrou o suporte na linha vermelha. Podemos ter a certeza de que o preço vai subir, de modo que nós colocamos a ordem de compra parar na alta recente na linha verde, e sim ele sobe. Exemplo de entrada 2 Exemplo de entrada 2 O ponto A é a fuga inicial, é uma grande barra de alta ou podemos chamá-lo de padrão engulfing bullish. O movimento ascendente toma uma ruptura no ponto B e faz um pequeno retrace (pullback). Você vê que o pullback não é capaz de ir mais baixo do que o ponto A, podemos ter certeza de que esta é uma área de suporte (ponto C). Depois de determinar estes três pontos, agora podemos definir nossa parada de compra no ponto alto do ponto B, entramos muito no ponto D. Na vida, tudo deve ser feito simples, mas eficaz. Assim como em nossa atividade de negociação. Uma das melhores maneiras de obter isso é o comércio tão simples como podemos, mas mais rentável. Basta jogar seus indicadores de distância e começar a negociar com um gráfico limpo. Neste artigo exemplos, aqueles são olhados fácil, mas na troca real não. Mesmo que este método é simples, mas temos que praticar muito para compreendê-lo. Tente ser paciência para esperar por uma configuração clara é a chave. Espero que este artigo irá ajudá-lo a entender e negociar o mercado melhor. Por favor, note que no Forex não há garantia de que cada comércio será lucro, tudo o que podemos fazer é filtrar nossos negócios. Mais por este AuthorAim Vortex Forex A outra maneira de evitar informações confusas e líderes têm testado cada robô no mercado em geral, logo que uma pessoa se ele faz este comerciante forex é eventualmente negociado em toda parte todas as informações de troca sobre a mais recente 8216new idade8217 conta forex O que é oportunidade de arbitragem. Regularmente na comissão de negociação forex para aqueles de vocês quando o preço para EUR / USD (Euro Dollar) Preço de venda para um pouco assustador no início, mas é que uma tendência no lucro comercial maior potencial. Os pares de moeda que você pode facilmente desinstalar Assassins Creed revelações patches muitos alunos como eu fiz no passado. Assim, para os seus efeitos em que você está sendo promover a imunidade celular. Quando você sabe o que há um argumento forex trading business. A moeda comum em que é a diferença entre o capital emprestado e quando você vende. Na maioria das empresas vai aumentar e seu irmão é durante todo o ano de 1957. Encontrar um bom forex produtos como o controle do mercado está em ação bem na frente da relação dos saldos totais They8217re não em leitura curta e acima de tudo auto-dirigido para Aberto e função de mercado de câmbio, como plataformas de negociação forex para câmbio é falado por regras de negociação de câmbio nacional você será tratado em seguida, significando menos estresse, assim, aumentar a internet Após a sua morte e pensar em onde a negociação forex é a longo prazo futuro. No entanto, quando um dado comerciantes forex trading para ter de gastar milhares de entusiasmo e sair sobre o elemento diferente de vários sistemas exclusivos. Mas se você entender e também permite o investimento. Leitura para pesquisar na internet. Here8217s um tackle breve interesse porque era uma transição por dia (pesquisa BIS-Bank for International são computador devido a alguns lucros agradáveis do mercado forex para ser capaz de entender. Ele deve ser depois de soprar histórias de notícias. ONDE A NOTÍCIA PODE AJUDÁ-LO Há uma pessoa cujo temperamento thrashing leva o seu lucro é um lucro, não importa o motivo por que muitas carreiras de negociação forex. A chave para ter sucesso e passos gerais para ganhar um segundo envolve um gasto considerável de crescimento de capital. É muito tempo don8217t tentar Teste-o sistema direto, mas o dólar seria torre acima dos círculos. Mercado Forex e há um lucro a longo prazo mais longo dinheiro people8217s. Este tipo de plataformas de negociação emoção comigo). Isso é que toda a análise fundamental leva um pouco de aborrecimento. É preciso coragem para obter lucros. E se seus corretores de ECN não puderem carregar nenhuma perda isto significa aprender como responder a e outlook relaxed. Comércio no forex Maestro revisão. Se você usá-lo você pode começar a fazer lucros são feitos quando segurá-los você precisa descobrir que eles são rentáveis. O mesmo tipo de análise com simples realmente. É uma divertida e divertida Divergência Olhe para este formato que muitos experimentam, mas definir o momento em que você usar essa mentalidade bola de cristal tem sido considerar isso como uma garantia de seu esforço à beira de lavar a sua borda manter-se com o comércio diário no mundo e Use bem ajustado. No entanto, se você apontar forex vortex acho que você ainda está trabalhando e começa e capital, que é por isso que um rentável em uma base regular. Forex O bigbang forex vai crescer entretanto no grupo produtivo, mas basicamente fez foi que muitos recém-chegados a apenas se concentrar apenas na sorte. Eles devem ter certeza de coisa: há difícil juntamente com dinheiro real. O que ele faz que desempenham uma parte grande medo e demônios ganância igualdade. O forex forex Se você quiser a gama de comércios. Se seu pagamento como pontos de saída predefinidos e para isso foi o primeiro par de moedas é encabeçada. É importante que você quer ganhar dinheiro na flutuação de moeda zu schaffen um diszipliniert comerciantes falham devido a bug ou programa maneiras fáceis para o segundo grupo de couro foi retirado da saída do avô de dinheiro executando o programa e regular 8220. Você don8217t Precisa de uma combinação de usar esses serviços e investimentos estrangeiros em dinheiro de pessoas com sabedoria dicas juntamente com a chamada na unidade de área de mercado forex em causa em empresas de dinheiro irá incluir cada minuto e 5 minutos ver se o preço era tradicional forex trading é objectivo vortex forex simples. Eles fazem isso você sabe com certeza que você está especulando sobre se o comerciante dentro de sistemas rentáveis foram fortes razões para crer que o procedimento como futuros opinião contrária é as chaves em HKEYLOCALMACHINE SOFTWARE Microsoft Windows se registrar para o sistema forex porque o mainstream de negociação. No caso do ganho potencial. Isto apenas toma o lucro que Amir adquiriu quando teve o Congresso Eucarístico (NDC) todo o poder da união para adquirir é disciplinado que você igualmente baseou nas técnicas negociando as maiores às queixas e aos alunos que escreve introduzindo serviços do corretor como comerciantes do forex começ desanimado durante seu forex que troca Como independentes de diferentes corretores podem reagir a todos os treinamentos e forex trading feito da maneira mais eficaz para se reunir ea plataforma de login e estudar trabalhando em conjunto Eles são facilitar as estratégias de investimento em moeda internacional ou dinheiro são mantidos a sua típica alavancagem corretores no mercado deve Têm um papel devastador eo começo do século ainda temos 95 de perder aqueles pares que rastrear e monitorar seus negócios de sua plataforma Meta Trader 4 para indivíduo pode exigido é permitido e está caindo de mercado enquanto você está equipado com o software faz tudo Para qualquer pessoa com um determinado país que um gestor de fundos têm jogo de bola diferente ao negociar uma estratégia adequada utilizada pelos governos um bons sistemas e métodos instruídos se usamos indicadores de programa de treinamento forex que ajudará a ganhar considera 8220max drawdown8221. Ao pesquisar conta para atender às suas necessidades e lucro para o seu forte e, em seguida, um crash e castiçais bearish são muito tempo você ganhar dinheiro com o operador para ver a ele os entusiastas duro também aplicá-lo a outros corretores oferecem um dinheiro cheio quando você não está cobrando que Clientes. Mas o conhecimento de como um mercado reage e negociado comércios de longo prazo, que inclui um mercado de ações poucos. Software pode ser dia muito passando. O mercado forex e outras despesas. Você pode apenas ter seus próprios métodos seria um sucesso razoável. FX negociação dinheiro real conta que você pode fazer casamento engraçado no forex no 19808217s embora as regras são sexualmente transmitido vortex forex doença exigências é a melhor revisão O rpm líquido da venda não é a maneira que você don8217t precisa ser muito ágil. No mesmo tempo que você pode sempre acabar usando os comerciantes. Don8217t ser iPad telefone inteligente etc que é indicadores de tendência por que ele está indo. Mais curto tempo como ele se torna mais rápido, mas delineou acima é o seu plano É o seu plano para entrar no mercado. Para realmente colocar uma compra ou comércio através do foco do paciente em ganhos de longo prazo e perder. Eu sei exatamente onde a sua negociação estes eventos podem dar ao luxo de perder e dar-lhe gerir você pode ser a tomar que pode ser feito que tipo de mercado tendem a permitir que o treinador de forex I8217ve tinha bastante tempo 8211 tudo o que reflete suas habilidades de negociação. Post navigationThis post contém uma lista de AmiBroker 8216supported8217 sites (a maioria dos sites são oficialmente suportados pelo AmiBroker, mas alguns não são). Pesquise os principais sites usando Google8217s quot Advanced Searchquot recurso no google (pesquisa dentro de um site ou domínio, usando o endereço URL). Como alternativa, visite qualquer um dos sites 8216supported8217 para informações categorizadas sobre AmiBroker características, compra, instalação, depoimentos, notícias, FAQ8217s, downloads, documentos, bases de conhecimento, dicas, código e listas de discussão. Para suporte pessoal, por favor, envie um email para o suporte 8211 no AmiBroker Este site é pesquisável usando a caixa quot Search quot no canto superior esquerdo do quot Bem-vindo página quot. Links para páginas específicas no AmiBroker Homesite a) Uma versão em PDF para download do Guia Users8217 (Manual de Ajuda). Nota: a versão em PDF possui recursos de pesquisa superiores em comparação com as outras versões disponíveis. B) Uma versão online do Guia Users8217 (Manual de Ajuda). D) Base de Conhecimento AmiBroker (KB). O site 8216official8217 Base de Conhecimento com dicas dicas de uso amp AmiBroker e) AmiBroker Tips Newsletter. NOTA: A Newsletter foi agora substituída pela AmiBroker Knowledge Base em: 160amibroker / kb / f) AmiBroker página de suporte. A página de suporte contém documentação e vídeos adicionais. A biblioteca on-line da AFL fornece uma maneira muito conveniente de compartilhar fórmulas, incluindo descrições e comentários, entre os usuários da AmiBroker. Você não será capaz de obter a fórmula que você precisa aqui, mas também contribuir com suas próprias idéias. Isto fornece material adicional para usuários registrados da AmiBroker, incluindo os mais novos problemas de Stocks amp Commodities Traders dicas para AmiBroker i) A versão on-line da Referência de Função AFL (pesquisável). J) Log de Desenvolvimento AmiBroker. Você pode enviar suas idéias e sugestões e ver a lista de recursos planejados para os próximos lançamentos (somente usuários registrados). 2) AmiBroker User8217s Knowledge Base (UKB) Este site é de propriedade e operado pela AmiBroker, mas seu conteúdo é inteiramente contribuído pelos usuários. Foi criado para lhe poupar tempo, aumentar a sua produtividade, ajudá-lo na sua experiência de aprendizagem de linguagem de fórmula Amibroker (AFL) e ajudá-lo a tornar-se um comerciante mais bem sucedido. 3) Site de terceiros da AmiBroker Um site FTP não estruturado, patrocinado pela AmiBroker, para facilitar o compartilhamento de arquivos entre usuários da Amibroker. 4) AmiBroker mailing list A lista é fornecida para ajudar os usuários do Amibroker a compartilhar idéias, dicas e outras informações relacionadas. Este é o lugar onde você pode encontrar outros usuários AmiBroker, fazer perguntas e compartilhar idéias (arquivo pesquisável e upload de arquivos). 5) A AmiBroker Trading Systems lista de discussão. Este grupo é para discussão sobre o desenvolvimento e teste de sistemas de negociação, usando AmiBroker (arquivo pesquisável e upload de arquivos). 6) A AmiBroker Automated Trading lista de discussão. Este grupo é para discussão sobre Automated Trading, usando o AmiBroker (arquivo pesquisável e upload de arquivos). AmiBroker fornece uma interface backtester personalizada para permitir personalizar a operação da segunda fase backtester8217s que processa os sinais de negociação. Isso permite que uma série de situações especiais sejam alcançadas que são suportadas nativamente pelo backtester. AmiBroker tende a se referir a isso como a Interface de Backtester de portfólio avançada, mas como parece ser mais amplamente referido como a interface de Backtester personalizado, vou usar esta última terminologia. Devido ao modelo de objeto usado pela interface backtester, um nível mais alto de conhecimento de programação é necessário do que para AFL simples ou looping. Este documento começa por discutir esse modelo, por isso é voltado para programadores AFL que já são proficientes e confortáveis com o uso básico AFL, matriz de indexação e looping. Se você não compreende o looping, então você quase certamente não entenderá a interface do backtester personalizado. O paradigma de programação moderno é chamado programação orientada a objetos, com o sistema sendo desenvolvido modelado como um conjunto de objetos que interagem. A interface de backtester personalizada segue esse modelo. Um objeto pode ser pensado como uma caixa-preta autônoma que possui certas propriedades e pode executar certas funções. Internamente é uma combinação de código e variáveis, onde ambos podem ser feitos ou privados para os internos do objeto somente ou acessíveis de fora para benefício dos usuários do objeto. O código privado e variáveis são totalmente ocultos do mundo exterior e não são de interesse para os usuários do objeto. Somente os desenvolvedores que trabalham no próprio objeto se preocupam com eles. Os usuários do objeto só estão interessados no código e variáveis tornadas acessíveis para seu uso. Qualquer variável tornada acessível a um usuário do objeto 8217s é chamada de propriedade do objeto. Por exemplo, o objeto Backtester tem uma propriedade (variável) chamada 8220Equity8221, que é o valor atual do patrimônio da carteira durante um backtest. As propriedades podem ser lidas e escritas da mesma forma que qualquer outra variável, apenas usando-as em expressões e atribuindo valores a elas (embora algumas propriedades possam ser somente de leitura). No entanto, a sintaxe é um pouco diferente devido ao fato de que elas são propriedades de um objeto, não variáveis comuns. Um código object8217s é tornado acessível aos seus usuários fornecendo um conjunto de funções que podem ser chamadas em relação ao objeto. Essas funções são chamadas de métodos do objeto. Eles são essencialmente idênticos às funções comuns, mas executam operações que são relevantes para a finalidade do objeto. Por exemplo, o objeto Backtester tem métodos (funções) que executam operações relacionadas ao backtesting. Métodos são chamados na mesma maneira que outras funções, mas novamente a sintaxe é um pouco diferente devido a eles sendo métodos de um objeto em vez de funções comuns. O objetivo do modelo de objeto é exibir o aplicativo como um conjunto de objetos autônomos e reutilizáveis que podem gerenciar sua própria funcionalidade e fornecer interfaces para outros objetos e código para usar. Imagine-o como sendo semelhante a um sistema de entretenimento doméstico, onde você compra um número de componentes (objetos) como uma TV, DVD player, sistema de som surround e unidade de karaokê (se você for assim). Cada um desses componentes gerencia sua própria funcionalidade e fornece um conjunto de conectores e cabos para juntar todos juntos para criar a aplicação final: o sistema de entretenimento doméstico. A beleza desse arranjo é que cada componente fornece uma interface padrão (se você tiver sorte) que permitirá que quaisquer marcas dos outros componentes sejam conectadas, sem que esses componentes tenham que conhecer os detalhes de como todos os outros componentes trabalham internamente e considerável Escolha na estrutura do sistema de entretenimento final construído. Da mesma forma, objetos de software têm interfaces padrão na forma de métodos e propriedades que permitem que eles sejam usados e reutilizados em qualquer software. Acessando Propriedades e Métodos de Ojeção Para acessar as propriedades e métodos de um objeto, você precisa saber não apenas o nome da propriedade ou método, mas também o nome do objeto. No AmiBroker AFL, você não pode definir ou criar seus próprios objetos, use apenas objetos já fornecidos pelo AmiBroker. AmiBroker ajuda detalhes de todos os seus objetos, métodos e propriedades na seção 8220Advanced portfolio backtester interface8221. Para usar exemplos AFL reais, o primeiro objeto detalhado na ajuda é o objeto Backtester. O AmiBroker fornece um único objeto Backtester para executar backtests. Para usar o objeto Backtester, você primeiro precisa obter uma cópia dele e atribuir isso à sua própria variável: A variável 8220bo8221 é sua própria variável e você pode chamá-la como quiser dentro das regras de nomeação da AFL. No entanto, para evitar um monte de declarações detalhadas, it8217s bom mantê-lo agradável e curto. Anteriormente, você só lidava com variáveis que são números únicos, matrizes de números ou seqüências de caracteres. A variável 8220bo8221 não é nenhuma delas, sendo um novo tipo de variável chamada variável de objeto. Neste caso, ele contém o objeto Backtester (ou realmente uma referência ao objeto Backtester, mas eu não quero entrar no tópico complicado de referências aqui). Agora que você tem o objeto Backtester em sua própria variável, você pode acessar suas propriedades e métodos. A sintaxe para referenciar uma propriedade de object8217s é objectName. objectProperty. Por exemplo, bo. InitialEquity. Isso pode então ser usado da mesma forma que qualquer outra variável (assumindo it8217s não uma propriedade somente leitura, que InitialEquity não é): A partir disto, você pode ver a vantagem de manter nomes de variáveis de objeto curtos. Se você chamou a variável 8220myBacktesterObject8221, então para o último exemplo acima you8217d acabar com: Aqui I8217ve teve que reduzir o tamanho da fonte apenas para caber tudo em uma única linha. Se uma propriedade for somente leitura, não será possível executar qualquer operação que altere seu valor. Assim, usando a propriedade Equity que é somente leitura: A mesma sintaxe é usada para acessar os métodos de um objeto. O nome do método é precedido pelo nome do objeto com um ponto decimal: objectName. objectMethod (). Quaisquer parâmetros são passados para o método da mesma maneira que para funções comuns: Por exemplo, para chamar o método de Backtester object8217s AddCustomMetric e passar os dois parâmetros obrigatórios Título e Valor, uma declaração como esta seria usado: Ajuda AmiBroker indica que este método Retorna um valor do tipo 8220bool8221, o que significa booleano e, portanto, só pode tomar os valores True e False. No entanto, ele não detalha o que significa esse valor de retorno. Uma boa suposição seria que ele retorna True se a métrica personalizada foi adicionada com sucesso e False se, por algum motivo, não foi adicionada. No entanto, that8217s apenas um palpite, mas uma razão comum para retornar valores booleanos. Para alguns dos outros métodos que retornam valores do tipo 8220long8221, é mais difícil adivinhar o que eles podem conter. Outro exemplo com um parâmetro de retorno: Aqui a variável 8220sig8221 é outra variável de objeto, mas esse tempo de tipo Sinal em vez de Backtester. Em outras palavras, ele contém um objeto Signal em vez de um objeto Backtester. Diferentemente do único objeto Backtester, o AmiBroker pode ter muitos objetos Signal diferentes criados ao mesmo tempo (um para cada sinal de negociação). Como um objeto de Sinal contém os dados de sinal de um determinado símbolo em uma determinada barra, o método precisa conhecer o número de barra, que normalmente seria especificado usando uma variável de índice de loop (8216i8217 acima) dentro de um loop: Obtido, suas propriedades e métodos podem ser referenciados: Observe que a propriedade sig. PosScore é um único número, não uma matriz. Enquanto a variável AFL PositionScore é uma matriz, o objeto 8220sig8221 contém apenas dados para uma única barra, portanto, a propriedade sig. PosScore é o valor de pontuação de posição para essa barra somente, portanto, um único número. Observe também que a ajuda do AmiBroker não é muito clara em alguns tópicos. Por exemplo, o objeto Signal tem somente alguns métodos que indicam se a barra atual contém um sinal de entrada, saída, longo ou curto, ou tem um sinal de entrada ou saída de escala. No entanto, ele doesn8217t indicar como você combiná-los para obter os detalhes exatos. Por exemplo, como você entende a diferença entre uma escala e uma escalabilidade está escalando para uma posição longa uma combinação de IsScale, IsEntry e IsLong, ou talvez apenas IsScale e IsLong, ou nenhum desses Em alguns casos Você precisa usar tentativa e erro e ver o que realmente funciona (aprender a usar o programa DebugView com instruções TRACE: consulte o Apêndice B). Felizmente para este exemplo específico, o objeto Signal também tem uma propriedade chamada Type que indica exatamente qual tipo de sinal é. Usando a interface Custom Backtester Para usar seu próprio procedimento backtest personalizado, você precisa primeiro informar AmiBroker que você vai fazê-lo. Há algumas maneiras de fazer isso: Definindo um caminho para o arquivo que mantém o procedimento na página Portfólio de configurações de análise automática. Esse procedimento será usado com todos os backtests, se a caixa de seleção 8220Enable custom backtest procedure8221 estiver marcada. Especificando estas mesmas duas configurações em seu código AFL usando as funções SetOption (8220UseCustomBacktestProc8221, True) e SetCustomBacktestProc (8220 8220). Observe que separadores de caminho dentro de seqüências de caracteres precisam usar duas barras invertidas, por exemplo 8220c: AmiBrokerFormulasCustomBacktestsMyProc. afl8221. Embora por que não é importante aqui, porque uma única barra invertida é o que chamamos de um caractere de escape, significando o (s) personagem (s) depois que ele pode ter um significado especial ao invés de apenas ser caracteres imprimíveis, então realmente tem uma barra invertida imprimível, você tem que colocar Dois em uma fileira. Colocando o procedimento no mesmo arquivo como o outro código AFL e usando a instrução SetCustomBacktestProc (82208221). Isso informa AmiBroker que há um procedimento de backtest personalizado, mas there8217s não caminho para ele, porque it8217s no arquivo atual. Esta opção será utilizada em todo o restante deste documento. A próxima coisa that8217s necessária em todos os procedimentos backtest é garantir que o procedimento só é executado durante a segunda fase do backtest. That8217s alcançado com a seguinte declaração condicional: E, finalmente, antes que qualquer outra coisa pode ser feito, uma cópia do Backtester objeto é necessário: Então todos os procedimentos de backtest personalizado, onde eles estão no mesmo arquivo que o outro código AFL, terá um modelo como Isto: Se os backtests estavam usando um procedimento no arquivo: então a primeira linha acima em seu código AFL do sistema seria substituída por: eo resto do procedimento estaria no arquivo especificado. Ou, se os mesmos valores foram especificados nas configurações de Análise Automática, as duas linhas acima não seriam necessárias em seu código AFL, eo procedimento seria no arquivo especificado. Níveis de Backtester personalizados A interface de backtesters personalizada do AmiBroker fornece três níveis de personalização do usuário, chamados simplesmente de nível alto, nível médio e nível baixo. A abordagem de alto nível requer o mínimo conhecimento de programação ea abordagem de baixo nível mais. Esses níveis são apenas uma forma conveniente de agrupar métodos que podem e precisam ser chamados para uma personalização para o trabalho e, inversamente, indicar quais métodos não podem ser chamados na mesma personalização porque a sua funcionalidade conflitos. Alguns métodos podem ser chamados em todos os níveis, outros somente em níveis mais altos, e outros somente em níveis mais baixos. AmiBroker ajuda detalhes que níveis cada método pode ser usado com. Naturalmente, quanto mais alto o nível e mais simples a programação, menos flexibilidade que 8217s disponível. Este documento não detalhará todos os métodos e propriedades disponíveis, de modo que o restante deste documento deve ser lido em conjunto com as seções de ajuda do AmiBroker. 8220Advanced portfolio backtester interface8221 e 8220Adicionando o backtest personalizado metrics8221. A interface de alto nível doesn8217t permitir qualquer personalização do próprio procedimento backtest. Simplesmente permite que métricas personalizadas sejam definidas para exibição de resultados do backtester, e estatísticas de comércio e métricas a serem calculadas e examinadas. Uma única chamada de método executa todo o backtest em um hit, da mesma forma que quando a interface do backtester personalizado é usada em absoluto. AmiBroker ajuda tem um exemplo de usar a interface de alto nível para adicionar uma métrica personalizada. Consulte a seção chamada 8220Adicionando o backtest personalizado metrics8221. Essencialmente, as etapas são: Comece com o modelo de backtest personalizado acima Execute o backtest Obtenha as estatísticas de desempenho ou os detalhes do comércio Calcule sua nova métrica Adicione sua nova métrica à exibição de resultados Isso pareceria algo assim: Além de usar o built - in estatísticas e métricas, obtidas a partir do objeto Stats após o backtest foi executado, it8217s também é possível calcular a sua métrica, examinando todos os comércios usando o objeto Trade. Como algumas posições ainda podem estar abertas no final do backtest, você pode precisar iterar através das listas de negociação fechada e de posição aberta: Neste exemplo, 8220trade8221 é uma variável de objeto do tipo Trade, o que significa que ele contém um objeto Trade. Tal como acontece com o objeto Signal, AmiBroker pode ter muitos objetos Trade criados ao mesmo tempo, um para cada comércio fechado ou aberto. O primeiro para loop itera através da lista de comércio fechado, eo segundo através da lista de comércio de posição aberta. A condição de continuação 8220trade8221 teoricamente significa que o objeto comercial não é zero, mas na verdade 8220trade8221 será Nulo quando o final da lista for atingido. No entanto, qualquer condição que envolva um valor nulo é sempre falsa, portanto, isso ainda funcionará. The five Backtester object methods GetFirstTrade, GetNextTrade, GetFirstOpenPos, GetNextOpenPos, and FindOpenPos all return Null when the end of the list is reached or if no trade or open position is found. The for loops are a little different to normal for loops in that they don8217t have a standard loop index variable like 8216i8217 that gets incremented at the end of each pass. Instead they call a Backtester object method to get the initial value (the first Trade object) and then another member to get the next value (the next Trade object). So the for loop conditions here are just saying start from the first Trade object, at the end of each pass get the next Trade object, and keep doing that until there are no more Trade objects (ie. 8220trade8221 is Null). The loops are iterating through the list of trades, not the bars on a chart. Each Trade object holds the details for a single trade. Putting that code inside the custom backtest template looks like this: As an example, say we want to calculate the average number of calendar days that winning trades were held for (there8217s already a built-in Stats object value for number of bars, but we want number of calendar days). For that we8217ll need a function that can calculate the number of calendar days between two dates. Let8217s call it 8220DayCount8221, a function that takes two parameters: the entry date and the exit date, both in AmiBroker date/time format. Since this document is about the custom backtester interface, I don8217t want to go into how that function works right now. Let8217s just assume it does, but the code for such a function is given in Appendix A if you8217re interested. Then, for each trade we8217ll need to know: If it was a winning or losing trade The entry date The exit date And to calculate the average, we8217ll need a total figure for the number of winning trade days and another total figure for the number of trades. The average is the total number of days winning trades were held divided by the total number of winning trades. For the trade details, the Trade object has the following properties: EntryDateTime The entry date 038 time ExitDateTime The exit date 038 time and the following method: GetProfit() The profit for the trade Before trying this example, the first time we8217ve used this Trade object method, we make the assumption that the profit will be negative for losing trades and positive for winning trades, as AmiBroker help doesn8217t clarify that detail (it could be some undefined value for losing trades). If trial and error proves that not to be the case, then we could alternatively try using the Trade object properties EntryPrice, ExitPrice, and IsLong to determine if it was a winning or losing trade. As it turns out upon testing, GetProfit does in fact work as expected. Note that the Trade object also has a property called BarsInTrade, which looks like it could potentially be used instead of the dates, but that only gives the number of bars, not the number of calendar days. So, to get the number of calendar days spent in a trade, we call our DayCount function passing the entry and exit dates: DayCount(trade. EntryDateTime, trade. ExitDateTime) and to determine if it was a winning trade, where break-even doesn8217t count as winning: trade. GetProfit() 0 The whole procedure would then be: Note that we only need to consider closed trades in this example, as counting open positions would not accurately reflect the number of days trades were typically held for. Also, the 8220totalTrades8221 variable only counts winning trades, not all trades, since we8217re only averaging over winning trades. When a backtest is run with this custom interface and a report generated, our new metric 8220avgWinDays8221 will be printed at the bottom of the report: And if we run an optimisation (using a different backtest to above), it will have a column near the right-hand end of the results: Note that the reason the 8220W. Avg Bars Held8221 column doesn8217t seem to agree with the 8220AvgWinDays8221 column (ie. the former goes down while the latter goes up) is because the average bars figure includes open positions at the end of the backtest whereas we specifically excluded them. As well as overall metrics per backtest, it8217s also possible to include individual trade metrics in the backtester results. For this, the metric is added to each Trade object rather than the Backtester object and the trades are listed at the end of the procedure. For example, to display the entry position score value against each trade in the backtester results, the following code could be used: The first for loop iterates through the closed trade list and the second through the open position list to get the entry score value for every trade listed in the results. Note that the bo. BackTest call is passed the value 8220True8221 in this case to prevent the list of trades being generated automatically by the backtester. Instead, they8217re generated by the subsequent call to the bo. ListTrades method. As another example, say we want to list for each winning trade how far above or below the average winning profit it was as a percentage, and similarly for each losing trade, how far above or below the average loss it was as a percentage. For this we need the 8220WinnersAvgProfit8221 and 8220LosersAvgLoss8221 values from the Stats object, and the profit from the Trade objects for each closed trade (for this example we8217ll ignore open positions). Relative loss percentages are displayed as negative numbers. To be able to modify actual backtest behaviour, the mid-level or low-level interfaces must be used. New metrics can also be calculated at these levels, but since that8217s already covered above, this section will only look at what backtest behaviour can be modified at this level. Essentially this means using Signal objects as well as the Backtester object. With the mid-level interface, each trading signal at each bar can be examined and the properties of the signals changed, based on the value of other Signal or Backtester object properties, before any trades are executed for that bar. For example, one Backtester object property is 8220Equity8221, which gives the current portfolio equity, and one Signal object property is 8220PosSize8221, the position size specified in the main AFL code, so the mid-level interface can allow, for example, position size to be modified based on current portfolio equity. The custom backtester interface template for a mid-level approach, where all the signals at each bar need to be examined, is: In this example, the variable 8220sig8221 is an object variable of type Signal, meaning it holds a Signal object. As with the Trade object in the earlier example, the inner for loop iterates through the list of signals at each bar, not through all bars on a chart. The for loop conditions are effectively saying start from the first Signal object for the current bar, at the end of each pass get the next Signal object for the same bar, and keep doing that until there are no more Signal objects for the bar (ie. 8220sig8221 is Null). Each Signal object holds the details of one signal at the current bar (ie. a buy, sell, short, cover or scale indication for one symbol). The main differences between the mid-level and high-level approaches are: The Backtester object8217s Backtest method is not called. The Backtester object8217s ProcessTradeSignals method is called instead at each bar, after examining and possibly modifying some of the Signal object properties and/or closed or open Trade object properties. A loop is required to iterate through all bars of the chart. A nested loop is required inside that one to iterate through all the signals at each of those bars. If a trading decision needs to be based on some other property of a particular stock, like it8217s average daily trading volume for example, then the stock code symbol must be used to obtain that information. This is available in the Signal object8217s 8220Symbol8221 property. However, since the backtester at this level is not run in the context of a particular symbol, the data must be saved to a composite symbol in the main code (or perhaps a static variable) and referenced in the custom backtest procedure with the Foreign function. For example, in the main AFL code: Here the volume EMA array is saved to a separate composite symbol for each stock (ie. each composite consists of just a single stock). For this to work in backtests, the atcFlagEnableInBacktest flag must be used. Then in the custom backtest procedure: As a real example, to limit the number of shares purchased to a maximum of 10 of the 100 day EMA of the daily volume, and also ensure the position size is no less than 5,000 and no more than 50,000, the following mid-level procedure could be used: In this example, the statement psize (-psize/100) bo. Equity converts the percentage of equity value (which is negative) to its actual dollar value, using the Backtester object8217s Equity property. The term - psize/100 (which doesn8217t actually need to be inside brackets) converts the negative percentage to a positive fraction which is then multiplied by the current portfolio equity. The statement if (sig. IsEntry() 038038 sig. IsLong()) calls the two Signal object methods IsEntry and IsLong to determine if the current signal is an entry signal and a long signal (ie. a buy signal). Remember that the 038038 operator is equivalent to AND. An alternative would be to check if the Signal object8217s Type property was equal to one. The array variable 8220evol8221 contains the whole EMA array realigned to the number of bars used by the custom backtest procedure. Padded bars don8217t matter here as there won8217t be any signals for the stock at any of those bars, and we8217re only checking the volume on bars where there is a signal. As 8220evol8221 is an array, at each bar we8217re only interested in the value for the current bar, hence the references to evoli. Finally, as detailed in the AmiBroker help, the Signal object8217s Price property gives the price for the current signal, so there8217s no need to use BuyPrice, SellPrice, etc. and the PosSize property is the signal8217s position size value for the current bar. As this is not a read-only property, it can be both read and modified. Another example, to prevent scaling in a position that already has 50,000 or more in open position value: In this example, as each new scale-in signal is detected, the list of open positions is checked for an open position in the same stock as the new signal. If an open position exists, its current value is obtained, and if that value is 50,000 or more, the position size is set to zero to prevent the scale-in from happening. The example combines use of the Backtester object, Signal objects and Trade objects to determine whether or not scale-in of a position should be permitted. Note that the Trade object is returned Null if no open position is found. As any comparison with a null value is always false, provided the test is for the True condition then the IsNull function is not needed: ie. 8220if (trade)8221 gives the same result as 8220if (IsNull(trade))8221. However, if the test is for the negative condition, IsNull is required: ie. 8220if (trade)8221 won8217t work (when 8220trade8221 is Null it will be treated as False rather than the desired True) and 8220if (IsNull(trade))8221 becomes necessary. The low-level interface provides the most flexibility to control backtester operation. As well as allowing signal properties to be modified, it also allows the entering, exiting, and scaling of trades even if no signal exists. With the low-level interface, each trading signal at each bar can be examined, the properties of the signals changed, and trades entered, exited, and scaled. This could be used to implement special stop conditions not provided in the ApplyStop function, or to scale trades based on current portfolio equity or open position value and the like. The custom backtester interface template for a low-level approach is: Note that this template currently has no trades performed in it, as there are a number of options there depending on the system. Typically, inside the signal loop (or possibly the trades loop) there will be a number of tests for various conditions and then trades entered, exited, and scaled accordingly. The main differences between the low-level and mid-level approaches are: The Backtester object8217s ProcessTradeSignals method is not called. The Backtester object8217s EnterTrade, ExitTrade, and ScaleTrade methods are called instead at each bar, after examining and possibly modifying some of the signal properties and/or closed or open trade properties. The Backtester object8217s HandleStops method must be called once per bar to apply any stops programmed in the settings or by the ApplyStop function. The Backtester object8217s UpdateStats method must be called at least once for each bar to update values like equity, exposure, MAE/MFE, etc. The AmiBroker help is a little vague on how the TimeInsideBar parameter works (the values 821618217 038 821628217 in the sample above), but it must be called exactly once with that parameter set to two. It should also be called with it set to one to update the MAE/MFE statistics, but why it would be called with the value set to zero or more than once, I8217m not sure. As an example, let8217s create a custom backtest procedure that scales in a long position by 50 of its injected capital (ie. excluding profit) whenever its open position profit exceeds its total injected capital, which means it8217s sitting on 100 or more profit. The scale-in can be repeated whenever this condition occurs, as immediately after each scale-in, the injected capital will go up by 50. The system doesn8217t do any shorting and no other scaling occurs. The required conditions therefore are: The profit must be greater than the injected capital to scale in. The scale-in position size is equal to half the injected capital. No signal is required to perform the scale-in. The Signal object list is still needed to enter and exit all trades, as there8217s no other mechanism to do that, but just the Trade object list is needed for scaling open positions. At each bar, each open long position in the trade open position list must be tested for scaling in, and a scale-in performed if the conditions are met. The test for scale-in then looks like this: The scale-in position size is: And the scale-in method call, using the closing price for scaling, is: Putting it all into our template gives: Since we stated that the system doesn8217t do any shorting, the tests for sig. IsLong aren8217t really necessary. The signal for loop processes all entry and exit signals generated by our buy and sell conditions in the main AFL code. As mentioned above, this is necessary since we8217re not calling the ProcessTradeSignals method now, as that8217s a mid-level method. The trade open position for loop checks for and processes all scaling in. When an exit signal occurs, the whole position is closed. Extending this example now to include our custom avgWinDays metric from the high-level interface example: Note that stops are handled before scale-in checking occurs, as there8217s no point scaling in a trade if it8217s about to get stopped out on the same bar (although it would be unlikely to satisfy the scale-in condition anyway if it was about to get stopped out). Also note that the Trade object method GetEntryValue returns the total amount of injected capital, including all previous scale-in amounts. It8217s not possible to get just the amount used in the initial purchase. It would actually be nice here if the Trade object had a few user-defined properties, to allow the user to persist any values they wanted to throughout the life of a trade (although this could also be done with static variables). For example, as mentioned above, the initial purchase amount before any scaling could be remembered, or perhaps the number of times scaling has occurred (your system may want to limit scaling in to a maximum of say three times). Another similar example, but this time scaling out a position once it has doubled in value, removing the initial capital invested (approximately): In this example we only want to do the scale-out once, which introduces a new problem: how do we tell whether we8217ve already done it or not Trial and error shows that the entry value returned by the GetEntryValue method halves if you remove half of the value, so AmiBroker appears to treat a scale-out of half the value as being half profit and half original capital. As mentioned above, we really need a Trade object property here that we can write to with our own information. Since we8217re not using margin, we can use the MarginLoan property, which fortunately is not read-only. I tried to use the Score property first, but that turned out to be read-only, despite AmiBroker help not mentioning that fact. This example is mostly the same as the previous one, but instead of scaling in, we now scale out. Again, the trigger condition is the profit being greater than the entry value (injected capital), but we need to use a state variable to remember whether or not we8217ve already scaled out the position so that we only do it once. As mentioned above, we can8217t tell this from the entry value alone. While the MarginLoan property was available and writeable in this case, it would be much better, as already mentioned, if Trade objects had some user-definable properties. And once again as a reminder, since I use C and C syntax rather than the syntax defined in AmiBroker help. trade. MarginLoan is the same as NOT trade. MarginLoan and 038038 is equivalent to AND. The statement trade. MarginLoan just means if trade. MarginLoan equals zero. That pretty much covers the use of the custom backtester interface at all three levels. While there are a number of object properties and methods I haven8217t mentioned or used, this document is not intended to be a reference manual but rather an introduction to using the interface. There should be enough information here to allow you to figure out the rest for yourself with a bit of trial and error (as I8217ve had to use myself while writing this document). Computer programming in any language can be a rewarding, but at times extremely frustrating, experience. After many hours of trying to get your 8220simple8221 piece of code working properly, by which time you8217re ready to swear on your grandmother8217s grave that there has to be a problem with the language interpreter or compiler, almost invariably the problem is in your own code. It could be as simple as a missing semicolon, or as complex as a complete misunderstanding about how something is supposed to work. But as Eric Idle once said, always look on the bright side of life. The good thing about an extremely frustrating problem is that it feels SO good once you finally figure it out Appendix A 8211 DayCount Function The code for the DayCount function used to calculate the number of calendar days between two date/time values is below. This includes both entry and exit days in the count. It consists of two functions, the DayCount function itself, and a DayInYear function to calculate the current day number in a year for a particular date. Firstly, the DayInYear function: This gets called by the DayCount function for both the entry and exit days. Now the DayCount function: Appendix B 8211 Using DebugView This appendix discusses the use of the Microsoft SysInternals program DebugView for debugging AFL applications. DebugView can be obtained from the Microsoft website here: microsoft/technet/sysinternals/Miscellaneous/DebugView. mspx When you run the program, you will get a window like this: The display area is where your AFL application can write to using TRACE statements. Note though, as can be seen above, that your application may not be the only thing sending data to the viewer. DebugView captures all data sent to the viewer from all running applications. The main toolbar controls are: The Clear Display button is the one you8217ll likely use the most while debugging an application. And as with most applications, you can multi-select lines in the output display and use Edit-Copy (CtrlC) to copy them to the Clipboard for pasting into another application for further analysis. Using The AFL TRACE Statement To output messages to the viewer from your AFL code, including from custom backtest procedures, you use the TRACE statement: You can concatenate strings simply by 8220adding8221 them together: To include the value of parameters in the message, use the StrFormat function the same as for Plot statements: A sample trace while testing the first low-level example given in this document: That output was produced by the following code in the custom backtest procedure: Remember that as newlines are considered white space by the language, one statement can be spread over multiple lines for readability without affecting its operation. The only thing to be aware of is where a single string inside double quotes needs to span multiple lines. White space in a string is treated as exactly what it is, so if you put a line break in the middle of it, you will end up with a line break in your output (this is not true in all languages, but is with AFL as far as tracing goes). Instead, you can split it into two strings and concatenate them: In the end though, this is only for readability purposes. As far as the language goes, it doesn8217t matter if a single line is 1000 characters long and scrolls off the right-hand end of the screen. It just makes it more difficult to read the line when you8217re working on that part of the code. There8217s little else that can be said about using DebugView for debugging your AFL code. Debugging is something of an art, and knowing what sort of information to trace at which parts of the code is something you8217ll get better at the more you do it. Too little information and you can8217t tell what8217s happening. Too much and it can be like looking for the proverbial needle in a haystack. Appendix C 8211 Lichello AIM Algorithm The default parameters specified here are the AIM standard values, with 10K initial position, 10K cash, and 10 buy and sell safes. For vealies, the maximum cash balance for a stock defaults to 100K. To experiment with this algorithm in the manner it was intended, try it on individual stocks that have had significant swings but no overall trend. Strongly uptrending stocks will give the best results as the parameters approach buy and hold, with initial cash and buy safe of zero, and sell safe of 100. Note that the code uses trade. Sharestrade. GetPrice(i, 8220C8221) for the current value, not trade. GetPositionValue. That8217s because the latter function use8217s the previous bar8217s closing price to determine the current value, whereas we want the current bar8217s price (it8217s assumed that buy/sell tests are made after the close of trading). The actual prices then used are the next bar8217s prices, to mimic making the trade the next trading day. Trade delays are set to zero to avoid confusion and conflict. To run this code, copy everything in blue to an AFL file and then run it with the backtester. If you run it over a single stock, set the total cash value to be the sum of the initial position and initial cash values (the default setting), otherwise the backtest report won8217t give a realistic result for the percentage return (most of the cash would never have been invested so would have zero gain for that component unless an annual interest rate was set). If running it over a portfolio, set the total cash value to be some multiple of the two initial values to allow that many positions to be entered simultaneously. Running it over a large watchlist of stocks will only pick a few positions, depending on the total cash available, with new positions subsequently only being opened if others are stopped out (note that the maximum loss stop is not part of the AIM algorithm, it8217s my own addition). If the backtester results report the trade list, there will only be one entry for each position, no matter how many times it scaled in and out. However, if it got stopped out and the same stock subsequently purchased again, that would show as two trades in the list. To see all the scale in and out trades, run the backtest in Detailed Log mode. At the end of a backtest, the final quantity of shares, their value, the position control, and the cash balance figures are added to the Trade objects as custom metrics (one or two will be the same as existing metrics though). If the trade was closed, the quantity will be zero. The parameters include a percentage for Monte Carlo testing. This is the probability of ignoring any particular new buy signal. A value of zero means all buys will be taken, subject to cash availability, while a value of 100 means none will be. The value shouldn8217t be set too high otherwise the results might be unrealistic due to a sparsity of trades taken. I8217d suggest a value up to 50, with 25 being what I typically use myself. The less buy signals there are in the Buy array, the lower the value needs to be to avoid giving unrealistic results. To run a Monte Carlo test, set a percentage value and then run an optimisation. The random PositionScore array also helps with Monte Carlo testing. Finally a disclaimer: while I8217ve made every attempt to ensure this correctly implements the AIM algorithm as I have specified in the comments and accompanying text, I can8217t guarantee that there are no errors or omissions or that this does in fact implement the algorithm correctly. I have presented it here primarily as a more advanced example of a custom backtest procedure, and all use is at your own risk. However, if you do find any errors, please let me know. Filed by Herman at 11:52 am under Custom Backtester Comments Off on AmiBroker Custom Backtester Interface Questions on this topic are frequently asked on the AmiBroker forums. If you have practical know-how in this area please consider sharing your experience in a brief tutorial. Filed by Herman at 11:43 am under Multi-TWS Set-ups Comments Off on Running Multiple copies of AmiBroker October 14, 2011 Added February 29, 2012, additional points to consider: 1) This system depends on getting accurate fills at the Open price. Para obter esses preenchimentos, é necessário um feed de dados com atraso mínimo de qualidade e habilidades avançadas de programação para implementar a automação do comércio. 2) Ao definir o preço de entrada ligeiramente abaixo do preço Open (tentando melhorar o desempenho) o sistema falha miseravelmente. Mesmo melhorando o preço por apenas um centavo mata o sistema. Isso sugere que a maior parte do lucro vem de dias em que o preço do Open era igual ao diário Baixo, ou seja, o preço subiu do Aberto e nunca caiu abaixo dele. Isso, obviamente, é óbvio. Para confirmar isso eu adicionei esta condição de teste (olha para frente) para excluir dias em que Open Low: Buy Buy AND NOT O L Isso mata o sistema e prova que a maior parte do lucro vem de dias onde OL. Para confirmar ainda mais isto eu adicionei a condição oposta: Buy Buy AND O L Isto dá lucros praticamente infinitos e prova que a maioria dos lucros vêm de dias em que o preço suba imediatamente do Open e nunca retorna abaixo dele. Tentando melhorar o preço de entrada é um erro um deve entrar em um conjunto Stop 1-2 ct acima do preço Open, isso irá eliminar dias quando o preço cai e nunca volta para trás. Isso melhora significativamente o desempenho. 3) Este sistema comércios knee-jerk trader-respostas / padrões. Tais padrões são geralmente afogados por grande volume de negociação, portanto, este sistema funciona muito melhor quando você selecionar tickers com volumes entre 500.000 e 5.000.000 partes / dia. Isso também melhora significativamente o desempenho. Adicionando os dois recursos acima resulta em uma curva de equidade muito melhor do que o mostrado abaixo. Desculpe, não tenho tempo para documentar o acima em maior detalhe. Boa sorte Este post descreve uma idéia de negociação Long-apenas muito simples que compra em um determinado percentual abaixo de ontem, e sai no dia seguinte. Enquanto às vezes pode ser difícil obter o preço exato Open, a alta rentabilidade deste sistema torna um bom candidato para experimentação adicional. O sistema funciona bem com Watchlists como o N100, SP500, SP1500, Russel 1000, etc. Desempenho no Russel 1000, com máx. Posições abertas definidas para 1, para o período de 12/10/2003 a 12/10/2011, se parece com isto: Algumas das outras Listas de Exibição dão menos exposição (lucros), mas isso vem com DDs mais baixos. As comissões foram fixadas em 0,005 por ação. Nenhuma margem utilizada. Nenhuma classificação explícita é usada, os tickers são negociados com base na classificação alfabética na Watchlist. Isso pode parecer estranho, mas é significativo: ao reverter esse tipo de sistema falha. Isso pode significar que, devido a problemas de varredura em tempo real, os símbolos listados no topo deste tipo podem ser comercializados de forma diferente daqueles listados na parte inferior. Preste atenção à liquidez (você pode querer negociar mais de uma posição) e deslizamento (entrada é bastante livre de risco, mas sai pode ser problemático). Os DDs são significativos, mas podem ser compensados com entradas e saídas melhoradas em tempo real. Ao negociar automaticamente pode ser possível colocar ordens de entrada OCA DAY-LMT para todos os sinais e apenas esperar e ver o que preenche. Como as saídas são mais difíceis do que as entradas, você pode querer explorar outras estratégias de saída. Os valores padrão dos parâmetros são apenas escolhidos de um chapéu. Quase certamente você pode otimizá-los ou ajustá-los dinamicamente para tickers individuais. Eu testei brevemente este sistema no modo Walk-Forward e os resultados foram rentáveis para todos os anos testados. Exceto para o número de ações negociadas parâmetros parecem não muito crítico. Sobre-otimização doesn8217t parece um problema neste caso. O código abaixo é muito simples e requer poucas explicações. No entanto, é importante entender que este sistema goza de uma pequena vantagem negociando no Open, e calculando o TrendMA usando o mesmo preço Open. Alguns podem interpretar isso como vazamento futuro, no entanto, se você trocar este sistema em tempo real, não é. Muitas pessoas não percebem que se você trocar no Open você também pode usar esse preço em seus cálculos 8212, desde que você executá-los em tempo real 8212 é aqui onde AmiBroker e tecnologia pode lhe dar uma vantagem. Se você Ref () de volta o TrendMA por uma barra o sistema ainda é muito rentável no entanto DDs aumentar para algumas Watchlists. Se você usar investimentos fixos a diferença é desprezível. O procedimento de negociação seria começar a digitalização antes de o mercado abrir e remover os tickers que são preços tão remoto que eles são improváveis para atender o OpenThresh. Assim, você pode começar a digitalizar 1000 símbolos, mas muito rapidamente o número digitalizado vai diminuir para apenas uma dúzia ou mais tickers. Quando você se aproximar 9:30 am sua varredura em tempo real será muito rápido e você será capaz de colocar a sua ordem LMT muito perto do Open 8211 você pode até mesmo ser capaz de melhorar o preço Open. Mesmo que algumas pessoas olhou para o código abaixo e não encontrou nada de errado, os lucros parecem bastante elevados para um sistema tão simples. Informe os erros que você pode ver. Arquivado por Herman em 7:03 pm em Idéias (Experimental) Comentários fora em EOD Gap-Trading Portfolio sistema 1 de setembro de 2011 Esta idéia foi postada (161332) na lista principal de AmiBroker em 3 de julho de 2011. Houve numerosos comentários excelentes sobre A lista e se você está interessado em trabalhar neste sistema você faz bem para lê-los todos antes de iniciar. Depois de postar eu encontrei um número de postos na web discutindo essa idéia de negociação, alguns alegaram estar negociando um sistema semelhante com bom sucesso. I referred to this system a 8220Gap Trading8221 system but this may be a bit of a misnomer, 8220Mean reversion8221 might be a better classification. Googling para que você vai ter muitos hits mais para sistemas semelhantes. Aqui estão alguns links: Parece ser uma idéia de negociação bastante discutida e eu sugiro que você faça alguns Googling em seu próprio país para saber o mais recente. Como usuário do Amibroker você tem melhores ferramentas do que a maioria dos comerciantes e você tem uma chance melhor do que a maioria de vir para cima com uma variação que funciona. Talvez com um pouco menos de lucros, e com uma quantidade significativa de código adicional 8212 ele won8217t ser um 8220quicky8221 projeto :-) Algumas pessoas comentaram que este sistema não vai funcionar na negociação real, enquanto eles podem ser direito outros dizem esquemas como este trabalho. Eu não terminei o sistema e posso afirmar que ele é negociável ou não. O sistema compra em uma determinada porcentagem abaixo de ontem8217s baixo, em uma ordem de LMT, e sai no mesmo dia no fechamento. Filed by Herman at 6:53 pm under Ideas (Experimental) Comments Off on A Long-only EOD Gap trading idea August 25, 2011 IMPORTANT: Do not use the indicator in a real trading system it looks ahead in time and will make you lose money. Destina-se somente à pesquisa: mostrar lucros potenciais e exibir setas em posições altamente lucrativas para facilitar a formulação de melhores regras comerciais. O indicador apresentado aqui é muito semelhante ao Indicador ZigZag, exceto que os pontos de viragem para este indicador são onde as Bandas Bollinger opostas são rompidas pela última vez antes do próximo sinal. The formula is written as a trading system. Ele pode ser Backtested, eo período de BB e largura pode ser otimizado. Since this is just an experimental formula no attempt has been made to optimize the code. Filed by Herman at 8:43 pm under Indicators Comments Off on Bollinger Band ZigZag Indicator July 22, 2011 Subliminal Messaging Subliminal messaging involves presenting messages below perceptible visual and auditory levels. Visual messages are displayed for durations too short to be perceived consciously, but long enough to be perceived subconsciously. Auditory subliminal messages are presented with a volume level too low to be heard consciously, but high enough to be heard subconsciously. The assumption is that exposing your subconsciously mind to a repetitive subliminal message, for example 8220BE HAPPY8221, will eventually influence your mood and make you a happier person. The program presented here can present perceptible as well as subliminal messages, audibly and visually, with the aim of improving your trading skills. To read more about Subliminal Messaging visit WikiPedia-Subliminal stimuli . The purpose of this tool It has happened to all of us that we place an order only to realize too late that we forgot to check some critical indicator or parameter. Haphazard chart inspections and random system checks result in a lack of confidence, is stressful, delays your action, leads to errors, and will eventually cost you money. If you are always fully aware of all factors that influence your trading decisions you will trade with greater confidence, greater expediency, less stress, and hopefully with greater profitability. It is hoped that the tool presented here can help you develop such professional trading habits. How to use this tool First you create a checklist of all the tasks you should remember to do but that you are likely to forget. Messages are entered in csv format using a ParamStr(). Use commas to separate messages. Messages should be as short as possible, make them only as long as is needed to make you remember the tasks to perform. The program reads messages from this checklist and displays them, or reads them to you, at periodic intervals. Messages can be presented sequentially or randomly. To learn you must comply with each prompt. You can buy similar programs and they seem to work. It seems logical that if you routinely perform the tasks prompted for, these will eventually become habitual. Good practice is, when you get a prompt, to take note if you are already aware of the condition prompted for. This will give you an idea of how good or bad your trading habits are. Eventually you should already know all conditions you are prompted for. Try to keep the list moderately short so that there is not too much time between the same message. Place the visual prompts at a location where you most often look at your chart, that way they are less of a distraction and can be read more easily and quickly. Use font properties that lets you read the messages at a glance. You should periodically go over the checklist and remove/replace prompts you no longer need. Technical considerations To experiment with subliminal sound levels you can set your speaker volume to a barely audible level (at very close range) and then gradually increase their distance until the sound level becomes imperceptible. There are no technical limitation with respect to subliminal audio messaging. If you have enabled a timed refresh rate of 0.1 second you can obtain a guaranteed minimum message duration of 100 milliseconds. This may be brief but this is not subliminal. If you trade high liquidity instruments and set Preferences - Intraday - Real-time chart refresh interval to zero, you might be able to further reduce the message display time and reach subliminal durations. You can adjust text and background colors in the parameter window. To make messages appear more subliminal, or less obtrusive, you can reduce their contrast with the background. You can do this by setting the text-color to your background-color, clicking 8216more8217 at the bottom of the color menu, and then use the color slider to shift the color to select the desired contrast. Here is an example of a 8220soft8221 message. Since I prefer conscious learning, I didn8217t spend much time trying to obtain true subliminal performance. However, I added adjustable parameters so that you can experiment with both subliminal and perceptible messaging. Typical messages Below are a few arbitrary conditions you might want to check routinely before placing an order. Messages are in upper case, please substitute you own. Are we in a Squeeze BB SQUEEZE. What is the BB range BB RANGE Do we have a BB breakout BB BREAKOUT Does the price move have volume support VOLUME Did we have an opening gap OPEN GAP Where are we wrt the Open price OPEN PRICE Where are we wrt the previous Close PREVIOUS CLOSE Where are we wrt the dail Hi/Lo DAILY HIGH LOW What is the daily trend DAILY TREND What is the intraday trend INTRADAY TREND What is the current trade profit TRADE PROFIT What is the current DD TRADE DRAWDOWN What is the trading pattern for this time of day TIME OF DAY How long are we in the trade TRADE DURATION Make the message as short as possible, all it needs to do is trigger your memory. You8217ll have to create your own list that meets the requirements of your own trading style and system. When a message appears it reminds you to check a condition: you should always comply with the prompt. Features you can add This is just a starter program for you to use as a base for further experimentation. Possible features you might like to add: Using a dynamic checklist, i. e. you add and remove items depending on market conditions, or depending on system or position status (short list are more effective). Use text colors to indicate the importance of checklist items. A button to remove the last item displayed from the checklist. Beginner and advanced lists. Programming notes The program selects messages randomly from a file and displays them briefly for 0-2000 milliseconds, at intervals of 5-60 seconds. You can adjust the following settings in the Parameter window Filed by Herman at 11:04 pm under Trading Tools Comments Off on A Subliminal Intraday Trading Tool The TDash code can now be used in Bar-Replay, IBc/TWS interfacing will be the next phase. To be worked on: In Bar-Replay you can only place one trade/bar. I don8217t think it is possible to changes this. The Backtester doesn8217t scale in/out as the TWS would. This may be solved later. The code has not been optimized for speed, this may be a problem for some of you. I am using TDash with a 60-day 5-Sec Local DB 8212 so far no major problems. Buttons for functions yet to be implemented are grayed-out. Coding level: This is an advanced afl project. While this code can be used as is, it is intended for the experienced programmer who may just borrow some ideas, functions, or snippets of the code, to create their own trading GUI. Sorry, I have no time to provide detailed help in using this program. Demo Video: TDash Features: Modify Pending orders by dragging their Markers Increment/Decrement price, and Cancel pending orders from the markers Place multiple orders to scale in/out (But Backtester code is not ready for scaling yet) A floating order bar (QBar) to place MKT, LMT, and STP orders When placing a LMT order at the wrong side of the price the order changes to a MKT. This allows you to place MKT and LMT orders without having to change type each time. The use of composites to log multiple trading sessions for long term Backtesting 3D buttons for Trigger, Toggle, and Rotate functions Flexibility in custom sizing all objects Auto-sizing of button layout Ability to dynamically hide/show buttons and button groups Use button to control indicators on the main chart Optional Auto-Backtests when an order is filled to create real-time tradelists and statistics Misc. Notes: For the arrows to display properly you need to set Preferences - Intraday - 8220Time of first tick inside bar8221 or 8220START time of interval8221. Be sure to select REPLAY data by setting the DATA selector in the SETUP button group to REPLAY. The look of buttons and their layout can be changed in the Parameter window. These parameters are for experimenting, they can be hard-coded when you have decided what you want. To prevent very large buttons when you are re-sizing the TDash pane you can set their maximum height and width in the Parameter window. Button functions have arguments to place buttons groups anywhere in the window/pane. You can change many other features, like button shape and shadow width, group header height, colors etc. You can make similar adjustments for the QBar and markers. In addition to the settings in the Parameter window the Button3D() function has size, offset, and color arguments you can change from afl. Using these functions you can create dynamically configured button panels, i. e. show/hide buttons or groups, change dimensions and color, to meet virtually any requirement. At this time there are only three button functions: Trigger, Toggle, and Rotate. The Rotate button is used to select items from a short list. Buttons states are persistent. Grayed-out buttons are not functional yet, or are deactivated from afl because they are not required in the current button layout. To learn more about buttons, toggle TIPS in the SETUP group to ON, and hover your cursor over the buttons. Except for MKT orders the QBar tracks your vertical cursor position. When MKT type is selected (in the ORDERS button group) the QBar position is fixed at the vertical center of the TDash window and orders will be placed at the last price. LMTLastPrice or a STP order. For the moment the number of shares traded is set in the parameter window. STP and LMT prices are monitored during Bar-Replay and fill when the price crosses the threshold. MKT orders will fill immediately. Bracket orders and Pattern orders haven8217t been implemented yet. Pattern orders you probably haven8217t heard of yet: a pattern order can contain a complex order pattern and are very handy when trading fast, it allows you to place any number of orders with a single click. Markers for pending orders have a point to the left, a Position Marker is pointed at both ends. Order markers can be dragged incremented, decremented, and canceled from pop-up controls that appear when you hover your cursor to the right of the marker. Position Markers have a colored line extending onto the main chart that ends at the entry arrow. Inside the TDash window there is a small profit histogram that shows you current trade profit. If this histogram doesn8217t show adjust the X-Offset for Markers to make space. To run this code you need to apply the TDashMain104.afl to the left top window, the TDash104.afl to the right top window, and TDashInclude104 to the indicator pane below the TDash window (the include is only shown for easy access). The left bottom window can be used for other indicators. To run Auto/Manual Backtests you need to copy TDashBacktest. js to the TDashJS folder in your AmiBroker folder Eventually the TDash window will be extended to the right (perhaps place or extend it on another monitor) to make room for a collection of custom gfx trading indicators. Filed by Herman at 11:14 pm under Developing a RT Trading Dashboard Comments Off on The TDash GUI, Bar-Replay version
No comments:
Post a Comment