Tuesday 22 August 2017

Ema Trading System Afl


Como otimizar o sistema de negociação NOTA: Este é tópico bastante avançado. Leia os tutoriais anteriores da AFL primeiro. A idéia por trás de uma otimização é simples. Primeiro você tem que ter um sistema de comércio, este pode ser um crossover média móvel simples, por exemplo. Em quase todos os sistemas existem alguns parâmetros (como período de média) que decidem como se comporta o sistema (isto é, é adequado para longo ou curto prazo, como reagir a estoques altamente voláteis, etc.). A otimização é o processo de encontrar valores ótimos desses parâmetros (dando maior lucro do sistema) para um dado símbolo (ou um portfólio de símbolos). AmiBroker é um dos poucos programas que permitem otimizar seu sistema em vários símbolos ao mesmo tempo. Para otimizar seu sistema você tem que definir de um até dez parâmetros para ser otimizado. Você decide qual é o valor mínimo e máximo permitido do parâmetro e em que incrementos esse valor deve ser atualizado. AmiBroker então executa vários testes de volta o sistema usando TODAS as combinações possíveis de valores de parâmetros. Quando este processo é terminado AmiBroker exibe a lista de resultados classificados por lucro líquido. É possível ver os valores dos parâmetros de otimização que dão o melhor resultado. Escrevendo a fórmula AFL A otimização no back tester é suportada por uma nova função chamada optimize. A sintaxe desta função é a seguinte: variável otimizar (quot Descrição quot, default. Min. Passo máximo) variável - é a variável AFL normal que recebe o valor retornado pela função otimizar. Com os modos de backtesting, varredura, exploração e comentar normal, a função de otimização retorna o valor padrão, então a chamada de função acima é equivalente a: default da variável No modo de otimização, a função otimizar retorna valores sucessivos de min a max (inclusivamente) com step stepping. Quot Descriptionquot é uma string que é usada para identificar a variável de otimização e é exibida como um nome de coluna na lista de resultados de otimização. O padrão é um valor padrão que otimizar a função retorna nos modos de exploração, de indicador, de comentário, de varredura e de back-test normal min é um valor mínimo da variável sendo otimizado max é um valor máximo da variável sendo otimizado step é um intervalo usado para aumentar a Valor de min para máximo AmiBroker suporta até 64 chamadas para otimizar a função (portanto, até 64 variáveis ​​de otimização), observe que se você estiver usando otimização exaustiva, então é realmente uma boa idéia para limitar o número de variáveis ​​de otimização para apenas alguns. Cada chamada para otimizar gerar (max - min) loops de otimização de etapa e múltiplas chamadas para otimizar multiplicam o número de execuções necessárias. Por exemplo, otimizar dois parâmetros usando 10 etapas exigirá 1010 100 loops de otimização. Call optimize função apenas ONCE por variável no início da sua fórmula como cada chamada gera um novo otimização loops Otimização de símbolo múltiplo é totalmente suportado por AmiBroker O espaço de pesquisa máximo é 2 64 (10 19 10,000,000,000,000,000,000) combinações 1. Otimização de variável única: sigavg Otimizar (Sinal (12. 26. sigavg), MACD (12. 26)) Sinal (12. 26. sigavg) 2. Otimização de duas variáveis ​​(adequado para gráficos 3D) por Otimizar (por 2. 5. 50. 1) Nível Otimizar (nível 2. 2. 150. 4) Comprar Cross (CCI (per), - Level) 3. Otimização de variáveis ​​múltiplas (3) Otimização de variáveis ​​(mfast) Optimize (MACD Slow, 26. 17, 30. 1) (Mfast, mslow, sigavg), MACD (mfast, mslow) Sinal (mfast, mslow, sigavg)) Depois de entrar O f Ormula basta clicar no botão Otimizar na janela quotAutomatic Analysisquot. AmiBroker vai começar a testar todas as combinações possíveis de variáveis ​​de otimização e relatar os resultados na lista. Após a otimização é feita a lista de resultados é apresentado classificado pelo lucro líquido. Como você pode classificar os resultados por qualquer coluna na lista de resultados é fácil obter os valores ideais de parâmetros para o menor drawdown, menor número de comércios, maior fator de lucro, menor exposição ao mercado e mais alto risco ajustado retorno anual. As últimas colunas da lista de resultados apresentam os valores das variáveis ​​de otimização para determinado teste. Quando você decidir qual combinação de parâmetros se adequa às suas necessidades, o melhor que você precisa fazer é substituir os valores padrão em otimizar chamadas de função com os valores ideais. No estágio atual você precisa digitá-los manualmente na janela de edição de fórmula (o segundo parâmetro de otimizar a chamada de função). Exibição de gráficos de otimização animados 3D Para exibir o gráfico de otimização 3D, é necessário executar a otimização de duas variáveis ​​primeiro. Duas otimização variável precisa de uma fórmula que tenha 2 chamadas de função Optimize (). Um exemplo de fórmula de otimização de duas variáveis ​​se parece com isto: por Otimizar (por 2. 5. 50. 1) Nível Otimizar (nível 2. 2. 150. 4) Comprar Cross (CCI (per), - Level) Sell Cross (Level, CCI (per)) Depois de inserir a fórmula, você precisa clicar no botão quotOptimizequot. Assim que a otimização estiver concluída, você deve clicar na seta suspensa no botão Otimizar e selecionar Exibir gráfico de otimização 3D. Em poucos segundos, um gráfico colorido de superfície tridimensional aparecerá em uma janela do visualizador de gráfico 3D. Um exemplo de gráfico 3D gerado usando a fórmula acima é mostrado abaixo. Por padrão, os gráficos 3D exibem valores de lucro líquido contra variáveis ​​de otimização. No entanto, é possível traçar um gráfico de superfície 3D para qualquer coluna na tabela de resultados de otimização. Basta clicar no cabeçalho da coluna para classificá-lo (uma seta azul aparecerá indicando que os resultados de otimização são classificados por coluna selecionada) e, em seguida, escolha Exibir gráfico de otimização 3D novamente. Ao visualizar como seus parâmetros de sistemas afetam o desempenho de negociação, você pode decidir mais facilmente quais valores de parâmetro produzem quotfragilequot e quais produzem quotrobustquot desempenho do sistema. Configurações robustas são regiões no gráfico 3D que mostram mudanças graduais e não abruptas no gráfico de superfície. Gráficos de otimização 3D são uma ótima ferramenta para evitar ajuste de curva. Curve-fitting (ou sobre-otimização) ocorre quando o sistema é mais complexo do que ele precisa ser, e toda essa complexidade foi focada em condições de mercado que podem nunca acontecer novamente. Mudanças radicais (ou picos) nos gráficos de otimização 3D mostram claramente áreas de sobre-otimização. Você deve escolher a região do parâmetro que produz um platô largo e largo na carta 3D para sua troca real da vida. Os conjuntos de parâmetros que produzem picos de lucro não funcionarão de forma confiável na negociação real. Controles de visualizador de gráfico 3D AmiBrokers visualizador de gráfico 3D oferece capacidades de visualização total com rotação de gráfico completo e animação. Agora você pode ver os resultados de seu sistema de todas as perspectivas concebíveis. Você pode controlar a posição e outros parâmetros do gráfico usando o mouse, barra de ferramentas e atalhos de teclado, o que você achar mais fácil para você. Abaixo você encontrará a lista. - para girar - mantenha pressionado o botão esquerdo do mouse e movimente-se em direções XY - para aumentar, diminuir o zoom - mantenha pressionado o botão do mouse para a direita e mova-se em direções XY - para mover (traduzir) - mantenha pressionado o botão esquerdo do mouse e a tecla CTRL e Mova em direções XY - para Animar - mantenha pressionado o botão esquerdo do mouse, arraste rapidamente e solte o botão enquanto arrasta o ESPAÇO - anime (auto-gire) TECLA DE SETA ESQUERDA - gire vert. Esquerda SETA PARA A DIREITA - gire vert. Direita SETA PARA CIMA - girar horiz. Up DOWN ARROW KEY - girar horiz. NUMPAD 4 - mover para a esquerda NUMPAD 6 - mover para a direita NUMPAD 8 - mover para cima NUMPAD 2 - mover para baixo PAGE UP - nível da água para cima PAGE DOWN - nível de água abaixo Otimização inteligente (não exaustiva) AmiBroker oferece agora otimização inteligente (não-exaustiva) além da busca regular e exaustiva. A pesquisa não exaustiva é útil se o número de todas as combinações de parâmetros do sistema de negociação determinado for simplesmente demasiado grande para ser viável para uma pesquisa exaustiva. Busca exaustiva é perfeitamente bem desde que seja razoável usá-lo. Vamos dizer que você tem 2 parâmetros cada variando de 1 a 100 (etapa 1). Isso é 10000 combinações - perfeitamente OK para pesquisa exaustiva. Agora, com 3 parâmetros você tem 1 milhão de combinações - ainda é OK para busca exaustiva (mas pode ser lenghty). Com 4 parâmetros você tem 100 milhões de combinações e com 5 parâmetros (1..100) você tem 10 bilhões de combinações. Nesse caso, seria muito demorado para verificar todos eles, e esta é a área onde os métodos não-exaustivos de busca inteligente pode resolver o problema que não é resolvido em tempo razoável usando pesquisa exaustiva. Aqui está absolutamente a instrução SIMPLEST como usar novo otimizador não-exaustivo (neste caso CMA-ES). 1. Abra sua fórmula no Editor de Fórmulas. 2. Adicione esta única linha na parte superior da sua fórmula: OptimizerSetEngine (quotcmaequot) você também pode usar quotspsoquot ou quottribquot aqui 3. (Opcional) Selecione seu alvo de otimização em Automatic Analysis, Settings, quotWalk - Parte anterior, campo Otimização. Se você pular esta etapa otimizará para CARMDD (retorno anual composto dividido pelo drawdown máximo). Agora, se você executar otimização usando esta fórmula, ele usará novo evolucionário (não-exaustiva) CMA-ES otimizador. Como funciona A otimização é o processo de encontrar o mínimo (ou máximo) de determinada função. Qualquer sistema de negociação pode ser considerado como uma função de certo número de argumentos. As entradas são parâmetros e dados de cotação. A saída é o seu alvo de otimização (digamos CARMDD). E você está procurando o máximo de determinada função. Alguns dos algoritmos inteligentes de otimização são baseados na natureza (comportamento animal) - Algoritmo PSO, ou processo biológico - Algoritmos genéticos, e alguns são baseados em conceitos matemáticos derivados por humanos - CMA-ES. Estes algoritmos são utilizados em muitas áreas diferentes, incluindo finanças. Digite quotPSO financequot ou quotCMA-ES financequot no Google e você vai encontrar muitas informações. Métodos não-exaustivos (ou quotsmartquot) encontrarão global ou local otimizado. O objetivo é, naturalmente, encontrar um global, mas se houver um único pico afiado de combinações de parâmetros de zilhões, métodos não-exaustivos podem não conseguir encontrar este único pico, mas tomando forma comerciantes perspecive, encontrando pico único afiado é inútil para Porque esse resultado seria instável (muito frágil) e não replicável na negociação real. No processo de otimização estamos procurando regiões de platô com parâmetros estáveis ​​e esta é a área onde os métodos inteligentes brilham. No que se refere ao algoritmo utilizado pela pesquisa não exaustiva, o resultado é o seguinte: a) o otimizador gera uma população inicial de grupos de parâmetros (geralmente aleatória) b) o backtest é realizado pelo AmiBroker para cada conjunto de parâmetros da população c) os resultados dos backtests são Avaliada de acordo com a lógica do algoritmo e nova população é gerada com base na evolução dos resultados, d) se for encontrado o melhor - salve-o e vá para a etapa b) até que os critérios de parada sejam atendidos Iterações máximas b) parar se o intervalo de melhores valores objetivos das últimas gerações X é zero c) parar se adicionar 0,1 vetor de desvio padrão em qualquer direção do eixo principal não altera o valor do valor objetivo d) outros Para usar qualquer inteligente (não - Exaustivo) no AmiBroker você precisa especificar o mecanismo otimizador que deseja usar na fórmula AFL usando a função OptimizerSetEngine. A função seleciona o mecanismo de otimização externo definido pelo nome. AmiBroker atualmente é fornecido com 3 motores: Standard Particle Swarm Optimizer (quotspsoquot), Tribos (quottribquot) e CMA-ES (quotcmaequot) - os nomes em chaves são para ser usado em chamadas OptimizerSetEngine. Além de selecionar otimizador motor você pode querer definir alguns dos seus parâmetros internos. Para isso, use a função OptimizerSetOption. Função OptimizerSetOption (quotnamequot, value) A função define parâmetros adicionais para o mecanismo de otimização externo. Os parâmetros são dependentes do motor. Os três otimizadores fornecidos com AmiBroker (SPSO, Trib, CMAE) suportam dois parâmetros: quotRunsquot (número de execuções) e quotMaxEvalquot (avaliações máximas (testes) por execução única). O comportamento de cada parâmetro é dependente do motor, de modo que os mesmos valores podem e normalmente produzirão resultados diferentes com diferentes motores usados. A diferença entre Runs e MaxEval é a seguinte. A avaliação (ou teste) é backtest único (ou avaliação do valor da função objetivo). RUN é uma execução completa do algoritmo (encontrar o valor ótimo) - geralmente envolvendo muitos testes (avaliações). Cada execução simplesmente restabelece todo o processo de otimização a partir do novo início (nova população aleatória inicial). Portanto, cada execução pode levar a encontrar diferentes locais maxmin (se não encontrar um global). Portanto, o parâmetro Runs define o número de execuções de algoritmos subseqüentes. MaxEval é o número máximo de avaliações (bactests) em qualquer execução única. Se o problema é relativamente simples e 1000 testes são suficientes para encontrar global max, 5x1000 é mais provável encontrar global máximo porque há menos chances de ser preso no local máximo, como subseqüentes vai começar a partir de diferentes aleatória população inicial Escolhendo valores de parâmetro pode Ser complicado Depende do problema em teste, sua complexidade, etc, etc. Qualquer método não-exaustivo estocástico não lhe dá garantia de encontrar maxmin global, independentemente do número de testes, se for menor do que exaustivo. A resposta mais fácil é. Especifique como grande número de testes como é razoável para você em termos de tempo necessário para concluir. Outro conselho simples é multiplicar por 10 o número de testes com a adição de nova dimensão. Isso pode levar a superestimar o número de testes necessários, mas é bastante seguro. Os motores lançados são projetados para ser simples de usar, portanto, quotreasonablequot defaultautomatic valores são usados ​​para otimização pode ser normalmente executado sem especificar nada (aceitando padrões). É importante entender que todos os métodos de otimização inteligentes funcionam melhor em espaços de parâmetros contínuos e funções objetivas relativamente suaves. Se o espaço de parâmetros é discreto algoritmos evolutivos podem ter dificuldade em encontrar o melhor valor. É especialmente verdadeiro para parâmetros binários (onoff) - eles não são adequados para qualquer método de pesquisa que usa gradiente de mudança de função objetivo (como fazem a maioria dos métodos inteligentes). Se o seu sistema de negociação contém muitos parâmetros binários, você não deve usar otimizador inteligente diretamente neles. Em vez disso, tente otimizar apenas os parâmetros contínuos usando o otimizador inteligente e alterne os parâmetros binários manualmente ou via script externo. SPSO - Standard Particle Swarm Optimizer O Otimizador Padrão de Enxames de Partículas é baseado no código SPSO2007 que é suposto produzir bons resultados desde que sejam fornecidos parâmetros corretos (isto é, Runs, MaxEval) para problemas específicos. Escolher opções corretas para o otimizador PSO pode ser complicado, portanto, os resultados podem variar significativamente de caso para caso. O SPSO. dll vem com códigos-fonte completos dentro da subpasta quotADKquot. Exemplo de código para Padrão Particle Swarm Optimizer: (encontrando otimizado valor em 1000 testes dentro de espaço de pesquisa de 10000 combinações) OptimizerSetEngine (quotspsoquot) OptimizerSetOption (quotRunsquot, 1) OptimizerSetOption (quotMaxEvalquot, 1000) sl Otimizar (quotsquot, 26, 1, 100, 1 ) Otimizar (quotfquot, 12, 1, 100, 1) Comprar Cross (MACD (fa, sl), 0) TRIBES - Adaptive Parâmetro-menos Partículas Swarm Optimizer Tribes é adaptável , Versão sem parâmetros de otimizador PSO (otimização de enxame de partículas) não-exaustiva. Para o fundo científico veja: particleswarm. infoTribes2006Cooren. pdf Na teoria deve executar melhor do que o PSO regular, porque pode ajustar automaticamente os tamanhos do enxame ea estratégia do algoritmo ao problema que está sendo resolvido. A prática mostra que seu desempenho é bastante semelhante ao PSO. O plug-in Tribes. DLL implementa a variante quotTribes-Dquot (ou seja, adimensional). Baseado em clerc. maurice. free. frpsoTribesTRIBES-D. zip por Maurice Clerc. Códigos fonte originais usados ​​com permissão do autor Tribes. DLL vem com código fonte completo (dentro da pasta quotADKquot) Parâmetros suportados: quotMaxEvalquot - número máximo de avaliações (backtests) por execução (padrão 1000). Você deve aumentar o número de avaliações com o número crescente de dimensões (número de parâmetros de otimização). O padrão 1000 é bom para 2 ou máximo 3 dimensões. QuotRunsquot - número de execuções (reinícios). (Padrão 5) Você pode deixar o número de execuções com o valor padrão de 5. Por padrão, o número de execuções (ou reinicializações) é definido como 5. Para usar otimizador Tribes, basta adicionar uma linha ao seu código: OptimizerSetOption (quotMaxEvalquot , 5000) 5000 avaliações max CMA-ES - Covariance Matrix Adaptation Otimizador de Estratégia Evolutiva CMA-ES (Covariance Matrix Adaptação Estratégia Evolutiva) é avançado otimizador não-exaustiva. Para o fundo científico veja: bionik. tu-berlin. deusernikocmaesintro. html De acordo com benchmarks científicos outperforms nove outros, as estratégias evolucionárias as mais populares (como PSO, evolução genética e diferencial). Bionik. tu-berlin. deusernikocec2005.html O plug-in CMAE. DLL implementa quotGlobalquot variante de pesquisa com várias reinicializações com tamanho de população crescente CMAE. DLL vem com código-fonte completo (dentro de pasta quotADKquot) Por padrão, o número de execuções (ou reinicializações) é definido Para 5. É aconselhável deixar o número padrão de reinícios. Você pode variá-lo usando a chamada OptimizerSetOption (quotRunsquot, N), onde N deve estar no intervalo 1..10. Especificar mais de 10 execuções não é recomendado, embora possível. Observe que cada execução usa TWICE o tamanho da população de execução anterior para que ele cresce exponencialmente. Portanto, com 10 corridas você acaba com a população 210 maior (1024 vezes) do que a primeira corrida. Existe outro parâmetro quotMaxEvalquot. O valor padrão é ZERO, o que significa que o plugin irá calcular automaticamente MaxEval. É aconselhável não definir MaxEval por si mesmo como padrão funciona bem. O algoritmo é inteligente o suficiente para minimizar o número de avaliações necessárias e converge muito rápido para ponto de solução, por isso muitas vezes encontra soluções mais rápidas do que outras estratégias. É normal que o plugin ignore algumas etapas de avaliação, se detectar que a solução foi encontrada, portanto, você não deve se surpreender que a barra de progresso de otimização pode se mover muito rápido em alguns pontos. O plugin também tem a capacidade de aumentar o número de etapas acima do valor inicialmente estimado se for necessário para encontrar a solução. Devido à sua natureza adaptativa, o período de tempo restante deixado e ou quotnumber de passos mostrados pelo diálogo de progresso é apenas quotbest adivinhar no timequot e pode variar durante curso de otimização. Para usar otimizador CMA-ES, você só precisa adicionar uma linha ao seu código: Isto irá executar a otimização com as configurações padrão que estão bem para a maioria dos casos. Deve-se notar, como é o caso de muitos algoritmos de busca de espaço contínuo, que a diminuição do parâmetro quotstepquot em chamadas de função Optimize () não afeta significativamente os tempos de otimização. A única coisa que importa é o quotdimension do problema, ou seja, o número de diferentes parâmetros (número de otimizar chamadas de função). O número de quotstepsquot por parâmetro pode ser definido sem afetar o tempo de otimização, então use a melhor resolução que você deseja. Em teoria, o algoritmo deve ser capaz de encontrar solução em no máximo 900 (N3) (N3) backtests onde quotNquot é a dimensão. Na prática, converge um LOT mais rápido. Por exemplo, a solução em 3 (N3) espaço de parâmetro dimensional (digamos 100100100 1 milhão de etapas exaustivas) pode ser encontrada em apenas 500-900 passos CMA-ES. Otimização individual multi-threaded A partir do AmiBroker 5.70 além do multithreading de múltiplos símbolos. Você pode executar a optimização multi-threaded single-symbol. Para acessar essa funcionalidade, clique na seta suspensa ao lado do botão quotOptimizequot na janela Nova análise e selecione quot. QuotIndividual Optimizequot usará todos os núcleos de processador disponíveis para executar a otimização de símbolo único, tornando-a muito mais rápida que a otimização regular. No modo quotCurrent symbolquot, realizará a otimização em um símbolo. Em quotAll symbolsquot e quotFilterquot modos irá processar todos os símbolos sequencialmente, ou seja, primeira otimização completa para o primeiro símbolo, em seguida, a otimização no segundo símbolo, etc Limitações: 1. Backtester personalizado não é suportado (ainda) 2. Smart otimização motores não são suportados - Somente a otimização EXHAUSTIVA funciona. Eventualmente, podemos nos livrar da limitação (1) - quando AmiBroker é alterado para backtester personalizado não usa mais OLE. Mas (2) provavelmente está aqui para ficar por muito tempo.10.2a Escolha de cruzamentos de média móvel Explore as fórmulas de média móvel de recuo recém-adicionadas, na seção 10.5. Aqui estão os períodos médios comuns usados ​​para a média móvel - indicadores de crossover MA: 10 períodos - mais amplamente utilizado para indicadores de tendência seguinte. Se o preço estiver acima dos 10 EMA, a tendência é considerada para cima e para baixo, se abaixo dela. 15 períodos - Uma boa travessia lenta sobre MA ou EMA para uso com o período de 12 EMA para uma tendência após o sistema de comércio. 21 períodos - Alternativa ao período 15 MA ou EMA e indica o status da tendência a médio prazo. 50 períodos - Indicador de tendência a médio prazo. Combinado com um baixo lag média móvel fornece uma boa opção para um sistema de comércio. 200 períodos - Usado por comerciantes de longo prazo para permanecer investido ou sair se preço está acima ou abaixo desta média. Intraday e comerciantes de curto prazo podem combinar vários destes média para construir sistemas de negociação que dão bons resultados aceitáveis ​​em tendências. Use EMAs para a geração de sinal e MAs como a média lenta de linha de base. 10.3 Intervalo de Abertura (ORB) Diferentemente da média móvel de negociação baseada, que está intrinsecamente ligada ao preço ao longo do período de negociação, o método de negociação de intervalo de abertura, utiliza o período inicial do dia para determinar o intervalo de negociação. Originalmente, concebido como um sistema de negociação intraday, não há razão, porque isso não pode ser usado para posicionamento e negociação a longo prazo com regras adaptadas adequadamente. O que é importante é notar suas características importantes: Na versão intraday de negociação de intervalo de abertura, vamos notar o alto ou baixo do dia dizer para os primeiros 5 ou 10 ou 15 ou 20 ou 30 minutos ou 1 hora e tomar o Alta e baixa como os níveis de breakout upside e downside. O período de tempo que você escolher é aquele que você pode chegar por experimentação. Você obterá bons resultados, mesmo se você apenas usar 5,10 ou 15 minutos como seu intervalo quebrar os níveis. O conceito por trás disso é que a faixa de abertura do mercado determina os níveis bullish e bearish para negociar. Acima do nível elevado, o mercado é bullish, e abaixo do nível baixo, seu bearish. Em certo sentido, esta é uma média de mercado para o período de negociação. Para uso em negociação de posição, você poderia usar um intervalo que poderia se estender a tanto quanto 1-2 horas em cartas de hora em hora e mesmo um dia para negociar posicional a longo prazo para calcular o nível da escala. Os negócios longos são iniciados acima do nível elevado, enquanto os negócios curtos são iniciados abaixo do nível baixo deste período. Veja a tabela abaixo, onde fomos capazes de pegar uma tendência bem feita 122 pontos em 3 comércios. 10.4 Especial ORB - Usando um único nível No método ORB descrito em 8.3 acima, você pode pensar que você perde parte dos lucros de negociação com base na volatilidade que determina seus níveis de abertura breakout intervalo. Bem, há uma resposta simples para isso. Mudar para um único nível que pode ser um dos seguintes: simplesmente tomando a média do alto e baixo do período selecionado, você pode trabalhar com um único nível onde o longo está acima do nível médio e curto está abaixo do nível médio . Isto é como uma média do mercado para fins de negociação. Nível único ORB 1 (HighLow) 2 dos primeiros n minutos. N5,10,15,20,30 minutos ou 1 hora com base na sua escolha ou contínua ao longo do dia. Leia isto com os outros comentários dados lá a respeito de estender o conceito para o comércio posicional, onde sua média do mais alto e mais baixo poderia ser por 1-2 horas ou mesmo um dia e talvez uma semana no caso de uns períodos mais longos. Esteja preparado para varrer whipsaws em torno do nível ORB quando o mercado não está tendo direção. Veja as tabelas abaixo: E veja os whipsaws que podem ocorrer. Estes podem ser evitados por várias técnicas de cancelamento de ruído, que discutiremos mais tarde. Se você tiver alguma sugestão ou contribuição, por favor, escreva para mim em abnash1978yahoo. co. uk ou postar seus comentários no fórum 10.5 Mais média móvel de mudança e remoção de ruído As médias móveis tradicionais simples e exponenciais fornecem sinais de negociação que não são tão sensíveis como comerciantes Gostaria, levando a uma parte significativa do comércio ficando mais ao usar essas médias. Naturalmente, quando há uma tendência longa no progresso, todos os sistemas negociando baseados da média movente funcionarão bem. Há um monte de informações sobre o menor lag média móvel, e que é facilmente disponível no domínio público é o Hull média móvel. Eu li sobre Jurik também, mas não tenho certeza se as fórmulas corretas estão disponíveis. Postado abaixo é uma AFL que fornece uma média móvel de baixa lag que foi combinada com uma média móvel de 50 períodos padrão para mostrar como ele pode gerar sinais de compra e venda. E abaixo disso é outra AFL que permite traçar diferentes tipos de médias móveis que podem se tornar parte de seu arsenal de negociação. Ambos são de fontes públicas na internet. Você pode facilmente fazer um sistema de comércio, quer usando como mostrado abaixo com um cruzamento 50MA ou dois outros períodos dizem, 10 e 15 periods. AR SISTEMA DE NEGOCIAÇÃO AFL LIVRE faço este AFL AR sistema de negociação AFL LIVRE i fazer este AFL LIVRE FREEFREE FREE LIVRE LIVRE LIVRO LIVRE LIVRO LIVRE LIVRO LIVRE LIVRE LIVRE LIVRE LIVRE LIVRE LIVRA LIVRE LIVRE LIVRA LIVRE LIVRA LIVRE LIVRA LIVRE LIVRA LIVRE LIVRA LIVRE LIVRE LIVRA DO BRASIL LIVRE DO AR LIVRE DO ÁS GfxSelectFont (quottohomaboldquot, Status (quotpxheightquot)) 16) GfxSetTextAlign (C, nol)) 100 Graph0sk Graph0BarColorIIf (skgt0,5,4) SEÇÃOBEGIN (quotemaquot) Lk EMA (Close, 22) Plot (lk, quot quot, colorBrightGreen, 6) GfxSetTextColor (ColorRGB (10,250,250)) GfxSetBkMode (0) GfxTextOut (Nome (), Status (quotpxwidthquot) 2, Status (quotpxheightquot) 10) cxParam (quotcxposnquot, 1085,0,1200,1) cyParam (quotcyposnquot, , 1000,1) Gfx SetBkColor (ColorRGB (200,50,100)) GfxSelectFont (quottohomaboldquot, 20,98, Falso) GfxSetTextColor (colorYellow) GfxSetTextColor (ColorHSB (100, 10, 400)) GfxTextOut (quotLTP. (QuotCdot, inDaily) gf TimeFrameGetPrice (quotCquot, inDaily, -1) fechar Título EncodeColor (colorWhite) quot AR ARQUIVO SYSTEM quotEncodeColor (quotQuad, inDaily) DHIDay TimeFrameGetPrice (quotHquot, inDaily) ColorRGB (220,10,150)) quot quot Quota de Intervalo (2) Date () EncodeColor (ColorRGB (200, 150, 120)) quot n Open quot O, High. Quot H quot, Low. Quot L EncodeColor (colorGreen) quot Prevvious Day Close. Quot EncodeColor (colorGreen) gfr EncodeColor (colorYellow) quotn ToDay Open. Quot DDayO quot High. Quot DHiDay quot Low. (CCI (8) gt 5, colorBrightGreen, IIf (CCI (8) lt-5, colorRed, IIf (CCI (8) gt Ref (CCI (8), - 1), colorBrightGreen, colorDarkRed ) HaClose EMA ((OHLLC) 5,3) HaOpen AMA (Ref (HaClose, -1), 0,5) HaHigh Max (H, Max (HaClose, HaOpen) Parâmetro (Parâmetro QuotOutor ColorQuot, ColorBlack) ParâmetroColor de INUPcolor (quotInner Painel Superior, colorGrey40) Parâmetro de Parâmetro (Parâmetro QuotInner (Cores de Inferência, Inferior, Inferior, Inferior, Inferior, Inferior, Inferior, Inferior, Inferior, Inferior, Inferior) 0) GraphXSpace 15 ea EMA (C, 10) eb EMA (C, 20) SetBarFillColor (IIf (ea gt eb, colorGreen, colorRed)) Comprar e A gt eb AND TimeNum () gt 092000 E TimeNum () lt 150000 Venda eb gt ou OR TimeNum () gt 150000 Curto 0 Capa 0 Comprar ExRem (Compra, Venda) ExRem Curto (Capa Curta) (HL) 2 (FactorATR (Pd)) Dn (HL) 2- (FactorATR (Tabela 2) FactorParam (quotFactorquot, 4,1,10,1) PdParam (quotATR Períodos, 10,1,100,1) Pd)) iTrATR (Pd) TrendUpTrendDownNull trend01 changeOfTrend0 flagflagh0 para (i 1 i ltBarCount i) TrendUpi Nulo TrendDowni Nulo se (CloseigtUpi-1) trendi1 se (trendi-1 -1) changeOfTrend 1 else if (CloseiltDni-1) trendi-1 If (trendi-1) changeOfTrend 1 else if (trendi-11) trendi1 changeOfTrend 0 else if (trendi-1-1) trendi-1 changeOfTrend 0 Comprar trend1 Selltrend-1 BuyExRem (Compra, Venda) SellExRem ShortSell CoverBuy BuyPriceValueWhen (Comprar, C) SellPriceValueQuando (Venda, C) ShortPriceValueQuando (Curto, C) CoverPriceValueQuando (Cover, C) PlotShapes (IIf (Buy, shapeSquare, shapeNone), colorGreen, (Buy, shapeSquare, shapeNone), colorLime, 0, L, Offset-45) PlotShapes (IIf (Curto, shapeSquare, shapeNone), colorRed, 0, H, Offset40) PlotShapes (IIf (Buy, shapeUpArrow, shapeNone), colorWhite, IIf (Curto, shapeSquare, shapeNone), colorOrange, 0, H, Offset50) PlotShapes (IIf (Curto, shapeDownArrow, shapeNone), colorWhite, 0, H, Offset-45) para (iBarCount-1igt1i--) if (Buyi 1 ) Entrada Ci sig quotBUYquot sl TrendSLi entrada tar1 (entrada .0050) tar2 entrada (entrada .0092) tar3 entrada (entrada .0179) barras ii 0 se (Selli 1) sig quotSELLquot entrada Ci sl TrendSLi tar1 entrada - (entrada .0050) Tar2 entrada - (entrada .0112) tar3 entrada - (entrada .0212) barras ii 0 Desvio 20 Clr IIf (sig quotBUYquot, colorLime, colorRed) ssl IIf (barras BarCount-1, TrendSLBarCount-1, Ref (TrendSL, -1) ) Sl Traço de sslBarCount-1 (LineArray (barras-Offset, tar1, BarCount, tar1,1), quotquot, Clr, estiloLinestyleDots, Nulo, Nulo, Offset) Plot (LineArray (barras-Offset, tar2, BarCount, tar2,1) , Quotquot, Clr, styleLinestyleDots, Nulo, Nulo, Offset) Plot (LineArray (barras-deslocamento, tar3, BarCount, tar3,1), quotquot, Clr, styleLinestyleDots, Null, Null, Offset) Plot (LineArray (barras-Offset, sl, BarCount, sl, 1), quotquot, colorDarkRed, (LineArray (barras-Offset, entrada, BarCount, entrada, 1), quotquot, colorGreen, styleLinestyleLine, Null, Null, Offset) para (ibars i ltBarCounti) PlotText (quotquotsigquotquotentry, BarCount1, entry, Null, colorBlue) PlotText(quotT1quottar1,BarCount3,tar1,Null, Clr)Plot Text(quotT2quottar2,BarCount3,tar2,Null, Clr)PlotText (quotT3quottar3,BarCount3,tar3,Null, Clr) messageboard ParamToggle(quotMessage Boardquot, quotShowHidequot, 1) if (messageboard 1 ) GfxSelectFont( quotTahomaquot, 13, 100 ) GfxSetBkMode( 1 ) GfxSetTextColor( colorWhite ) if ( sig quotBUYquot) GfxSelectSolidBrush( colorGreen ) this is the box background color else GfxSelectSolidBrush( colorRed ) this is the box background color pxHeight Status( quotpxchartheightquot ) xx Status( quotpxchartwidthquot) Lef t 1100 width 310 x 5 x2 290 GfxSelectPen( colorWhite, 4) broader color GfxRoundRect( x, y - 165, x2, y. 160, 90 ) GfxTextOut( ( quot AR TRADING SYSTEM quot),141,y-160) GfxTextOut( (quot quot),130,y-160) GfxTextOut( (quotLast quot sig quot Signal came quot (BarCount-bars-1) Interval()60 quot mins agoquot), 148, y-140) The text format location GfxTextOut( (quotquot WriteIf(sig quotBUYquot, sig quot quot, sig quot quot) quot. quot entry), 130, y-120) GfxTextOut( (quotSTOP LOSS. quot sl quot (quot WriteVal(IIf(sig quotSELLquot, entry-sl, sl-entry), 2.2) quot)quot), 130, y-100) GfxTextOut( (quotTGT:1. quot tar1), 130, y -80) GfxTextOut( (quotTGT:2. quot tar2), 130,y-60) GfxTextOut( (quotTGT:3. quot tar3), 130,y-40) GfxTextOut( (quotCurrent PL . quot WriteVal(IIf(sig quotBUYquot,(C-entry),(entry-C)),2.2)), 130, y-22) Buy ExRem(Buy, Sell) Sell ExRem(Sell, Buy) shape Buy shapeUpArrow Sell shapeDownArrow PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorGreen, 0, L, Offset-40) PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorLime, 0,L, Offset-50) PlotShapes(IIf(Buy, sha peUpArrow, shapeNone),colorWhite, 0,L, Offset-45) PlotShapes(IIf(Sell, shapeSquare, shapeNone),colorRed, 0, H, Offset40) PlotShapes(IIf(Sell, shapeSquare, shapeNone),colorOrange, 0,H, Offset50) PlotShapes(IIf(Sell, shapeDownArrow, shapeNone),colorWhite, 0,H, Offset-45) PlotShapes( shape, IIf( Buy, colorGreen, colorRed ),0, IIf( Buy, Low, High ) ) dist 2.5ATR(5) for( i 0 i lt BarCount i ) if( Buyi ) PlotText( quotBuynquot Closei, i, Lowi - disti, colorWhite ) if( Selli ) PlotText( quotsellnquot Closei, i, Lowi disti, colorWhite ) SECTIONBEGIN(quotemaquot) P ParamField(quotFieldquot) Type ParamList(quotTypequot, quotWeighted, Simple, Exponential, Double Exponential, Tripple Exponential, Wildersquot) Periods89 Param(quotPeriods180quot, 180, 2, 300 ) Displacement2 Param(quotDisplacement2quot, 2, -50, 50 ) Plot( EMA( P, Periods89 ), DEFAULTNAME(), colorWhite, styleDots, 0, 0, Displacement2 ) SECTIONEND() rjlCross(Lk, tar1) golCross(tar1,Lk ) PlotShapes(shapeHollowStarrjl, colorAqua,0,H,- 20) PlotShapes(shapeHollowStargol, colorViolet,0,L,20) SECTIONEND() for( i 0 i lt BarCount i ) if( bvei ) PlotText( quotABnquot. i, L i - disti, colorWhite, colorDarkBlue ) if( rfwi ) PlotText( quotASnquot. i, H i disti, colorWhite, colorRed ) SECTIONBEGIN(quotdayquot) TimeFrameSet( inDaily ) switch now to dayily TimeFrameRestore() restore time frame to original Plot( TimeFrameExpand( Oo, inDaily),quotquot, colorYellow,10304 styleNoLabel) cx Param(quotcxposnquot,476,0,1200,1) cy Param(quotcyposnquot, 500,0,1000,10 ) GfxSelectFont( quot Arial quot, 14, 98, False ) GfxSetTextColor(ColorRGB(10,250,250)) GfxTextOut(quotVolume. quot Volume quotquot, cx 20,cy 50) SECTIONBEGIN(quottomquot) function GetSecondNum() Time Now( 4) Seconds int( Time 100 ) Minutes int( Time 100 100 ) Hours int( Time 10000 100 ) SecondNum int( Hours 60 60 Minutes 60 Seconds ) return SecondNum RequestTimedRefresh( 1 ) TimeFrame Interval() SecNumber GetSecondNum() Newperiod SecNumber TimeFrame 0 SecsLeft SecNumber - int( SecNumber TimeFrame ) TimeFrame SecsToGo TimeFrame - SecsLeft xParam(quotxposnquot,99,0,1000,1) yP aram(quotyposnquot,40,0,1000,1) GfxRoundRect( x615, y530, x738, y499, 0,0 ) GfxSelectSolidBrush( ColorRGB( 230, 230, 230 ) ) GfxSelectPen( ColorRGB( 203, 25, 23 ), 3 ) if ( NewPeriod ) GfxSelectSolidBrush( colorYellow ) GfxSelectPen( colorYellow, 2 ) Say( quotNew periodquot ) GfxSetBkMode(1) GfxSelectFont( quotArialquot, 13, 800, False ) GfxSetTextColor(ColorRGB(220,10,150) ) GfxTextOut( quotTimeleftquotquot. quotNumToStr( SecsToGo, 1.0 ), x674, y507 ) GfxSetTextColor(ColorRGB(10,250,250)) GfxTextOut( ( quot Develop By quot),1150,y-45) GfxSetTextColor(ColorRGB(10,250,250)) GfxTextOut( ( quotAR Trading SYSTEM quot),1150,y-25) SECTIONBEGIN(quotRibbonquot) uptrendPDI()gtMDI()AND Signal()ltMACD() downtrendMDI()gtPDI()AND Signal()gtMACD() Plot( 1, efines the height of the ribbon in percent of pane width quotribbonquot, IIf( uptrend, colorLime, IIf( downtrend, colorRed, IIf(Signal()ltMACD(), colorLightGrey, colorLightGrey ))), choose color styleOwnScalestyleAreastyleNoLabel, -.05,50 ) SECTIONEND() Last edited by skumar4545 3rd January 2014 at 11:22 AM. Reason: add img

No comments:

Post a Comment