Wednesday 7 March 2018

5 sistema de negociação 20


DOIS MOVIMENTAÇÃO MÉDIA.


Embora os sistemas de média simples e dupla em movimento sejam comuns, eles são mencionados principalmente como sistemas de reversão que estão no mercado 100% do tempo. Sabemos que o mercado não se encaixa em 100% do tempo, de modo que o exemplo do sistema de cruzamento médio duplo em movimento é configurado para desencadear uma entrada, mas nem sempre está no mercado. A versão do sistema de reversão é mencionada e testada como a média móvel dupla no Guia do Caminhada do Turtle e Traders Técnicos para Análise de Computadores do Mercado de Futuros. O sistema de cruzamento de média dupla em movimento é uma versão simplificada do sistema Donchian 5 e 20 que é mencionado e testado no Guia Dow Jones-Irwin para Sistemas de Negociação, no entanto, vimos outras versões do sistema Donchian 5/20 com regras de entrada adicionais além do simples cruzamento de MA sozinho. LeBeau e Lucas dizem que o Donchian 5/20 "não é um simples sistema de reversão, mas usa um conjunto elaborado de filtros".


A entrada básica do sistema de média dupla móvel é quando a linha média móvel mais rápida do cronograma cruza a linha média móvel mais lenta do período. Para as médias móveis do Donchian de 5 dias e 20 dias, uma posição longa ocorre quando a média móvel de 5 dias cruza acima da média móvel de 20 dias. Uma posição curta ocorre quando a média móvel de 5 dias cruza abaixo da média móvel de 20 dias. Você pode optar por pegar a entrada assim que as linhas cruzarem ou aguardar até o preço fechar no lado da cruz.


TAMANHO DE POSIÇÃO.


O dimensionamento de posição e a parada são as maiores mudanças na versão de reversão. Usaremos uma parada e calcularemos o tamanho da posição usando o método da percentagem de volatilidade, que é um risco definido, se for interrompido. Para o nosso exemplo, temos uma parada ATR * 1.5 de 14 dias que arrisca 2% de equivalência patrimonial por posição. Se uma entrada longa em US $ 10 tiver uma parada em US $ 8,5, US $ 1,5 seria em risco para cada ação, se fosse uma compra de ações. Se o tamanho da conta é de US $ 10.000 e o risco por posição é de 2%, seu risco seria de US $ 200. Os US $ 200 (US $ 10.000 * 2%) divididos por US $ 1,50 (do valor ATR se a parada for atingida) seria uma posição de 133 ações. Calcule o tamanho da posição tomando seu risco e dividindo-o pelo valor do movimento até a parada.


Juntamente com o cálculo do tamanho da posição, usaremos um múltiplo do ATR como a parada. Um exemplo é usar um ATR de 14 dias multiplicado por 1.5 e nós adicionaremos números para ele. Se você tiver um estoque que você inseriu em US $ 10 e o ATR de 14 dias é $ 1, você seria impedido de uma posição longa em US $ 8,50. Uma posição curta seria interrompida em US $ 11,50.


As versões de reversão aguardam até que as linhas de média móvel atravessem o outro lado, mas, dependendo dos seus prazos, você pode ter atrasos significativos que devolvem grande parte do lucro da tendência. Uma saída mais apertada, como o preço que atinge uma SAR Parabólica, uma ruptura de um canal de preço ou a interrupção de outra linha média móvel pode ser uma alternativa melhor para o seu sistema.


VARIAÇÕES.


Para evitar alguns whipsaws quando o mercado está tendendo de lado, você pode adicionar filtragem adicional, como ADX, Stochastics ou RSI. Se você estiver usando prazos mais lentos, as médias móveis irão atrasar a ação de preço, de modo que um filtro adicional para compensar pode ser um novo preço alto antes de uma posição longa ou um novo preço baixo antes de uma posição curta.


MAIS DETALHES.


Uma busca na Internet irá encontrar muitas páginas relacionadas a este sistema. Você também pode encontrá-lo nos três livros mencionados acima com os resultados dos testes e compará-lo com outros sistemas. Way of the Turtle usa-o como um sistema de longo prazo com 100 dias e 350 linhas de dia. Guia de comerciantes técnicos para análise de informática do mercado de futuros e The Dow Jones-Irwin Guide To Trading Systems usá-lo com as linhas de 5 dias e 20 dias.


Compre o código completo para este sistema no TFmt4 para automatizar e testar este sistema Dual Moving Average usando o MetaTrader 4.


Compre o código completo deste sistema no TFmt5 para automatizar e testar este sistema Dual Moving Average usando o MetaTrader 5.


VOCE ASSUME TODOS OS RISCOS ASSOCIADOS COM DECISÕES DE INVESTIMENTO FEITAS NA BASE DE INFORMAÇÕES CONTIDAS NESTE SITE. A NEGOCIAÇÃO É ESPECIAL NA NATUREZA E NÃO É APROPRIADA PARA TODOS OS INVESTIDORES. Os INVESTIDORES NÃO DEVEM UTILIZAR O CAPITAL DE RISCOS QUE ESTÃO PREPARADOS PARA PERDER, COMO SEMPRE EXISTE O RISCO DE PERDA SUBSTANCIAL. Os INVESTIDORES DEVEM EXAMINAR TOTALMENTE A SITUAÇÃO FINANCEIRA PESSOAL ANTES DE TRADING. OS SISTEMAS NESTE SITE são exemplos de educação e não são recomendações para comprar ou vender. O DESEMPENHO PASSADO NÃO GARANTE OS RESULTADOS FUTUROS.


Donchian Breakout Trading System.


O sistema de comércio Donchian Breakout (regras e explicações abaixo) é um sistema de tendência clássico. Como tal, nós o incluímos no nosso Relatório de Tendência do Estado, que visa estabelecer uma referência para rastrear o desempenho genérico das tendências seguindo como estratégia de negociação.


The Wisdom State of Trend A seguir, informa-se o desempenho de um índice composto composto por sistemas de tendências clássicas (Donchian Breakout e outros) simulados em vários prazos e uma carteira de futuros, selecionados da gama de mais de 300 mercados de futuros em mais de 30 bolsas que O Wisdom Trading pode fornecer aos clientes acesso. O portfólio é global, diversificado e equilibrado nos principais setores.


Publicamos as atualizações do relatório todos os meses, incluindo a do sistema de comércio Donchian Breakout.


Explicado o sistema Donchian Breakout System.


O Donchian Breakout Trading System é baseado no sistema Turtle. Ele usa a lógica Turtle, exceto que é uma única unidade, não usa a última regra do Trade Are Winner, não usa correlações e usa um Gerenciador de Portfólio MACD para filtrar negócios.


O Sistema Donchian se dedica a descobertos similares a um sistema Donchian Dual Channel. Existem duas figuras de fuga, uma fuga mais longa para a entrada e uma fuga mais curta para a saída.


O sistema Donchian usa uma parada com base no alcance real médio (ATR). Observe que o conceito Turtle de N foi substituído pelo termo mais comum e equivalente Average True Range (ATR).


Um comércio é inserido quando o preço atinge o alto ou o mínimo dos X-dias anteriores. Por exemplo, Entry Breakout = 20 significa que uma posição longa é tomada se o preço atingir a alta de 20 dias; Uma posição curta é tomada se o preço atingir a baixa de 20 dias.


Se definido como zero, este parâmetro não tem efeito. Se o Deslocamento de Entrada em ATR estiver definido para 1.0, uma posição longa não será introduzida até que o preço atinja o preço de breakout normal, mais 1,0 ATR. Da mesma forma, uma posição curta ganhou & # 8217; t ser inserido até que o preço atinja o preço de breakout normal, menos 1,0 ATR. Pode ser especificado um valor positivo ou negativo para este parâmetro. Um valor positivo efetivamente atrasa a entrada até o ponto especificado após o limite de fuga escolhido; um valor negativo entraria antes do limite de fuga escolhido.


