Skip to main content

80 Trading Strategies For Novice


MetaTrader 5 - Trading Systems 80-20 estratégia de negociação Introdução 80-20 é um nome de uma das estratégias de negociação (TS) descrita no livro Street Smarts: Estratégias de Negociação de Curto Prazo de Probabilidade Alta 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 testar a faixa de limites. Também está focado em lucrar com falhas falsas e rolamentos 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, pois o sistema é destinado a negociação intradiária. O primeiro objetivo do artigo é descrever o desenvolvimento do módulo de sinal de estratégia comercial 80-20 usando linguagem MQL5. Então, vamos conectar este módulo à versão ligeiramente editada do robô básico comercial desenvolvido no artigo anterior da série. Além disso, vamos usar o mesmo módulo para o desenvolvimento de um indicador de negociação manual. Como já disse, 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. Ainda 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. 80-20 sistema comercial Os autores nomeiam George Taylors The Taylor Trading Technique. Bem como Steve Moores trabalha na análise informática dos mercados de futuros e na experiência de negociação de Derek Gipsons como base teórica para seu próprio trabalho. A essência da estratégia de negociação pode ser brevemente descrita da seguinte forma: se os preços de abertura e fechamento dos dias anteriores estiverem localizados nas áreas de alcance diário opostas, a probabilidade de uma reversão para a abertura dos dias anteriores é muito alta hoje. Nos dias anteriores, os preços Abrir e Fechar devem localizar perto das fronteiras do intervalo. A reversão deve começar o dia atual (não antes dos dias anteriores, a vela está 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 no mínimo 20 do intervalo diário ontem. 2. Aguarde até hoje. Baixa quebra nos dias anteriores pelo menos por 5 tiques 3. Coloque um pedido de compra pendente na borda inferior do intervalo de ontem 4. Uma vez que a ordem pendente se desencadeia, defina o StopLoss inicial nos dias baixos 5. Use a parada final para proteger o lucro obtido As regras de venda de entrada são semelhantes, mas a barra de ontem deve Seja otimista, uma ordem de compra deve estar localizada no limite superior da barra, enquanto o StopLoss deve ser colocado no alto 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 os exemplos de negociação intradiária mostrados nos gráficos do M15 do livro. 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 cronograma M1: um padrão semelhante com a direção comercial oposta no prazo M5: seus níveis de negociação (M1 timeframe): módulo de sinal Permite adicionar o cálculo do nível Take Profit para ilustrar a adição de novas opções a um TS personalizado. Não existe tal nível na versão original, pois apenas uma parada final é usada para fechar uma posição. Permite tornar o Take Profit dependente do nível de breakout mínimo personalizado (TS8020ExtremumBreak), vamos multiplicá-lo pela relação personalizada TS8020TakeProfitRatio. Nós precisaremos dos seguintes elementos da função principal dos módulos de sinal feGetEntrySignal: status atual do sinal, níveis calculados de entrada e saída (Stop Loss and Take Profit), bem como fronteiras da faixa 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 de sinais usa a lista de opções do artigo anterior: enum ENUMENTRYSIGNAL ENTRYBUY, // sinal de compra ENTRYSELL, // sinal de venda ENTRYNONE, // sem sinal ENTRYUNKNOWN // status não definido ENUMENTRYSIGNAL feGetEntrySignal (// D1 análise de padrão de duas velas data-hora tTime, // tempo atual duplo amplificador dEntryLevel, // nível de entrada (link para a variável) duplo amplificador dSL, // nível StopLoss (link para a variável ) Dobro do amplificador dTP // Nível TakeProfit (link para a variável) amp duplo dRangeHigh, // Alto dos padrões 1ª barra (link para a variável) duplo amplificador dRangeLow // Baixa dos padrões 1ª barra (link para o Variável)) Para detectar um sinal, precisamos analisar as duas últimas barras do período D1. Comece a partir do primeiro se não atender aos 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 do TS8020D1AveragePeriod) 2. Os níveis de Barra Aberta e Fechar devem estar localizados no oposto 20 de O intervalo de barras Se estas 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. Permite armazená-los em variáveis ​​estáticas: // configurações personalizadas entrada uint TS8020D1AveragePeriod 20 // 80-20: Número de dias para calcular a entrada diária média de alcance uint TS8020ExtremumBreak 50 // 80-20: Fuga mínima do extremum de ontem (em pontos) Estático ENUMENTRISIGNAL sePossibleSignal ENTRYUNKNOWN // padrões primeira barra direção do sinal estático duplo // variáveis ​​para armazenar níveis calculados entre carrapatos sdEntryLevel 0, sdSL 0. sdTP 0, sdRangeHigh 0. sdRangeLow 0 // verifique os padrões primeira barra em D1: if (sePossibleSignal ENTRYUNKNOWN ) StLastD1Bar tCurrD1Bar // 1 st bar não altera este dia // intervalo diário médio duplo dAverageBarRange fdAverageBarRange (TS8020D1Preiodo de oferta, PERIODD1. TTime) se (maRates 0.high maRates 0.low lt dAverageBarRange) // 1 st bar não é grande o suficiente SePossibleSignal ENTRYNONE // significa que nenhum sinal hoje retorna (sePossibleSignal) double d20Percents 0.2 (maRates 0.high maRates 0.low) // 20 do intervalo de ontem se ((/ / Barra de baixa: maRates 0.open gt maRates 0.high d20Percents // barra aberta no superior 20 ampamp maRates 0.close lt maRates 0.low d20Percents // e fechado no 20 inferior) (// bullish: maRates 0. Fechar gt maRates 0.high d20Percents // barra fechada no superior 20 ampamp maRates 0.open lt maRates 0.low d20Percents // e aberto no 20 inferior)) // 1 st bar corresponde às condições // define a negociação de hoje Direção dos padrões 1ª barra: sePossibleSignal maRates 0.open gt maRates 0.close. ENTRYBUY. ENTRYSELL // nível de entrada no mercado: sdEntryLevel dEntryLevel sePossibleSignal ENTRYBUY. MaRates 0.low. MaRates 0.high // patterns 1 st bar range borders: sdRangeHigh dRangeHigh maRates 0.high sdRangeLow dRangeLow maRates 0.low else // 1 st bar abrir / fechar níveis não coincidem com condições sePossibleSignal ENTRYNONE // significa que nenhum sinal hoje retorna (sePossibleSignal ) 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 especificado: double fdAverageBarRange (// Calcula o tamanho médio da barra int iBarsLimit, // quantas barras considerar ENUMTIMEFRAMES eTF PERIODCURRENT // barras intervalo de tempo datetime tTime WRONGVALUE // quando iniciar o cálculo) double dAverageRange 0 // variável para somar valores se (iBarsLimit lt 1) retornar (dAverageRange) MqlRates maRates // barra info array // obter informações da barra do histórico especificado Intervalo: se (tTime WRONGVALUE) tTime TimeCurrent () int iPriceBars CopyRates (símbolo. ETF, tTime, iBarsLimit, maRates) se (iPriceBars WRONGVALUE) se (LogLevel gt L OGLEVELNONE) PrintFormat (s: CopyRates: erro u. FUNÇÃO. LastError) return (dAverageRange) se (iPriceBars lt iBarsLimit) se (LogLevel gt LOGLEVELNONE) PrintFormat (s: CopyRates: copiado u barras de você. FUNCTION. IPriceBars, iBarsLimit) // soma de intervalos: int iBar iPriceBars enquanto (iBar-- Gt 0) dAverageRange maRatesiBar. high maRatesiBar. low // valor médio: return (dAverageRange / double (iPriceBars)) Existe apenas um critério para os padrões a segunda quebra da barra (atual) da borda da faixa de ontem não deve ser menor do que a Especificado nas configurações (TS8020ExtremumBreak). Assim que o nível for atingido, aparecerá um sinal para colocar uma ordem pendente: // verifique os padrões 2ª barra (atual) em D1: se (sePossibleSignal ENTRYBUY) sdSL dSL maRates 1.low // StopLoss para o Today's High if (TS8020TakeProfitRatio gt 0) sdTP dTP dEntryLevel Point TS8020ExtremumBreak TS8020TakeProfitRatio // TakeProfit retorno (// é o breakward claramente visto ma tarifas 1.close lt maRates 0.low Point TS8020ExtremumBreak ENTRYBUY. ENTRYNONE) se (sePossibleSignal ENTRYSELL) sdSL dSL maRates 1.high // StopLoss para o hoje baixo se (TS8020TakeProfitRatio gt 0) sdTP dTP dEntryLevel Point TS8020ExtremumBreak TS8020TakeProfitRatio // TakeProfit retorno (// é o breakward acima claramente visto maRates 1.close gt maRates 0.high Point TS8020ExtremumBreak ENTRYSELL. ENTRYNONE) Salve os dois Funções mencionadas acima (feGetEntrySignal e fdAverageBarRange) e as configurações personalizadas relacionadas à recepção de um sinal para o arquivo da biblioteca mqh. A listagem completa está anexada abaixo. Permite nomear o arquivo Signal80-20.mqh e colocá-lo no diretório apropriado da pasta de dados do terminal (MQL5IncludeExpertSignal). Indicador para negociação manual Assim como o 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 de ordem de níveis calculados, tomar lucros e níveis de perda de parada. Um usuário pode selecionar um método de notificação, uma janela pop-up padrão, um alerta de e-mail ou uma notificação de envio. É 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 é para destacar as barras diárias correspondentes aos critérios do sistema e os 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ça o seguinte: quando o preço tocar 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. Essas linhas são interrompidas quando o preço toca um deles (a ordem é fechada). 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 (DRAWFILLING). O primeiro é destacar o intervalo de barras diárias completas do dia anterior, enquanto outro é para destacar a área interna apenas para separá-lo dos 20 superiores e inferiores do intervalo usado no TS. Depois disso, declare os dois buffers para a linha de sinal multicolorida e a linha de pedido pendente (DRAWCOLORLINE). Sua cor depende da direção comercial. Existem outras duas linhas (Take Proft e Stop Loss) com a cor restante do mesmo (DRAWLINE) para usar as mesmas cores padrão atribuídas a eles no terminal. Todos os tipos de exibição selecionados, com exceção de uma linha simples, requerem dois buffers cada, portanto, o código parece da seguinte maneira: Indicador de propriedade Indicador de propriedades da janela Indicadores 10 Planos de indicadores de propriedades 6 Indicador de propriedades1 1 barra de propriedade de padrão indicatortype1 DRAWFILLING property indicatorcolor1 clrDeepPink. ClrDodgerBlue property indicatorwidth1 1 indicador de propriedade1abel2 1ª barra da propriedade de padrão indicatortype2 DRAWFILLING property indicatorcolor2 clrDeepPink. ClrDodgerBlue propriedade indicatorwidth2 1 property indicatorabelabel Propriedade do nível do sinal indicatortype3 DRAWCOLORLINE propriedade indicatorstyle3 STYLESOLID property indicatorcolor3 clrDeepPink. ClrDodgerBlue propriedade indicatorwidth3 2 propriedade indicatorlabel4 Nível de entrada propriedade indicatortype4 DRAWCOLORLINE propriedade indicatorstyle4 STYLEDASHDOT propriedade indicatorcolor4 clrDeepPink. ClrDodgerBlue propriedade indicatorwidth4 2 propriedade indicatorlabel5 Stop Loss propriedade indicatortype5 DRAWLINE propriedade indicatorstyle5 STYLEDASHDOTDOT propriedade indicatorcolor5 clrCrimson propriedade indicatorwidth5 1 propriedade indicatorlabel6 Take Profit propriedade indicatortype6 DRAWLINE propriedade indicatorstyle6 STYLEDASHDOTDOT propriedade indicatorcolor6 clrLime propriedade indicatorwidth6 1 Permite aos comerciantes a capacidade de desativar o preenchimento dos padrões diários Primeira barra, selecione as opções de notificação de sinal e limite a profundidade de 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: incluir o sinal ltExpertSignalSignal80 - 20.mqhgt // 80-20 TS Entrada de módulo bool ShowOuter true // 1ª barra do padrão: Mostra a entrada de intervalo completo bool ShowInner true // 1ª barra do padrão: Mostra a entrada de área interna bool AlertPopup true // Alerta: Mostra uma entrada de janela pop-up Bool AlertEmail false // Alerta: Enviar uma string de entrada de e-mail AlertEmailSubj // Alerta: entrada de assunto de e-mail bool AlertPush true // Alerta: Enviar uma entrada de notificação de envio uint BarsLimit 2000 // Profundidade de layout de histórico (nas barras TF atuais) ENUMLOGLEVEL LogLevel LOGLEVELNONE // Modo de registro duplo buff1stBarOuter, buff1stBarOuterZero, // buffers para plotar a gama completa dos padrões 1 st bar buff1stBarInner, buff1stBarInnerZero, // buffers para traçar o interno 60 dos padrões 1 st bar buffSignal, buffSignalColor, // sinal BuffEntry BuffEntry, buffEntryColor, // buffEntry buffEntry, buffEntryColor // buffSL pendente buffSL, buffTP, // StopLoss e TakeProfit buffers de linhas gdExtremumBreak 0 // TS8020ExtremumBreak em preços de símbolos int giD1AveragePeriod 1. // valor correto para TS8020D1AveragePeriod giMinBars WRONGVALUE // número mínimo exigido de barras Para re-cálculo int OnInit () // verifique o parâmetro TS8020D1AveragePeriod inserido: giD1AveragePeriod int (fmin (1. TS8020D1AveragePeriod)) // pontos de conversão para preços de símbolos: gdExtremumBreak TS8020ExtremumBreak Point // número mínimo exigido de barras para o novo número de cálculo de Barras do TF atual dentro de um dia giMinBars int (86400 / PeriodSeconds ()) // buffers de indicadores objetivo: // 1 st bars retângulo de alcance completo SetIndexBuffer (0. buff1stBarOuter, INDICATORDATA) PlotIndexSetDouble (0. PLOTEMPTYVALUE. 0) SetIndexBuffer (1. buff1stBarOuterZero, INDICATORDATA) // 1ª barra do retângulo da área interna SetIndexBuffer (2. buff1stBarInner, INDICATORDATA) PlotIndexSetDouble (1. PLOTEMPTYVALUE.) SetIndexBuffer (3. buff1stBarInnerZero, INDICATORDATA) // linha de sinal SetIndexBuffer (4. BuffSignal, INDICATORDATA) PlotIndexSetDouble (2. PLOTEMPTYVALUE.) SetIndexBuffer (5. buffSignalColor, INDICATORCOLORINDEX) // linha de colocação de pedido pendente SetIndexBuffer (6. buffEntry, INDICATORDATA) PlotIndexSetDouble (3. PLOTEMPTYVALUE. 0) SetIndexBuffer (7. buffEntryColor, INDICATORCOLORINDEX) // linha SL SetIndexBuffer (8. buffSL, INDICATORDATA) PlotIndexSetDouble (4. PLOTEMPTYVALUE. 0) // linha TP SetIndexBuffer (9. buffTP, INDICATORDATA) PlotIndexSetDouble (5. PLOTEMPTYVALUE. 0) IndicatorSetInteger (INDICATORDIGITS. Digits) IndicatorSetString (INDICATORSHORTNAME. 80-20 TS) Coloque o código dos programas principais na função OnCalculate incorporada, organize o loop para iterar sobre o Barras de tempo atuais do passado para o futuro procurando-os para um sinal usando a função a partir do módulo de sinal. Declare e inicialize as variáveis ​​necessárias usando valores iniciais. Define a barra de loop mais antiga para o primeiro cálculo considerando um limite de profundidade de histórico definido pelo usuário (BarsLimit). Para chamadas subseqüentes, todas as barras do dia atual (em vez da última barra) são recalculadas, uma vez que o padrão de duas barras realmente pertence ao gráfico D1, independentemente do período de tempo atual. Além disso, devemos proteger contra os chamados phantoms: se não realizarmos um apagamento de buffers de indicadores forçados durante a reinicialização, as áreas preenchidas permanecem ainda mais na tela ao alternar prazos ou símbolos. A limpeza do buffer deve ser vinculada à primeira chamada de função OnCalculate após a inicialização do indicador. No entanto, a variável padrão pré-calculada não é suficiente para definir se a chamada é a primeira, uma vez que ela pode conter zero não apenas durante a primeira chamada de função, mas também ao alterar a soma de verificação. Permite passar algum tempo para resolver adequadamente este problema, criando a estrutura não afetada pela configuração da variável pré-calculada em zero. A estrutura é para armazenar e processar dados freqüentemente utilizados nos indicadores: - sinalizador do primeiro lançamento da função OnCalculate - o contador de barras calculadas que não está definido como zero ao alterar a soma de verificação - sinalizador de alteração da soma de verificação - sinalizador do início de Uma nova barra - hora de início da barra atual. A estrutura que combina todos esses dados deve ser declarada no nível global. Ele deve ser capaz de coletar ou apresentar dados de / para quaisquer funções integradas ou personalizadas. Vamos nomear esta estrutura Brownie. Pode ser colocado no final do código do indicador. Um único objeto de estrutura de tipo global chamado goBrownie também deve ser declarado: struct BROWNIE datetime tLastBarTime // hora da última barra processada int iPrewCalculado // número de barras calculadas bool bFirstRun // primeira bandeira de lançamento bool bHistoryUpdated // sinalizador de atualização do histórico Bool bIsNewBar // novo indicador de abertura de barra BROWNIE () // valores padrão: tLastBarTime 0 iPrewCalculado WRONGVALUE bFirstRun bIsNewBar true bHistoryUpdated false void fReset (bool bResetFirstRun true) // valores padrão: tLastBarTime 0 iPrewCalculado WRONGVALUE se (bResetFirstRun) bFirstRun true // set Para zero se houver permissão bIsNewBar true bHistoryUpdated falso void fUpdate (int iNewPrewCalculated WRONGVALUE) // sinalizador da função incorporada OnCalculate primeira chamada se (bFirstRun ampamp iPrewCalculated gt 0) bFirstRun false // nova data da barra tThisBarTime TimeCurrent () - TimeCurrent () PeriodSeconds () bIsNewBar tLastBarTime tThisBarTime // atualiza o tempo de barra atual i F (bIsNewBar) tLastBarTime tThisBarTime se (iNewPrewCalculated gt - 1) // há alguma alteração no histórico bHistoryUpdated iNewPrewCalculated 0 ampamp iPrewCalculated gt WRONGVALUE // use pré-calculado no caso de OnCalculate 1ª chamada se (iPrewCalculated WRONGVALUE) iPrewCalculado iNewPrewCalculado // ou se Não havia nenhuma atualização do histórico se (iNewPrewCalculated gt 0) iPrewCalculou iNewPrewCalculated BROWNIE goBrownie Permite informar o Brownie do evento de desinitiução do indicador: void OnDeinit (razão const int) goBrownie. fReset () // informar Brownie Se necessário, a quantidade de Os dados armazenados pelo Brownie podem ser expandidos se as funções ou classes personalizadas exigirem preços, volumes ou o valor atual do spread de barras (Open, High, Low, Close, tickvolume, volume, spread). É mais conveniente usar dados pré-fabricados da função OnCalculate e passá-los através de Brownie em vez de usar as funções de cópia da série temporal (CopyOpen, CopyHigh etc. ou CopyRates), isso economiza os recursos da CPU e elimina a necessidade de organizar o processamento de erros Dessas funções de linguagem. Voltamos à função principal do indicador. Declarar variáveis ​​e preparar as matrizes usando a estrutura goBrownie da seguinte maneira: goBrownie. fUpdate (prevcalculated) // feed data para Brownie int iPeriodBar 0. // contador auxiliar iCurrentTFBar ratestotal - int (BarsLimit) // índice de barras do loop TF atual Iniciar data estática stLastD1Bar 0 // hora da última barra processada do par de barras D1 (padrões 2 nd bar) static int si1stBarofDay 0 // índice dos dias atuais primeira barra se (goBrownie. bFirstRun) // limpar os buffers durante Re-inicialização: ArrayInitialize (buff1stBarInner, 0) ArrayInitialize (buff1stBarInnerZero, 0) ArrayInitialize (buff1stBarOuter, 0) ArrayInitialize (buff1stBarOuterZero, 0) ArrayInitialize (buffEntry, 0) ArrayInitialize (buffEntryColor, 0) ArrayInitialize (buffSignal, 0) ArrayInitialize (buffSignalColor, 0) ArrayInitialize (buffTP, 0) ArrayInitialize (buffSL, 0) stLastD1Bar 0 si1stBarofDay 0 else datetime tTime TimeCurrent () // profundidade mínima do re-cálculo - a partir do Dia anterior: iCurrentTFBar ratestotal - Bares (Símbolo. PERIODCURRENTE. TTime - tTime 86400. tTime) - 1 ENUMENTRYSIGNAL eSignal ENTRYUNKNOWN // sinal duplo dSL WRONGVALUE. // SL level dTP WRONGVALUE. // TP level dEntryLevel WRONGVALUE. // nível de entrada dRangeHigh WRONGVALUE. DRangeLow WRONGVALUE // bordas dos padrões 1 st bar range datetime tCurrD1Bar 0. // tempo atual da barra D1 (padrões 2 nd bar) tD1BarToFill 0 // D1 tempo da barra a ser preenchido (padrões 1 st bar) // certifique-se de que a inicial O índice da barra de cálculo está dentro do intervalo aceitável: iCurrentTFBar int (fmax (0. fmin (iCurrentTFBar, ratestotal - giMinBars))) enquanto (iCurrentTFBar lt o amplificador de ratestotal. IsStopped ()) // o loop do programa principal deve ser localizado aqui Check A presença de um sinal ao iterar sobre as barras de tempo atuais: eSignal feGetEntrySignal (Time iCurrentTFBar, dEntryLevel, dSL, dTP, dRangeHigh, dRangeLow) se (eSignal gt 1) continuar // nenhum sinal durante o dia em que a barra pertence Se existe Um sinal em um novo dia da primeira barra, o intervalo da barra diária anterior deve ser preenchido. O valor da variável tD1BarToFill do tipo datetime é usado como uma bandeira. Se for igual a WRONGVALUE, nenhum recheio é necessário nesta barra. A linha de sinal deve começar na mesma primeira barra, mas vamos estendê-la para a última barra do dia anterior para uma melhor percepção do layout. Uma vez que os cálculos de uma linha de sinal, bem como as cores de linha e preenchimento para barras de alta e baixa são diferentes, vamos fazer dois blocos semelhantes: tCurrD1Bar Time iCurrentTFBar Time iCurrentTFBar 86400 // início do dia em que a barra pertence se (stLastD1Bar lt tCurrD1Bar ) TD1BarToFill Time iCurrentTFBar 1 Time iCurrentTFBar 1 86400 si1stBarofDay iCurrentTFBar else tD1BarToFill WRONGVALUE // barra do dia anterior, sem preenchimento novo necessário stLastD1Bar tCurrD1Bar // lembrar se (tD1BarToFill WRONGVALUE) // Preencher os dias anteriores D1 bar: iPeriodBar iCurrentTFBar if (dEntryLevel lt dRangeHigh ) se (ShowOuter) enquanto (--iPeriodBar gt 0) if (Tempo iPeriodBar lt tD1BarToFill) quebrar buff1stBarOuterZeroiPeriodBar dRangeLow buff1stBarOuteriPeriodBar dRangeHigh se (ShowInner) iPeriodBar iCurrentTFBar enquanto (--iPeriodBar gt 0) if (Tempo iPeriodBar lt tD1BarToFill) quebrar buff1stBarInnerZeroiPeriodBar dRangeLow 0,2 (DRangeHigh dRangeLow) buff1stBarInneriPeriodBar dRangeH IGH 0,2 (dRangeHigh dRangeLow) // iniciar da linha de sinal a partir dos dias anteriores última barra buffSignaliCurrentTFBar buffSignaliCurrentTFBar 1 dRangeLow gdExtremumBreak buffSignalColoriCurrentTFBar buffSignalColoriCurrentTFBar 1 0 else if (ShowOuter) enquanto (--iPeriodBar gt 0) if (Tempo iPeriodBar lt tD1BarToFill) quebrar buff1stBarOuterZeroiPeriodBar dRangeHigh buff1stBarOuteriPeriodBar dRangeLow se (ShowInner) iPeriodBar iCurrentTFBar enquanto (--iPeriodBar gt 0) if (Tempo iPeriodBar lt tD1BarToFill) quebrar buff1stBarInnerZeroiPeriodBar dRangeHigh 0,2 (dRangeHigh dRangeLow) buff1stBarInneriPeriodBar dRangeLow 0,2 (dRangeHigh dRangeLow) // iniciar da linha de sinal a partir dos dias anteriores Ultimo bar buffSignaliCurrentTFBar buffSignaliCurrentTFBar 1 dRangeHigh gdExtremumBreak buffSignalColoriCurrentTFBar buffSignalColoriCurrentTFBar 1 1 mais continuar Todas as linhas de layout restantes devem ser plotadas dentro do loop de iteração de barras de intervalos de tempo atual. Como já mencionado, a linha de sinal deve terminar na barra onde o preço o tocou. A linha de pedido pendente deve começar na mesma barra e terminar na barra, na qual ocorre o contato com o preço. As linhas Take Benefit e Stop Loss devem começar na mesma barra. O layout do padrão é concluído na barra, na qual o preço toca um deles: // Linha de sinal até cruzada por uma barra: iPeriodBar iCurrentTFBar se (dEntryLevel lt dRangeHigh) enquanto (iPeriodBar lt ratestotal) if (Time iPeriodBar gt tCurrD1Bar 86399) quebrar buffSignaliPeriodBar dRangeLow gdExtremumBreak buffSignalColoriPeriodBar 0 if (dRangeLow gdExtremumBreak gt Baixa iPeriodBar) quebrar mais enquanto (ratestotal lt iPeriodBar) if (Tempo iPeriodBar gt tCurrD1Bar 86399) quebrar buffSignaliPeriodBar dRangeHigh gdExtremumBreak buffSignalColoriPeriodBar 1 if (dRangeHigh gdExtremumBreak lt alta iPeriodBar) quebrar // Entrada Linha até cruzada por uma barra: se (dEntryLevel lt dRangeHigh) enquanto (iPeriodBar lt ratestotal) se (Time iPeriodBar gt tCurrD1Bar 86399) quebre buffEntryiPeriodBar dRangeLow buffEntryColoriPeriodBar 0 se (dRangeLow lt High iPeriodBar) if (buffEntryiPeriodBar 1 0.) // start and Terminar em uma única barra, estender por 1 bar para o passado buffEntryiPeriodBar 1 dRangeLow buffEntryColoriPeriodBar 1 0 pause mais enquanto (iPeriodBar lt ratestotal) se (Time iPeriodBar gt tCurrD1Bar 86399) break buffEntryiPeriodBar dRangeHigh buffEntryColoriPeriodBar 1 se (dRangeHigh gt Low iPeriodBar) se (buffEntryiPeriodBar 1 0.) // iniciar e terminar em uma única barra, Estender por 1 bar para o passado buffEntryiPeriodBar 1 dRangeHigh buffEntryColoriPeriodBar 1 1 break // TP e SL linhas até um deles é atravessado por uma barra: se (dEntryLevel lt dRangeHigh) // SL é igual ao baixo desde o início de um dia : DSL Low ArrayMinimum (baixo. SetaBarofDay, iPeriodBar si1stBarofDay) enquanto (iPeriodBar lt ratestotal) se (Time iPeriodBar gt tCurrD1Bar 86399) romper buffSLiPeriodBar dSL buffTPiPeriodBar dTP se (dTP lt High iPeriodBar dSL gt Low iPeriodBar) se (buffSLiPeriodBar 1 0.) // iniciar e terminar em um único Barra, estenda por 1 barra para o passado buffSLiPeriodBar 1 dSL buffTPiPeriodBar 1 dTP break else // SL é igual ao Alto desde o início de um dia: dSL High ArrayMaximum (High. Si1stBarofDay, iPeriodBar si1stBarofDay) enquanto (iPeriodBar lt ratestotal) if (Time iPeriodBar gt tCurrD1Bar 86399) break buffSLiPeriodBar dSL buffTPiPeriodBar dTP se (dSL lt High iPeriodBar dTP gt Low iPeriodBar) se (buffSLiPeriodBar 1 0.) // iniciar e terminar em uma única barra, estender por 1 barra para o passado buffSLiPeriodBar 1 dSL BuffTPiPeriodBar 1 dTP break Permite colocar o código de chamada da função de notificação de sinal fDoAlert fora do loop. Na verdade, ele possui oportunidades ligeiramente maiores do que as envolvidas neste indicador, a função é capaz de trabalhar com arquivos de áudio, o que significa que esta opção pode ser adicionada às configurações personalizadas. O mesmo é verdade para a capacidade de selecionar arquivos separados para comprar e vender sinais. Lista de funções: void fDoAlert (// Função para enviar sinais e notificações string sMessage, // mensagem de alerta bool bAlert true. // mostrar uma janela pop-up bool bSound false. // reproduzir um arquivo de som bool bEmail falso. // enviar Um eMail bool bNotification false. // envie uma seqüência de notificação de envio sEmailSubject. // seqüência de assunto do eMail sSound alert. wav // arquivo de som) string estático ssPrevMessage houve silêncio // mensagem de alerta anterior data estática stPrevTime // previous alert time time TThisBarTime TimeCurrent () PeriodSeconds () PeriodSeconds () // tempo atual da barra se (ssPrevMessage sMessage stPrevTime tThisBarTime) // outro e / ou 1 desta barra // lembre-se: ssPrevMessage sMessage stPrevTime tThisBarTime // forma uma seqüência de mensagem: sMessage StringFormat (Ssss, TimeToString (TimeLocal (), TIMESECONDS), // símbolo da hora local. // símbolo StringSubstr (EnumToString (ENUMTIMEFRAMES (Período)), 7), // TF sMessage // mensagem) // activate notifica Sinal de indicação: se (bAlert) Alerta (sMessage) se (bEmail) SendMail (SEmailSubject Symbol). SMessage) se (bNotificação) SendNotification (sMessage) se (bSound) PlaySound (sSound) O código para verificar a necessidade de chamar a função e formar o texto para ele localizado no corpo do programa antes da conclusão do manipulador de eventos OnCalculate: // alert IPeriodBar ratestotal 1 // barra atual se (AlertPopup AlertEmail AlertPush 0) return (ratestotal) // tudo está desativado se (buffSignaliPeriodBar 0) retornar (ratestotal) // nada para pegar ainda (ou já) se (buffSignaliPeriodBar gt High iPeriodBar buffSignaliPeriodBar lt Low iPeriodBar) return (ratestotal) // sem linha de sinal tocando // texto da mensagem: string sMessage StringFormat (TS 80-20: ss necessário, TP: s, SL: s, buffSignalColoriPeriodBar gt 0. BuyStop. SellStop, DoubleToString (dEntryLevel, Digits), DoubleToString (dTP, Digits), DoubleToString (dSL, Digits)) // notificação: fDoAlert (sMessage, AlertPopup, false. AlertEmail, AlertPush, AlertEmailSubj) return (ratestotal) // completa operação OnCalculate O O código-fonte completo do indicador pode ser encontrado nos arquivos anexados (TS80-20.mq5). O layout de negociação de acordo com o sistema é melhor visto em gráficos de minutos. Observe que o indicador usa os dados da barra em vez das seqüências de tiques dentro das barras. Isso significa que se o preço cruzasse várias linhas de layout (por exemplo, Take Profit e Stop Loss) em uma única barra, você nem sempre pode definir qual delas foi cruzada primeiro. Outra incerteza decorre do fato de que as linhas de início e final não podem coincidir. Caso contrário, as linhas do buffer dos tipos DRAWLINE e DRAWCOLORLINE simplesmente serão invisíveis para um usuário. Esses recursos reduzem a precisão do layout, mas ainda permanecem bastante claros. Assessor especialista para testar a estratégia de negociação 80-20 A EA básica para testar estratégias do livro Street Smarts: Estratégias de negociação de curto prazo de alta probabilidade foi descrita em detalhes no primeiro artigo. Permite inserir duas mudanças significativas nela. 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 feGetEntrySignal function returns order placement, Stop Loss and Take Profit levels. Therefore, lets 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 todays 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 bool OneTrade false // One position per day input uint MagicNumber 2016 // EA magic number Lets add the variables necessary to implement one entry per day option to the programs global variables definition block. Initialize them in the OnInit function: string gsPrefix // identifier of (super)global variables bool gbPositionToday false , gbPendingToday false // Create a prefix of (super)global variable names: gsPrefix StringFormat ( SSB s u s. Symbol. MagicNumber, MQLInfoInteger ( MQLTESTER ). t . ) // Has the robot worked with market or pending orders today gbPositionToday int ( GlobalVariableGet (gsPrefix LastPositionDate )) TimeCurrent () TimeCurrent () 86400 gbPendingToday int ( GlobalVariableGet (gsPrefix LastPendingDate )) 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 todays signal has already been processed. Time is written to the variables in two places lets add the appropriate block to the pending order installation code (additions highlighted): if (iTry - 10 ) if (LogLevel gt LOGLEVELNONE) Print ( Pending order placing error ) // the distance from the current price is not enough :( if (LogLevel gt LOGLEVELERR) PrintFormat ( Pending order cannot be placed at the s level. Bid: s Ask: s StopLevel: s , DoubleToString (dEntryLevel, Digits ), DoubleToString (goTick. bid, Digits ), DoubleToString (goTick. ask, Digits ), DoubleToString (gdStopLevel, Digits ) ) else // to update the flag: GlobalVariableSet ( // in the terminal global variables gsPrefix LastPendingDate , TimeCurrent () TimeCurrent () 86400 ) gbPendingToday true // in the program global variables The second block is placed after the code defining a newly opened position: if ( PositionSelect ( Symbol )) if ( PositionGetDouble ( POSITIONSL ) 0 .) if (gbPositionToday) // update the flag: GlobalVariableSet ( // in the terminal global variables gsPrefix LastPositionDate , TimeCurrent () TimeCurrent () 86400 ) gbPositionToday 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 todays 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. Conclusion 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 todays 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.80 trading strategies for novice One and done. 1 contract on the TF. 82 ticks. Surpreendente. I love you. This thing is fking great. 0 today so far and playing by the rules. Forex Trading Strategy Session: The 80/20 Rule Explained: How To Hunt Stops 80 trading strategies for novice. Unlike some FCA firms, One Financial Markets does not mix client money with its own funds. One Financial Markets segregates client monies from its ownand does not use client funds for its own financing needs, thus providing additional comfort and protection to clients. 80 trading strategies for novice. 9/12/15, 7:55:48 AM ron covin: Scott Jaz is always a big help. She has a lot of patience, listens to the Nuances of your problem, knows how to9/12/15, 8:48:33 AM ron covin: Research solutions to your problem. We are testing a solution to my not receiving The Oil Money email. Jaz helped mewith better understanding Skype and general computer procedures. Jaz, as you well know, is a great asset to your organization. I really appreciate hertaking the time to help me. I really appreciate your taking the time to reply to my Skype message. Jaz spent two hours helping me. That is really atestimonial to your word about reading every email and going the extra mile to helping someone. I guess theres a message in all this about myignorance and maybe ineptitude however just having the opportunity to work with yourself and Jaz give me the inspiration and to work on and improve myweaknesses. I Learn something about myself, computers and your trading systems and philosophy each time I have the opportunity to experience yourinfluences. My many ways of showing my appreciation is just a small token of how much I appreciate my association with you and your staff. Thanksagain Scott. And also much thanks to Jaz. TTUL 9/12/15, 8:52:47 AM ron covin: The missing word in this dialogue is incentive. Thanks again forEVERYTHING. 80 trading strategies for novice - Read more Read more 80 trading strategies for novice The FCA is regarded by both consumers and financial service professionals as the pre-eminent financial regulatory body and is empowered under the UKGovernments Financial Services Markets Act to supervise and regulate financial services business in and from the United Kingdom. 80 trading strategies for novice. Forex Trading Strategies For Novice Traders. but if you want to make money you will have to spend much time to learn them and use in your trading strategy. All these properties contribute to form Fapturbo highly performing Forex trading autopilot tool. Traders are assured giant profitable rates methods, capitalization in the short term and long-term and thus success. I downloaded kstrat1 v3 yesterday and hit target real quick. this morning I turned it on around 807 and hit two winning trades and hit target. so intwo days made almost 4 on my account. needless to say I quit once goal was made. The most difficult part for me is quitting while winning buthaving done this for some time Ive had those days where I was way up and continued and finished down.80 trading strategies for novice. 80 trading strategies for novice. The address, which made its first appearance as the famous fictional detectives residence in the book A Study in Scarlet, doesnt appear in the recent BBC1 series. The actual 221B Baker Street is occupied by the Sherlock Holmes Museum, a small institution with awaxworks room, a drawing room well laid out in Victorian style, and a gift shop. This system is one among several forex robot software programs but the main big difference is truly that FAP Robot may be a foreign currency combinesoftware program which when it had been available came out with many other important options. The FAP Turbo48 is sometimes a abundant better releaseof the prior edition and also one among the encouraging software packages of its time. When it had been introduced its sales climbed to a lot of thanforty-three thousands copies. The particular bot was analyzed throughout the course of around six months. Watch 80 trading strategies for novice Final one for today. Just happened on DX - 90 Ticks - in the green box. 80 trading strategies for novice online. Just to let you know, I watched the 4 hrs of free instructions from The Oil Money over the weekend and traded sim on Monday. Ended up 0.00 after 2hrs. Tues I went live, but was cautious and made 0.00, Wed cleared .00 and Thurs 0.00. I have to go to my day job at 10:00 am central timeand have only a couple hrs to trade the usually crazy open on the Cl. I knew the information was making a difference in my trades and confidence inmaking those trades. By Fri I purchased the full program to get all I could to improve my knowledge. Im only on Day 2 as of now and am lookingforward to the next week of learning. I appreciate the 1 year membership here as part of the purchase of the program. Have not been to the chat orreally know what is available on this site yet. Thanks Scott for giving us all the opportunity to make a major change in our lives. Ive had myaccount for 3 or 4 months but have not been able to be truly profitable consistently. Im looking forward to financial freedom in My life. ThanksAgain.80 trading strategies for novice. Traded it live today by the bookscalped early in the day and after I had a good cushion took one last trade and allowed it to surf. Up ,070.00 onthe CL using 1 lot. I cant wait to get my hands on the Pivot Scalper. This program might just be the fix to my inconsistent trading behavior. 44 Eaton Square in well-to-do Belgravia serves for exterior shots of The Womans house. The interiors were, again, shot inNewport: in a private residence known as Fields House thats also been seen in episode Blink of Dr Who. Scott, you always have something new and informative. My account size is very small (2000.00) so Im working with currencies and only taking the bestfutures trades. Still taking one step forward one step backwards. Im thinking of taking a position trade for a few months or weeks and your teachingon fridays really help. Youre wonderful, keep up the great job of teaching. God bless.(80 trading strategies for novice online.) The phone box that you see in the image above was filled with hand-written notes commemorating the so-called death of Sherlock at theend of Series 2:

Comments

Popular posts from this blog

Forex 250 Dolar

250 USD Campanha de Garantia Forex Piyasasna salkl giri yapabilmek isteyenler na França, Itália, Reino Unido, Reino Unido, Itália. Kampanyaya Kayt Yaptrma art Vardr. Hesap atrdktan sonra teminat yatrmadan nce mteri temsilciniz ile iletiime geip kampanyaya kayt yaptmanz gerekmektedir. Kampanyaya kayt olduunuza dair onay e-maili geldikten sonra teminat yatrabilirsiniz. Nemli Não: 250dan fazla teminat yatranlara iade, bakiyesi 250n altna dtnde, 250a tamamlanarak yaplr. Ltfen aadaki rnekleri inceleyiniz. NÃO: Bu kampanya bir bonus kampanyas deildir. Forex eatrmlarn yapmak iin doru irketi arayan ve hala doru irketin ileyiine dair kanaat getirememi yatrmclarmz iin, denemeye deer bir olanaktr. Kampanya Kurallar: 1. Telefonda veya Yz Yze Eitimlerimize Katlma art Vardr. Eitimlerimiz sonunda tamanho verilecek olan kampanya kodu ile kampanyamzdan faydalanabilirsiniz. 2. Kampanya 31 Ekim 2016 tarihine kadar teminat yatran mteriler iin geerli olacaktr. 3. Sra. De Kampanya ilk defa teminat yatran he...

Sistema Estocástico Oscilador Comercial

Oscilador estocástico O oscilador estocástico é calculado usando a seguinte fórmula: C o preço de fechamento mais recente L14 o menor das 14 sessões de negociação anteriores H14 o preço mais alto negociado durante o mesmo período de 14 dias K a taxa de mercado atual para o par de moedas D 3 - média móvel média de K A teoria geral que serve de base para esse indicador é que, em um mercado tendendo para cima, os preços fecharão perto do alto, e em um mercado tendendo para baixo, os preços fecham perto da baixa. Os sinais de transação são criados quando o K atravessa uma média móvel de três períodos, que é chamado de D. O oscilador estocástico foi desenvolvido no final da década de 1950 por George Lane. Conforme projetado por Lane, o oscilador estocástico apresenta a localização do preço de fechamento de um estoque em relação ao alto e baixo alcance do preço de uma ação durante um período de tempo, geralmente um período de 14 dias. Lane, ao longo de inúmeras entrevistas, disse que o oscil...

Bollinger Bands 1 Min Scalping

Scalping as cartas de negociação GBP / USD e EUR / USD 5 min com Bollinger Bands. Esta estratégia funciona melhor em um ambiente de mercado vinculado ao alcance, caracterizado por bandas de Bollinger, quase planas, alinhadas horizontalmente. Indicadores: Bandas de Bollinger com configurações padrão de 20,22 Quadro (s) preferido (s): 5 min Sessões de negociação: EUR, pares de moeda preferencial dos EUA: GBP / USD, EUR / USD Gráfico GBP / USD: Estratégia Exemplo Bandas Bollinger precisa ser quase plana (Negociação de preços) O preço toca na posição inferior BOLTON BANDING BUY. Defina a perda de parada a 10 pips abaixo do preço de entrada. Feche o comércio na Banda superior de Bollinger. Bandas de Bollinger precisam ser quase planas (negociação em escala) O preço toca na posição superior Bollinger Band Open SELL. Defina a perda de parada em 10 pips acima do preço de entrada. Feche o comércio na Bollinger Band inferior. Estratégia Forex Scalping com Bollinger Bands. 6,7 fora de 10 com base...