Este parâmetro define a distância do preço de entrada para a parada inicial, em termos de ATR. Este sistema, por padrão, usa o preço de entrada da ordem, não o preço de preenchimento, como base do preço de parada. Uma vez que a ATR é uma medida da volatilidade diária e as paradas do Sistema Turtle são baseadas em ATR, isso significa que o Sistema Donchian iguala o tamanho da posição em vários mercados com base na volatilidade.


De acordo com as regras originais da tartaruga, as posições longas foram interrompidas se o preço caiu 2 ATR do preço de entrada. Por outro lado, as posições curtas foram interrompidas se o preço aumentasse 2 ATR do preço de entrada.


Ao contrário da parada baseada em Exit Breakout, que se move para cima ou para baixo com o X-day high ou low, a parada definida por Stop in ATR é uma & # 8220; hard & # 8221; pare que seja corrigido acima ou abaixo do preço de entrada na entrada. Uma vez definido, não varia ao longo do comércio.


Observe que as negociações são liquidadas quando o preço atinge o Exit Breakout, Entry Breakout para a direção oposta ou o Stop in ATR, o que for mais próximo do preço no momento.


As negociações em progresso são encerradas quando o preço atinge o alto ou o mínimo dos X-dias anteriores. Esse conceito é idêntico ao Entry Breakout, mas a lógica é revertida: os negócios longos são encerrados quando o preço atinge o X-day low e os negócios curtos são encerrados quando o preço atinge o X-day low. O Exit Breakout move-se para cima (ou para baixo) com preço. Ele protege contra excursões de preços adversas, e também serve como uma parada final que atua para bloquear um lucro quando a tendência inverte.


Observe que as negociações são liquidadas quando o preço atinge o Exit Breakout, Entry Breakout para a direção oposta ou o Stop in ATR, o que for mais próximo do preço no momento.


Essas opções podem ser ativadas ou desabilitadas com os parâmetros Hold Initial Stops e Use Reversal Exit. Se a parada inicial for realizada, então o preço inicial da parada será usado para sair durante o comércio. Se estiver usando a saída de reversão, o comércio será encerrado se o preço atingir a saída da entrada na direção oposta.


Se definido como zero, este parâmetro não tem efeito. Se Exit Offset em ATR estiver configurado para 1.0, uma posição longa não será encerrada até que o preço atinja o preço de breakout normal, menos 1.0 ATR. Da mesma forma, uma posição curta ganhou-se sair até que o preço atinja o preço de breakout normal, mais 1,0 ATR. Pode ser especificado um valor positivo ou negativo para este parâmetro. Um valor positivo efetivamente atrasa a saída até o ponto especificado após o limite de fuga escolhido; um valor negativo saía antes do limite de fuga escolhido.


Definiu o número de dias para o cálculo do ATR. Esta é uma média móvel exponencial do True Range. 39 representa um Wilder ATR de 20 dias.


Este é o número de dias para a parcela média móvel longa do indicador MACD.


Este é o número de dias para a parcela média curta do indicador MACD.


O próprio MACD é a Média de Movimento Curta menos a Média de Movimento Longo. O sistema permitirá negociações Longas quando o MACD for maior que zero e permitir negociações curtas quando o MACD for menor que zero.


Este sistema usa o Gerenciador de dinheiro fracionado fixo.


Sua versão personalizada desse sistema.


Podemos fornecer uma versão personalizada deste sistema para atender aos seus objetivos de negociação. Seleção / diversificação de portfólio, prazo, capital inicial & # 8230; Nós podemos ajustar e testar qualquer parâmetro para suas necessidades.


Entre em contato conosco para discutir e / ou solicitar um relatório de simulação personalizado completo.


Sistemas alternativos.


Além dos sistemas de negociação pública, oferecemos aos nossos clientes vários sistemas de negociação proprietários, com estratégias que vão desde a tendência a longo prazo até a reversão média de curto prazo. Nós também fornecemos serviços de execução completa para uma solução de negociação de estratégia totalmente automatizada.


Por favor, clique na imagem abaixo para ver nosso desempenho nos sistemas de negociação.


Divulgação de risco exigida pela CFTC para resultados hipotéticos.


Os resultados de desempenho hipotéticos têm muitas limitações inerentes, algumas das quais estão descritas abaixo. Nenhuma representação está sendo feita que qualquer conta será ou provavelmente conseguirá lucros ou perdas semelhantes às exibidas. na verdade, há freqüentemente diferenças acentuadas entre resultados de desempenho hipotéticos e os resultados reais posteriormente alcançados por qualquer programa comercial específico.


Uma das limitações dos resultados de desempenho hipotéticos é que eles geralmente são preparados com o benefício de retrospectiva. Além disso, a negociação hipotética não envolve risco financeiro, e nenhum registro de negociação hipotético pode explicar completamente o impacto do risco financeiro na negociação real. Por exemplo, a capacidade de suportar perdas ou de aderir a um determinado programa de negociação, apesar das perdas comerciais, são pontos importantes que também podem prejudicar os resultados comerciais reais. Existem inúmeros outros fatores relacionados aos mercados em geral ou à implementação de qualquer programa de negociação específico que não possa ser totalmente contabilizado na elaboração de resultados de desempenho hipotéticos e todos os quais podem prejudicar os resultados comerciais reais.


O Wisdom Trading é um corretor de introdução registado no NFA.


Oferecemos serviços globais de corretagem de commodities, consultoria de futuros gerenciados, serviços de negociação de acesso direto e serviços de execução de sistemas comerciais para indivíduos, empresas e profissionais da indústria.


Como um corretor de introdução independente, mantemos relações de compensação com vários comerciantes principais da Comissão de Futuros em todo o mundo. Vários relacionamentos de compensação nos permitem oferecer aos nossos clientes uma ampla gama de serviços e excepcionalmente ampla gama de mercados.


Nossos relacionamentos de compensação oferecem aos clientes acesso 24 horas ao mercado de futuros, commodities e câmbio em todo o mundo.


O comércio de futuros envolve um risco substancial de perda e não é adequado para todos os investidores. O desempenho passado não é indicativo de resultados futuros.


As médias móveis de 5 e 20 dias de Donchian.


Richard Donchian é conhecido como o pai da tendência seguinte. Sua tendência original seguindo as idéias é a base para todos os sucessos de tendências que seguiram. Abaixo em um trecho de um artigo escrito em 1995 sobre seu sistema de média móvel de 5 e 20 dias:


Título: As médias móveis de cinco e 20 dias de Donchian.


Autor: Richard Donchian.


Publicação: Futures (Cedar Falls, Iowa) (Revista / Revista)


Data: 15 de novembro de 1995.


Editora: Oster Communications, Inc.


Volume: v24 Problema: n13 Página: p32: ISSN: 0746-2468.


Em Wall Street existem dois dicionários conflitantes:


1. & # 8220; Você nunca vai ficar com sucesso ganhando. & # 8221;


2. & # 8220; Corte suas perdas baixas e deixe seus lucros andar. & # 8221;


A experiência mostrou que na negociação de commodities, a primeira dessas & # 8220; saias antigas & # 8221; é perigoso e enganador, enquanto o segundo pode ser considerado como a única lição que o comerciante de commodities inexperiente deve aprender se ele deseja ter uma chance melhor do que o mesmo de sair.


Todo método de negociação de futuros (ou ações) baseado em tendências e tendências é o princípio básico de que uma tendência em qualquer direção, uma vez estabelecida, tem uma forte tendência a persistir, pelo menos por um tempo. Entre as muitas abordagens que seguem as tendências agora em uso, estão a Dow Theory, técnicas de gráfico de ponto e figura, métodos de balanço (que não a Dow Theory), métodos de linha de tendência, métodos de regras semanais e métodos de média móvel. Nós nos focaremos em métodos de média móvel e, em particular, o método de média móvel de cinco e 20 dias comparativamente simples.


As regras para o método de média móvel de cinco e 20 dias são divididas em duas categorias: geral e complementar.


1. A extensão da penetração da média móvel é dividida em unidades, dependendo do nível de preços. Para as commodities que vendem mais de 400 (trigo, soja, prata), por exemplo, é necessária uma penetração de 40 centavos (Donchian teve seis classes de preço nos dias antes das taxas de juros e dos futuros do índice de ações). 2. Nenhuma penetração de fechamento das médias móveis conta como uma penetração, a menos que represente pelo menos uma unidade completa (39 centavos na Regra 1 não foi suficiente para a penetração e foi preciso que 40 centavos para contar). Regra básica A: Ato em todos os fechamentos que atravessam a média móvel de 20 dias por um valor que excede em uma unidade completa a penetração máxima na mesma direção em qualquer dia em uma ocasião anterior (não importa quanto tempo atrás) quando o fechamento foi do mesmo lado da média móvel. Por exemplo, se a última vez que o preço de fechamento do algodão estava acima da média móvel permaneceu acima de um ou mais dias, e o valor máximo acima em qualquer um dos dias foi de 64 pontos, então quando o preço de fechamento do algodão se move acima a média móvel, depois de ter sido menor no ínterim, um sinal de compra é dado somente se fechar acima da média em mais de 64 pontos (a unidade em algodão é 0,10). Este princípio & # 8211; o requisito de que uma penetração da média móvel exceda uma ou mais penetrações anteriores & # 8211; é uma característica do método de cinco e 20 dias que o distingue de outros métodos de média móvel. Regra Básica B: Ato em todos os fechamentos que atravessam a média móvel de 20 dias e feche uma unidade completa além (acima ou abaixo, na direção do cruzamento), os 25 diários anteriores fecham. Regra básica C: dentro dos primeiros 20 dias após o primeiro dia de uma travessia que leva a um sinal de ação, reverta em qualquer fechamento que cruza a média móvel de 20 dias e fecha uma unidade completa além (acima ou abaixo) dos 15 diários anteriores fecha. Regra básica D: As regras de média móvel sensíveis de cinco dias para o fechamento de posições e para a restauração de posições na direção da tendência básica básica média de 20 dias são: 1. Feche as posições quando a mercadoria fechar abaixo da média móvel de cinco dias para posições longas ou acima da média móvel de cinco dias para posições curtas em pelo menos uma unidade completa superior ao maior de a) a penetração anterior no mesmo lado da média móvel de cinco dias, ou b) o ponto máximo de qualquer anterior penetração dentro das 25 sessões de negociação anteriores. Se a distância entre o preço de fechamento e a média móvel de 20 dias na direção oposta ao sinal de fechamento da Regra D foi maior nos 15 dias anteriores à distância da média móvel de 20 dias em qualquer direção dentro de 60 anteriores sessões, não atuem nos sinais de fechamento da Regra D, a menos que a penetração da média de cinco dias também exceda em uma unidade a distância máxima acima e abaixo da média de cinco dias nas 25 sessões anteriores. 2. Depois que as posições foram fechadas pela Regra D, reinteie as posições na direção da tendência básica a) quando as condições na Regra D, o ponto 1 acima estiverem preenchidas, b) se um novo sinal de tendência básico da Regra A for dado, ou c ) se os novos sinais da Regra B ou da Regra C indicarem a direção da tendência básica forem obtidos ao fechar-se em novo terreno alto novo ou novo. 3. As penetrações de duas unidades ou menos não contam como pontos a serem excedidos pela Regra D, a menos que pelo menos duas fechaduras consecutivas fiquem no lado da penetração quando o ponto a ser excedido foi configurado.


Regras Gerais Complementares.


1. A ação em todos os sinais é adiada por um dia, exceto em quinta e sexta-feira. Por exemplo, se um sinal de compra básico for dado ao trigo no fechamento na terça-feira, a ação é tomada na abertura na manhã de quinta-feira. O mesmo atraso de um dia aplica-se ao cancelamento da Regra D e restabelece os sinais. 2. Para os sinais dados no fechamento na sexta-feira, as ações são tomadas na abertura na segunda-feira. 3. Para os sinais dados no fechamento na quinta-feira (ou no próximo dia de negociação da semana), as ações são tomadas no fechamento de sexta-feira (ou fim de semana). 4. Quando há um feriado no meio da semana ou um fim de semana prolongado, os sinais fornecidos no final das sessões antes do feriado são tratados da seguinte forma: a) para sinais de venda, use regras de fim de semana; e b) para comprar sinais, adiar a ação por um dia, como é feito em sessões regulares de negociação consecutivas.


O método de média móvel de cinco e 20 dias, e a maioria dos outros métodos de tendência, para esse assunto, não são bons a seguir, a menos que você esteja preparado para incluir em seu programa um número suficiente de futuros para fornecer ampla diversificação. Os riscos são aumentados para um grau excessivo se você tentar seguir o método em um ou apenas alguns contratos selecionados.


As commodities que estão em uma tendência pronunciada e não estão dando, novos sinais são freqüentemente aqueles em que os melhores resultados são alcançados. Portanto, ao iniciar um novo programa, talvez seja aconselhável não aguardar novos sinais, mas assumir posições na direção das tendências predominantes naqueles que não dão novos conselhos de ativação. Como os mercados estão se movendo de forma tão selvagem, no entanto, pode ser melhor para a) ir na direção da tendência somente após um ou mais dias de movimento de contra-tendência, além de um dia se mover na direção da tendência básica e b ) para usar uma parada arbitrária em posições tomadas sem esperar por novos sinais.


Lembre-se, cinco e 20 dias não são necessariamente os melhores comprimentos para as médias móveis. E, muito provavelmente, as regras de ação, conforme descrito acima, podem ser refinadas e melhoradas. Além disso, pode ser que as médias móveis exponenciais, as médias móveis ponderadas, as médias móveis baseadas em altos ou baixos ou nos meios diários, ou alguma combinação de todas essas, produzam resultados superiores.


Neste campo do estudo técnico, provavelmente é seguro afirmar que o início da sabedoria vem quando você pára de perseguir arco-íris e admitir que nenhum método é perfeito. Quando você se encontra disposto a se contentar com qualquer método comparativamente simples que em testes durante um longo período de tempo ganha dinheiro em equilíbrio, fique com o método devidamente, pelo menos até ter certeza de que descobriu um método melhor.


Richard Donchian trabalhou na Shearson Lehman Bros. ao desenvolver sua análise técnica e métodos de tendência que hoje muitos comerciantes usam como base de seus sistemas. Ele também lançou o primeiro fundo de futuros gerenciado em 1948. Donchian morreu em 1993 com a idade de 87 anos.


Para mais informações sobre Richard Donchian, visite o site TurtleTrader Site.


Oi Cris! Artigo legal BTW. Eu acho que o segundo para o último parágrafo é muito verdadeiro. Na verdade, não consegui negociar até parar de mexer os métodos.


Estou interessado em prosseguir estudos adicionais sobre seus métodos e aplicação em spreads de futuros.


Estratégia de negociação 80-20.


Introdução.


'80 -20 'é um nome de uma das estratégias de negociação (TS) descritas no livro "Street Smarts: estratégias de negociação de curto prazo de alta probabilidade" por Linda Raschke e Laurence Connors. Semelhante às estratégias discutidas no meu artigo anterior, os autores atribuem-no ao palco quando o preço testa as fronteiras do intervalo. Também está focado em lucrar com falhas falsas e roll-backs das fronteiras. Mas desta vez, analisamos o movimento de preços em um intervalo de histórico significativamente menor envolvendo apenas o dia anterior. O tempo de vida de um sinal obtido também é relativamente curto, já que o sistema é destinado a negociação intradiária.


O primeiro objetivo do artigo é descrever o desenvolvimento do módulo de sinal de estratégia de negociação '80 -20 'usando linguagem MQL5. Então, vamos conectar este módulo à versão ligeiramente editada do robô comercial básico desenvolvido no artigo anterior da série. Além disso, vamos usar o mesmo módulo para o desenvolvimento de um indicador para negociação manual.


Como já dissemos, o código fornecido na série de artigos destina-se principalmente a programadores novatos ligeiramente avançados. Portanto, além de seu objetivo principal, o código é projetado para ajudar a passar da programação processual para o orientado a objetos. O código não incluirá classes. Em vez disso, implementará totalmente estruturas mais fáceis de dominar.


Outro objetivo do artigo é desenvolver ferramentas que nos permitam verificar se a estratégia ainda é viável hoje, já que Raschke e Connors usaram o comportamento do mercado no final do século passado ao criá-lo. Alguns testes de EA com base nos dados de histórico atualizados são apresentados no final do artigo.


Sistema de negociação '80 -20 '.


Os autores citam a técnica de Taylor Trading de George Taylor, bem como os trabalhos de Steve Moore sobre a análise informática dos mercados de futuros e a experiência comercial da Derek Gipson como base teórica para seu próprio trabalho. A essência da estratégia de negociação pode ser descrita brevemente da seguinte forma: se os preços Abertos e Fechar do dia anterior estiverem localizados nas áreas de alcance diário opostas, a probabilidade de uma reversão em relação à abertura do dia anterior é muito alta hoje. Os preços de abertura e fechamento do dia anterior devem localizar perto das fronteiras do intervalo. A reversão deve começar o dia atual (não antes da vela do dia anterior estar fechada). As regras de estratégia para comprar são as seguintes:


1. Certifique-se de que o mercado se abriu nos 20% superiores e fechou nos 20% mais baixos do intervalo diário ontem.


2. Aguarde até que o Baixo de hoje queque o dia anterior pelo menos por 5 carrapatos.


3. Coloque um pedido pendente de compra no limite inferior do intervalo de ontem.


4. Uma vez que a ordem pendente se desencadeia, defina seu StopLoss inicial no Low do dia.


5. Use o stop para proteger o lucro obtido.


As regras de venda de entrada são semelhantes, mas a barra de ontem deve ser otimista, uma ordem de compra deve estar localizada na margem superior da barra, enquanto o StopLoss deve ser colocado no High de hoje.


Ainda outro detalhe importante é o tamanho de uma barra diária fechada. De acordo com Linda Raschke, deve ser grande o suficiente - mais do que o tamanho médio dos bares diários. No entanto, ela não especifica quantos dias do histórico devem ser levados em consideração ao calcular o intervalo diário médio.


Também devemos ter em mente que o TS foi projetado exclusivamente para negociação intradiária - exemplos apresentados no livro usam gráficos M15.


O bloco de sinal e o indicador que faz um layout de acordo com a estratégia são descritos abaixo. Você também pode ver algumas capturas de tela com os resultados da operação do indicador. Eles ilustram claramente os padrões correspondentes às regras do sistema e aos níveis de negociação ligados aos padrões.


A análise de padrões deve resultar na colocação de uma ordem pendente de compra. Os níveis de negociação apropriados são melhor vistos no prazo de M1:


Um padrão semelhante com a direção comercial oposta no prazo M5:


Seus níveis de negociação (prazo M1):


Módulo de sinal.


Vamos adicionar o cálculo do nível Take Profit para ilustrar a adição de novas opções a um TS personalizado. Não há tal nível na versão original, pois apenas uma parada final é usada para fechar uma posição. Vamos tornar o Take Profit dependente do nível de breakout mínimo personalizado (TS_8020_Extremum_Break) - vamos multiplicá-lo pela relação personalizada TS_8020_Take_Profit_Ratio.


Precisaremos dos seguintes elementos da função principal do módulo de sinal fe_Get_Entry_Signal: status atual do sinal, níveis calculados de entrada e saída (Stop Loss and Take Profit), bem como as bordas do intervalo de ontem. Todos os níveis são recebidos através de links para as variáveis ​​passadas para a função, enquanto o status de retorno do sinal usa a lista de opções do artigo anterior:


ENTRY_BUY, // comprar sinal.


ENTRY_SELL, // sinal de venda.


ENTRY_NONE, // nenhum sinal.


ENTRY_UNKNOWN // status não definido.


datetime t_Time, // hora atual.


duplo & amp; d_Entry_Level, // nível de entrada (link para a variável)


duplo & amp; d_SL, // nível StopLoss (link para a variável)


duplo & amp; d_TP, // nível TakeProfit (link para a variável)


duplo & amp; d_Range_High, // Alto da 1ª barra do padrão (link para a variável)


duplo & amp; d_Range_Low // Baixa da 1ª barra do padrão (link para a variável)


Para detectar um sinal, precisamos analisar as duas últimas barras do período D1. Vamos começar do primeiro - se não cumprir os critérios do TS, não há necessidade de verificar a segunda barra. Existem dois critérios:


1. O tamanho da barra (diferença entre alto e baixo) deve exceder o valor médio nos últimos XX dias (definido pela configuração personalizada TS_8020_D1_Average_Period)


2. Os níveis de barra aberta e fechada devem estar localizados em frente 20% do intervalo da barra.


Se essas condições forem atendidas, os preços altos e baixos devem ser economizados para uso posterior. Uma vez que os primeiros parâmetros da barra não mudam durante todo o dia, não há nenhum ponto em verificar-los em cada chamada de função. Vamos armazená-los em variáveis ​​estáticas:


input uint TS_8020_D1_Average_Period = 20; // 80-20: Número de dias para calcular o alcance diário médio.


input uint TS_8020_Extremum_Break = 50; // 80-20: Fuga mínima do extremum de ontem (em pontos)


estático ENUM_ENTRY_SIGNAL se_Possible_Signal = ENTRY_UNKNOWN; // direção do sinal da primeira barra do padrão.


// variáveis ​​para armazenar níveis calculados entre carrapatos.


sd_SL = 0, sd_TP = 0,


sd_Range_High = 0, sd_Range_Low = 0.


// marque a primeira barra do padrão em D1:


se (se_Possible_Signal == ENTRY_UNKNOWN)


st_Last_D1_Bar = t_Curr_D1_Bar; // 1 st bar não muda neste dia.


double d_Average_Bar_Range = fd_Average_Bar_Range (TS_8020_D1_Average_Period, PERIOD_D1, t_Time);


// 1 st bar não é suficientemente grande.


se_Possible_Signal = ENTRY_NONE; // significa sem sinal hoje.


ma_Rates [0].open & gt; ma_Rates [0].high - d_20_Percents // barra aberta nos 20% superiores


ma_Rates [0].close & lt; ma_Rates [0].low + d_20_Percents // e fechado nos 20% mais baixos


ma_Rates [0].close & gt; ma_Rates [0].high - d_20_Percents // barra fechada nos 20% superiores


ma_Rates [0].open & lt; ma_Rates [0].low + d_20_Percents // e aberto nos 20% mais baixos


// 1 st bar corresponde às condições.


// define a direção comercial de hoje para a 1ª barra do padrão:


se_Possible_Signal = ma_Rates [0].open & gt; ma_Rates [0].close? ENTRY_BUY: ENTRY_SELL;


// nível de entrada no mercado:


sd_Entry_Level = d_Entry_Level = se_Possible_Signal == ENTRY_BUY? ma_Rates [0].low: ma_Rates [0].high;


Fronteiras de intervalo de 1 barramento do padrão do //:


sd_Range_High = d_Range_High = ma_Rates [0].high;


sd_Range_Low = d_Range_Low = ma_Rates [0].low;


// os níveis de abertura / fechamento de 1ª barra não correspondem às condições.


se_Possible_Signal = ENTRY_NONE; // significa sem sinal hoje.


Listagem da função para definir o intervalo de barras médio dentro do número especificado de barras no período de tempo especificado a partir da função de tempo especificada:


int i_Bars_Limit, // quantas barras considerar.


ENUM_TIMEFRAMES e_TF = PERIOD_CURRENT, // intervalos de barras.


datetime t_Time = WRONG_VALUE // quando iniciar o cálculo.


duplo d_Average_Range = 0; // variável para somar valores.


se (i_Bars_Limit & lt; 1) retornar (d_Average_Range);


se (t_Time == WRONG_VALUE) t_Time = TimeCurrent ();


int i_Price_Bars = CopyRates (_Symbol, e_TF, t_Time, i_Bars_Limit, ma_Rates);


se (Log_Level & gt; LOG_LEVEL_NONE) PrintFormat ("% s: CopyRates: erro #% u", __FUNCTION__, _LastError);


se (Log_Level & gt; LOG_LEVEL_NONE) PrintFormat ("% s: CopyRates: copiado% u barras de% u", __FUNCTION__, i_Price_Bars, i_Bars_Limit);


int i_Bar = i_Price_Bars;


d_Average_Range + = ma_Rates [i_Bar].high - ma_Rates [i_Bar].low;


retornar (d_Average_Range / double (i_Price_Bars));


Existe apenas um critério para a segunda barra (atual) do padrão - breakout da margem da faixa de ontem não deve ser menor que a especificada nas configurações (TS_8020_Extremum_Break). Assim que atingir o nível, aparece um sinal para colocar uma ordem pendente:


se (se_Possible_Signal == ENTRY_BUY)


sd_SL = d_SL = ma_Rates [1].low; // StopLoss - para o High de hoje.


se (TS_8020_Take_Profit_Ratio & gt; 0) sd_TP = d_TP = d_Entry_Level + _Point * TS_8020_Extremum_Break * TS_8020_Take_Profit_Ratio; // Obter lucros.


// a fuga é claramente vista?


ma_Rates [1].close & lt; ma_Rates [0].low - _Point * TS_8020_Extremum_Break?


sd_SL = d_SL = ma_Rates [1].high; // StopLoss - para o Low de hoje.


se (TS_8020_Take_Profit_Ratio & gt; 0) sd_TP = d_TP = d_Entry_Level - _Point * TS_8020_Extremum_Break * TS_8020_Take_Profit_Ratio; // Obter lucros.


// a fuga ascendente é claramente vista?


ma_Rates [1].close & gt; ma_Rates [0].high + _Point * TS_8020_Extremum_Break?


Salve as duas funções mencionadas acima (fe_Get_Entry_Signal e fd_Average_Bar_Range) e as configurações personalizadas relacionadas à recepção de um sinal para o arquivo da biblioteca mqh. A listagem completa está anexada abaixo. Vamos nomear o arquivo Signal_80-20.mqh e colocá-lo no diretório apropriado da pasta de dados do terminal (MQL5 \ Include \ Expert \ Signal).


Indicador para negociação manual.


Assim como a EA, o indicador é usar o módulo de sinal descrito acima. O indicador deve informar um comerciante ao receber um sinal de colocação de pedido pendente e fornecer os níveis calculados - colocação de pedidos, tomar lucros e parar os níveis de perda. Um usuário pode selecionar um método de notificação - uma janela pop-up padrão, alerta por e-mail ou notificação push. É possível escolher tudo de uma vez ou qualquer combinação que você gosta.


Outro indicador de objetivo é um layout de histórico comercial de acordo com '80 -20 'TS. O indicador é destacar as barras diárias correspondentes aos critérios do sistema e aos níveis de negociação calculados por lotes. As linhas de nível mostram como a situação evoluiu ao longo do tempo. Para mais clareza, façamos o seguinte: quando o preço toca a linha de sinal, o último é substituído por uma linha de pedido pendente. Quando a ordem pendente é ativada, sua linha é substituída pelas linhas Take Profit e Stop Loss. Estas linhas são interrompidas quando o preço toca um deles (o pedido está fechado). Este layout facilita a avaliação da eficiência das regras do sistema comercial e define o que pode ser melhorado.


Comecemos por declarar os buffers e seus parâmetros de exibição. Primeiro, precisamos declarar os dois buffers com o preenchimento da área vertical (DRAW_FILLING). O primeiro é destacar o intervalo de barras diárias completo do dia anterior, enquanto outro é para destacar a área interna apenas para separá-lo dos 20% superiores e inferiores do alcance usado em TS. Depois disso, declare os dois buffers para a linha de sinal multicolorida e a linha de pedido pendente (DRAW_COLOR_LINE). Sua cor depende da direção comercial. Existem outras duas linhas (Take Proft e Stop Loss) com a cor restante do mesmo (DRAW_LINE) - eles devem usar as mesmas cores padrão atribuídas no terminal. Todos os tipos de exibição selecionados, com exceção de uma linha simples, requerem dois buffers cada, portanto, o código é o seguinte:


#property indicator_buffers 10.


#property indicator_plots 6.


#property indicator_type1 DRAW_FILLING.


#property indicator_color1 clrDeepPink, clrDodgerBlue.


#property indicator_width1 1.


#property indicator_type2 DRAW_FILLING.


#property indicator_color2 clrDeepPink, clrDodgerBlue.


#property indicator_width2 1.


#property indicator_type3 DRAW_COLOR_LINE.


#property indicator_style3 STYLE_SOLID.


#property indicator_color3 clrDeepPink, clrDodgerBlue.


#property indicator_width3 2.


#property indicator_type4 DRAW_COLOR_LINE.


#property indicator_style4 STYLE_DASHDOT.


#property indicator_color4 clrDeepPink, clrDodgerBlue.


#property indicator_width4 2.


#property indicator_type5 DRAW_LINE.


#property indicator_style5 STYLE_DASHDOTDOT.


#property indicator_color5 clrCrimson.


#property indicator_width5 1.


#property indicator_type6 DRAW_LINE.


#property indicator_style6 STYLE_DASHDOTDOT.


#property indicator_color6 clrLime.


#property indicator_width6 1.


Vamos fornecer aos comerciantes a capacidade de desativar o preenchimento da primeira barra do padrão diário, selecionar as opções de notificação de sinal e limitar a profundidade do layout do histórico. Todas as configurações do sistema comercial do módulo de sinal também estão incluídas aqui. Para fazer isso, precisamos enumerar preliminarmente as variáveis ​​usadas no módulo, mesmo que algumas delas sejam usadas apenas na EA e não são necessárias no indicador:


input bool Show_Inner = true; // 1ª barra do padrão: mostra a área interna?


input bool Alert_Popup = true; // Alerta: mostra uma janela pop-up?


input bool Alert_Email = false; // Alerta: Enviar um e-mail?


input string Alert_Email_Subj = "" ; // Alert: eMail subject.


input bool Alert_Push = true ; // Alert: Send a push notification?


buff_1st_Bar_Outer[], buff_1st_Bar_Outer_Zero[], // buffers for plotting the full range of the pattern's 1 st bar.


buff_1st_Bar_Inner[], buff_1st_Bar_Inner_Zero[], // buffers for plotting the internal 60% of the pattern's 1 st bar.


buff_Signal[], buff_Signal_Color[], // signal line buffers.


buff_Entry[], buff_Entry_Color[], // pending order line buffers.


buff_SL[], buff_TP[], // StopLoss and TakeProfit lines' buffers.


gd_Extremum_Break = 0 // TS_8020_Extremum_Break in symbol prices.


gi_D1_Average_Period = 1 , // correct value for TS_8020_D1_Average_Period.


gi_Min_Bars = WRONG_VALUE // minimum required number of bars for re-calculation.


// check the entered TS_8020_D1_Average_Period parameter:


gi_D1_Average_Period = int ( fmin ( 1 , TS_8020_D1_Average_Period));


// converting points to symbol prices:


gd_Extremum_Break = TS_8020_Extremum_Break * _Point ;


// minimum required number of bars for re-calculation = number of bars of the current TF within a day.


gi_Min_Bars = int ( 86400 / PeriodSeconds ());


SetIndexBuffer ( 0 , buff_1st_Bar_Outer, INDICATOR_DATA );


PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , 0 );


SetIndexBuffer ( 1 , buff_1st_Bar_Outer_Zero, INDICATOR_DATA );


SetIndexBuffer ( 2 , buff_1st_Bar_Inner, INDICATOR_DATA );


PlotIndexSetDouble ( 1 , PLOT_EMPTY_VALUE , 0 );


SetIndexBuffer ( 3 , buff_1st_Bar_Inner_Zero, INDICATOR_DATA );


SetIndexBuffer ( 4 , buff_Signal, INDICATOR_DATA );


PlotIndexSetDouble ( 2 , PLOT_EMPTY_VALUE , 0 );


SetIndexBuffer ( 5 , buff_Signal_Color, INDICATOR_COLOR_INDEX );


SetIndexBuffer ( 6 , buff_Entry, INDICATOR_DATA );


PlotIndexSetDouble ( 3 , PLOT_EMPTY_VALUE , 0 );


SetIndexBuffer ( 7 , buff_Entry_Color, INDICATOR_COLOR_INDEX );


SetIndexBuffer ( 8 , buff_SL, INDICATOR_DATA );


PlotIndexSetDouble ( 4 , PLOT_EMPTY_VALUE , 0 );


SetIndexBuffer ( 9 , buff_TP, INDICATOR_DATA );


PlotIndexSetDouble ( 5 , PLOT_EMPTY_VALUE , 0 );


IndicatorSetString ( INDICATOR_SHORTNAME , "80-20 TS" );


Place the main program's code to the built-in OnCalculate function — arrange the loop for iterating over the current timeframe's bars from the past to the future searching them for a signal using the function from the signal module. Declare and initialize the necessary variables using initial values. Let's define the oldest loop bar for the first calculation considering a user-defined history depth limit ( Bars_Limit ). For subsequent calls, all bars of the current day (rather than the last bar) are re-calculated, since the two-bar pattern actually belongs to D1 chart regardless of the current timeframe.


Besides, we should protect against the so-called phantoms: if we do not perform a forced indicator buffers clearing during re-initialization, then no longer relevant filled areas remain on the screen when switching timeframes or symbols. The buffer clearing should be bound to the first OnCalculate function call after the indicator initialization. However, the standard prev_calculated variable is not enough for defining if the call is the first one, since it may contain zero not only during the first function call but also "when changing the checksum". Let's spend some time to properly solve this issue by creating the structure not affected by setting the prev_calculated variable to zero. The structure is to store and process data frequently used in the indicators:


- flag of the OnCalculate function first launch;


- the counter of calculated bars that is not set to zero when changing the checksum;


- flag of changing the checksum;


- flag of the beginning of a new bar;


- current bar start time.


The structure combining all these data is to be declared at the global level. It should be able to gather or present data from/to any built-in or custom functions. Let's name this structure Brownie. It can be placed to the end of the indicator code. A single global type structure object named go_Brownie is to be declared there as well:


datetime t_Last_Bar_Time; // time of the last processed bar.


int i_Prew_Calculated; // number of calculated bars.


bool b_First_Run; // first launch flag.


bool b_History_Updated; // history update flag.


bool b_Is_New_Bar; // new bar opening flag.


b_First_Run = b_Is_New_Bar = true ;


if (b_Reset_First_Run) b_First_Run = true ; // set to zero if there is permission.


// flag of the OnCalculate built-in function first call.


if (b_First_Run && i_Prew_Calculated > 0 ) b_First_Run = false ;


datetime t_This_Bar_Time = TimeCurrent () - TimeCurrent () % PeriodSeconds ();


b_Is_New_Bar = t_Last_Bar_Time == t_This_Bar_Time;


if (b_Is_New_Bar) t_Last_Bar_Time = t_This_Bar_Time;


// are there any changes in history?


b_History_Updated = i_New_Prew_Calculated == 0 && i_Prew_Calculated > WRONG_VALUE ;


if (i_Prew_Calculated == WRONG_VALUE ) i_Prew_Calculated = i_New_Prew_Calculated;


// or if there was no history update.


else if (i_New_Prew_Calculated > 0 ) i_Prew_Calculated = i_New_Prew_Calculated;


Let's inform the Brownie of the indicator de-initialization event:


go_Brownie. f_Reset(); // inform Brownie.


If necessary, the amount of data stored by the Brownie can be expanded if custom functions or classes need prices, volumes or the current bar's spread value (Open, High, Low, Close, tick_volume, volume, spread). It is more convenient to use ready-made data from the OnCalculate function and pass them via Brownie rather than using the time series copying functions (CopyOpen, CopyHigh etc. or CopyRates) — this saves the CPU resources and eliminates the necessity to arrange processing of errors of these language functions.


Let's get back to the main indicator function. Declaring variables and preparing the arrays using the go_Brownie structure look as follows:


i_Period_Bar = 0 , // auxiliary counter.


i_Current_TF_Bar = rates_total - int (Bars_Limit) // bar index of the current TF loop start.


static datetime st_Last_D1_Bar = 0 ; // time of the last processed bar of the couple of D1 bars (pattern's 2 nd bar)


static int si_1st_Bar_of_Day = 0 ; // index of the current day's first bar.


// clear the buffers during re-initialization:


ArrayInitialize (buff_1st_Bar_Inner, 0 ); ArrayInitialize (buff_1st_Bar_Inner_Zero, 0 );


ArrayInitialize (buff_1st_Bar_Outer, 0 ); ArrayInitialize (buff_1st_Bar_Outer_Zero, 0 );


ArrayInitialize (buff_Entry, 0 ); ArrayInitialize (buff_Entry_Color, 0 );


ArrayInitialize (buff_Signal, 0 ); ArrayInitialize (buff_Signal_Color, 0 );


ArrayInitialize (buff_TP, 0 );


ArrayInitialize (buff_SL, 0 );


datetime t_Time = TimeCurrent ();


// minimum re-calculation depth - from the previous day:


i_Current_TF_Bar = rates_total - Bars ( _Symbol , PERIOD_CURRENT , t_Time - t_Time % 86400 , t_Time) - 1 ;


ENUM_ENTRY_SIGNAL e_Signal = ENTRY_UNKNOWN; // signal.


d_SL = WRONG_VALUE , // SL level.


d_TP = WRONG_VALUE , // TP level.


d_Entry_Level = WRONG_VALUE , // entry level.


d_Range_High = WRONG_VALUE , d_Range_Low = WRONG_VALUE // borders of the pattern's 1 st bar range.


t_Curr_D1_Bar = 0 , // current D1 bar time (pattern's 2 nd bar)


t_D1_Bar_To_Fill = 0 // D1 bar time to be filled (pattern's 1 st bar)


i_Current_TF_Bar = int ( fmax ( 0 , fmin (i_Current_TF_Bar, rates_total - gi_Min_Bars)));


// the main program loop is to be located here.


Check the presence of a signal when iterating over the current timeframe bars:


if (e_Signal > 1 ) continue ; // no signal during the day the bar belongs to.


If there is a signal on a new day's first bar, the range of the previous daily bar should be filled. The value of the t_D1_Bar_To_Fill variable of datetime type is used as a flag. If it is equal to WRONG_VALUE, no filling is required on this bar. The signal line should start at the same first bar, but let's extend it to the last bar of the previous day for better layout perception. Since the calculations of a signal line, as well as line and filling colors for bullish and bearish bars are different, let's make two similar blocks:


t_D1_Bar_To_Fill = Time [i_Current_TF_Bar — 1 ] — Time [i_Current_TF_Bar — 1 ] % 86400 ;


else t_D1_Bar_To_Fill = WRONG_VALUE ; // previous day bar, no new filling required.


st_Last_D1_Bar = t_Curr_D1_Bar; // remember.


// Filling the previous day's D1 bar:


if (Show_Outer) while (--i_Period_Bar > 0 )


if ( Time [i_Period_Bar] < t_D1_Bar_To_Fill) break ;


while (--i_Period_Bar > 0 )


if ( Time [i_Period_Bar] < t_D1_Bar_To_Fill) break ;


buff_1st_Bar_Inner_Zero[i_Period_Bar] = d_Range_Low + 0.2 * (d_Range_High — d_Range_Low);


buff_1st_Bar_Inner[i_Period_Bar] = d_Range_High — 0.2 * (d_Range_High — d_Range_Low);


// start of the signal line — from the previous day's last bar.


buff_Signal[i_Current_TF_Bar] = buff_Signal[i_Current_TF_Bar — 1 ] = d_Range_Low — gd_Extremum_Break;


buff_Signal_Color[i_Current_TF_Bar] = buff_Signal_Color[i_Current_TF_Bar — 1 ] = 0 ;


if (Show_Outer) while (--i_Period_Bar > 0 )


if ( Time [i_Period_Bar] < t_D1_Bar_To_Fill) break ;


while (--i_Period_Bar > 0 )


if ( Time [i_Period_Bar] < t_D1_Bar_To_Fill) break ;


buff_1st_Bar_Inner_Zero[i_Period_Bar] = d_Range_High — 0.2 * (d_Range_High — d_Range_Low);


buff_1st_Bar_Inner[i_Period_Bar] = d_Range_Low + 0.2 * (d_Range_High — d_Range_Low);


// start of the signal line — from the previous day's last bar.


buff_Signal[i_Current_TF_Bar] = buff_Signal[i_Current_TF_Bar — 1 ] = d_Range_High + gd_Extremum_Break;


buff_Signal_Color[i_Current_TF_Bar] = buff_Signal_Color[i_Current_TF_Bar — 1 ] = 1 ;


All the remaining layout lines are to be plotted inside the current timeframe's bars iteration loop. As already mentioned, the signal line should end at the bar where the price touched it. The pending order line should start at the same bar and end on the bar, at which the contact with the price occurs. Take Profit and Stop Loss lines should start at the same bar. The layout of the pattern is finished at the bar, at which the price touches one of them:


while (++i_Period_Bar < rates_total)


if ( Time [i_Period_Bar] > t_Curr_D1_Bar + 86399 ) break ;


buff_Signal[i_Period_Bar] = d_Range_Low — gd_Extremum_Break;


if (d_Range_Low — gd_Extremum_Break >= Low [i_Period_Bar]) break ;


while (++i_Period_Bar < rates_total)


if ( Time [i_Period_Bar] > t_Curr_D1_Bar + 86399 ) break ;


buff_Signal[i_Period_Bar] = d_Range_High + gd_Extremum_Break;


if (d_Range_High + gd_Extremum_Break <= High [i_Period_Bar]) break ;


while (++i_Period_Bar < rates_total)


if ( Time [i_Period_Bar] > t_Curr_D1_Bar + 86399 ) break ;


if (d_Range_Low <= High [i_Period_Bar])


if (buff_Entry[i_Period_Bar — 1 ] == 0 .)


// start and end on a single bar, extend by 1 bar to the past.


buff_Entry[i_Period_Bar — 1 ] = d_Range_Low;


buff_Entry_Color[i_Period_Bar — 1 ] = 0 ;


while (++i_Period_Bar < rates_total)


if ( Time [i_Period_Bar] > t_Curr_D1_Bar + 86399 ) break ;


if (d_Range_High >= Low [i_Period_Bar])


if (buff_Entry[i_Period_Bar — 1 ] == 0 .)


// start and end on a single bar, extend by 1 bar to the past.


buff_Entry[i_Period_Bar — 1 ] = d_Range_High;


buff_Entry_Color[i_Period_Bar — 1 ] = 1 ;


// SL is equal to the Low since the beginning of a day:


d_SL = Low [ ArrayMinimum ( Low , si_1st_Bar_of_Day, i_Period_Bar — si_1st_Bar_of_Day)];


if ( Time [i_Period_Bar] > t_Curr_D1_Bar + 86399 ) break ;


if (d_TP <= High [i_Period_Bar] || d_SL >= Low [i_Period_Bar])


if (buff_SL[i_Period_Bar — 1 ] == 0 .)


// start and end on a single bar, extend by 1 bar to the past.


buff_SL[i_Period_Bar — 1 ] = d_SL;


buff_TP[i_Period_Bar — 1 ] = d_TP;


// SL is equal to the High since the beginning of a day:


d_SL = High [ ArrayMaximum ( High , si_1st_Bar_of_Day, i_Period_Bar — si_1st_Bar_of_Day)];


if ( Time [i_Period_Bar] > t_Curr_D1_Bar + 86399 ) break ;


if (d_SL <= High [i_Period_Bar] || d_TP >= Low [i_Period_Bar])


if (buff_SL[i_Period_Bar — 1 ] == 0 .)


// start and end on a single bar, extend by 1 bar to the past.


buff_SL[i_Period_Bar — 1 ] = d_SL;


buff_TP[i_Period_Bar — 1 ] = d_TP;


Let's place the call code of the f_Do_Alert signal notification function out of the loop. In fact, it has slightly wider opportunities as compared to the ones involved in this indicator — the function is able to work with audio files meaning that this option can be added to custom settings. The same is true for the ability to select separate files for buy and sell signals. Function listing:


string s_Message, // alert message.


bool b_Alert = true , // show a pop-up window?


bool b_Sound = false , // play a sound file?


bool b_Email = false , // send an eMail?


bool b_Notification = false , // send a push notification?


string s_Email_Subject = "" , // eMail subject.


string s_Sound = "alert. wav" // sound file.


static string ss_Prev_Message = "there was silence" ; // previous alert message.


static datetime st_Prev_Time; // previous alert bar time.


datetime t_This_Bar_Time = TimeCurrent () — PeriodSeconds () % PeriodSeconds (); // current bar time.


// another and/or 1 st at this bar.


s_Message = StringFormat ( "%s | %s | %s | %s" ,


TimeToString ( TimeLocal (), TIME_SECONDS ), // local time.


StringSubstr ( EnumToString ( ENUM_TIMEFRAMES ( _Period )), 7 ), // TF.


if (b_Alert) Alert (s_Message);


if (b_Email) SendMail (s_Email_Subject + " " + _Symbol , s_Message);


if (b_Notification) SendNotification (s_Message);


if (b_Sound) PlaySound (s_Sound);


The code for checking the need for calling the function and forming the text for it located in the program body before completion of the OnCalculate event handler:


i_Period_Bar = rates_total — 1 ; // current bar.


if (buff_Signal[i_Period_Bar] == 0 ) return (rates_total); // nothing to catch yet (or already)


buff_Signal[i_Period_Bar] > High [i_Period_Bar]


buff_Signal[i_Period_Bar] < Low [i_Period_Bar]


) return (rates_total); // no signal line touching.


string s_Message = StringFormat ( "TS 80-20: needed %s @ %s, TP: %s, SL: %s" ,


buff_Signal_Color[i_Period_Bar] > 0 ? "BuyStop" : "SellStop" ,


DoubleToString (d_Entry_Level, _Digits ),


DoubleToString (d_TP, _Digits ),


DoubleToString (d_SL, _Digits )


f_Do_Alert(s_Message, Alert_Popup, false , Alert_Email, Alert_Push, Alert_Email_Subj);


The entire source code of the indicator can be found in the attached files (TS_80-20.mq5). The trading layout according to the system is best seen on minute charts.


Please note that the indicator uses the bar data rather than tick sequences inside bars. This means if the price crossed several layout lines (for example, Take Profit and Stop Loss lines) on a single bar, you cannot always define which of them was crossed first. Another uncertainty stems from the fact that the start and end lines cannot coincide. Otherwise, the lines from the buffer of DRAW_LINE and DRAW_COLOR_LINE types will simply be invisible to a user. These features reduce the layout accuracy but it still remains quite clear.


Expert Advisor for testing the '80-20' trading strategy.


The basic EA for testing strategies from the book Street Smarts: High Probability Short-Term Trading Strategies was described in details in the first article. Let's insert two significant changes in it. First, the signal module is to be used in the indicator as well meaning it would be reasonable to set trading levels calculation in it. We have already done this above. Apart from the signal status, the fe_Get_Entry_Signal function returns order placement, Stop Loss and Take Profit levels. Therefore, let's remove the appropriate part of the code from the previous EA version adding the variables for accepting levels from the function and edit the function call itself. The listings of the old and new code blocks can be found in the attached file (strings 128-141).


Another significant addition to the basic EA code is due to the fact that, unlike the previous two, this TS deals with a short-term trend. It assumes that the roll-back happens once a day and is unlikely to be repeated. This means that the robot has to make only one entry ignoring the existing signal all the rest of the time until the next day. The easiest way to implement that is to use a special flag — static or global variable of bool type in the program memory. But if the EA operation is interrupted for some reason (the terminal is closed, the EA is removed from the chart, etc.), the flag value is lost as well. Thus, we should have the ability to check if today's signal was activated previously. To do this, we may analyze the history of trades for today or store the date of the last entry in the terminal global variables rather than in the program. Let us use the second option since it is much easier to implement.


Provide users with the ability to manage 'one entry per day' option and set an ID of each launched version of the robot — it is needed to use global variables of the terminal level:


input uint Magic_Number = 2018 ; // EA magic number.


Let's add the variables necessary to implement 'one entry per day' option to the program's global variables definition block. Initialize them in the OnInit function:


gs_Prefix // identifier of (super)global variables.


gs_Prefix = StringFormat ( "SSB %s %u %s" , _Symbol , Magic_Number, MQLInfoInteger ( MQL_TESTER ) ? "t " : "" );


gb_Position_Today = int ( GlobalVariableGet (gs_Prefix + "Last_Position_Date" )) == TimeCurrent () — TimeCurrent () % 86400 ;


gb_Pending_Today = int ( GlobalVariableGet (gs_Prefix + "Last_Pending_Date" )) == TimeCurrent () — TimeCurrent () % 86400 ;


Here the robot reads the values of global variables and compares the written time with the day start time, thus defining if the today's signal has already been processed. Time is written to the variables in two places — let's add the appropriate block to the pending order installation code (additions highlighted):


if (Log_Level > LOG_LEVEL_NONE) Print ( "Pending order placing error" );


// the distance from the current price is not enough :(


if (Log_Level > LOG_LEVEL_ERR)


PrintFormat ( "Pending order cannot be placed at the %s level. Bid: %s Ask: %s StopLevel: %s" ,


DoubleToString (d_Entry_Level, _Digits ),


DoubleToString (go_Tick. bid, _Digits ),


DoubleToString (go_Tick. ask, _Digits ),


DoubleToString (gd_Stop_Level, _Digits )


// to update the flag:


GlobalVariableSet ( // in the terminal global variables.


TimeCurrent () — TimeCurrent () % 86400.


gb_Pending_Today = true ; // in the program global variables.


The second block is placed after the code defining a newly opened position:


if ( PositionGetDouble ( POSITION_SL ) == 0 .)


// update the flag:


GlobalVariableSet ( // in the terminal global variables.


TimeCurrent () — TimeCurrent () % 86400.


gb_Position_Today = true ; // in the program global variables.


These are the only significant changes in the previous EA version code. The finalized source code of the new version is attached below.


Strategy backtesting.


In order to illustrate the trading system viability, its authors use patterns detected on the charts from the end of the last century. Therefore, we need to check its relevance in today's market conditions. For testing, I took the most popular Forex pair EURUSD, the most volatile pair USDJPY and one of the metals — XAUUSD. I increased the indents specified by Raschke and Connors 10 times, since four-digit quotes were used when the book was written, while I tested the EA on five-digit ones. Since there is no any guidance concerning the trailing parameters, I have selected the ones that seem to be most appropriate to daily timeframe and instrument volatility. The same applies to the Take Profit calculation algorithm added to the original rules — the ratio for its calculation was chosen arbitrarily, without deep optimization.


The balance chart when testing on the five-year EURUSD history with the original rules (no Take Profit):


The same settings and Take Profit:


The balance chart when testing the original rules on the five-year USDJPY history:


The same settings and Take Profit:


The balance chart when testing the original rules on the daily gold quotes for the last 4 years:


The full data on the robot settings used in each test can be found in the attached archive containing the complete reports.


Conclusão.


The rules programmed in the signal module match the 80-20 trading system description provided by Linda Raschke and Laurence Connors in their book "Street Smarts: High Probability Short-Term Trading Strategies". However, we have extended the original rules a bit. The tools (the robot and the indicator) are to help traders draw their own conclusions concerning the TS relevance in today's market. In my humble opinion, the TS needs a serious upgrade. In this article, I have tried to make some detailed comments on developing the code of the signal module, as well as the appropriate robot and indicator. I hope, this will help those who decide to do the upgrade. Apart from modifying the rules, it is also possible to find trading instruments that fit better to the system, as well as signal detection and tracking parameters.


Traduzido do russo pela MetaQuotes Software Corp.


Donchian 5 20 System Applied To Stocks.


Richard Donchian created a system he called the Donchian 5 20 system in 1961. The system involves the use of the 5 day moving average and the 20 day moving average. Donchian believed that the 5 and 20 day moving averages have a special relationship because there are about 4, 5 day periods in a month or about 20 trading days excluding weekends.


Donchian’s idea was to use a break of the 20 day moving average as a buy, and a retracement exceeding the 5 day moving average as a sell. The price must not only cross above the 20-day moving average but also exceed any previous 1-day break by at least one volatility measure.


The Donchian 5 20 System was designed for commodity futures trading but in this lesson, I will adapt those rules to regular stock trading. This is a variation of the 5 20 system created for stocks and is therefore different from the original 5 20 system which was created for commodity futures trading.


When the 20 day moving average is broke, a buy signal is not given until one day confirms the break. The confirmation day must close above the high of the broken 20 day moving average day. No break above the 20 day moving average should be used as a buy signal unless it has at least one day confirmation where the price closes above the signal day.


If the confirmation day does not confirm and is instead a retracement day, the price will fall back below the 20 day moving average. This is ok and does not negate the 20 day moving average break buy signal. Continue to keep track of the original confirmation level (which is a close above the 20 day moving average break day). The next time the 20 day moving average is broke, it is a buy only if the 20 day moving average break exceeds the previous 20 day moving average break.


The signal only stays valid for at most 25 trading days. Act on all closes that cross the 20-day moving average, confirm with a one day close above (or below, in the direction of the crossing) for up to 25 daily closes after the original signal.


Within the first 20 days after the first day of a crossing that leads to an action signal, reverse on any close that crosses the 20-day moving average and confirms with a one day close (above or below) the previous 15 daily closes.


A stop loss using the 5 day moving average rules for closing out positions and for reinstating positions in the direction of the basic 20-day moving average trend are:


Close out positions when the price closes below the five-day moving average for long positions or above the five-day moving average for short positions with at least a one day confirmation close more than the greater of a) the previous penetration on the same side of the five-day moving average, or b) the maximum point of any previous penetration within the preceding 25 trading sessions.


I created this video on YouTube that explains the Donchian 5 20 system. The video has more than 14K views:


Author: Lance Jepsen.


For ethical purposes, I try not to hold any position in any stock I profile on GuerillaStockTrading unless specifically stated in the article. Owner of GuerillaStockTrading. Seasoned entrepreneur, investor, and writer. I love God, family, country, stock trading, economics, and helping people learn how to trade.


No Responses.


Deixe uma resposta.


Pós-navegação.


Market Sentiment Gauge.


SRAXasked by bernard m rosenberg VIABasked by bernard m rosenberg Ethereum stocksasked by John G Moss Opinion about GE stockasked by Bojan Lukovic BONTasked by bernard m rosenberg VIABasked by bernard m rosenberg How much has the Fed reduced its balance sheet? asked by Terry Is Vascular Biogenics (VBLT) a good buy? asked by Stephen Overstock (OSTK)asked by Rob Deciphera Pharmaceuticals (DCPH) Quiet Period Endingasked by Sean Your thoughts on TXMD TherapeuticsMDasked by Joe E. CTXR – Citius Pharmaceuticals Incasked by Simon.


Top Performing GuerillaStockTrading Picks For Week Ending December 22 2017.


Recent Winners.


Past results are not indicative of future profits. This table is accurate, though not every trade is represented.


Economics Lessons.


Stock Trading Lessons.


Categorias.


STOCK MARKET PREDICTION SHOW OVER 25,000 SUBSCRIBERS!


Leitura recomendada.


Disclosure Statement.


We are a professional website that receives compensation from the companies whose products we review and recommend. We are independently owned and the opinions we express here are our own. We have high standards and a reputation to uphold. Our recommendations are researched carefully and if the company or companies we currently recommend do not maintain their high quality of service, we will take appropriate action including updating this website to reflect any necessary changes.

No comments:

Post a Comment