O indicador NRTR e os módulos de negociação baseados em NRTR para o Assistente MQL5.
Introdução.
Neste artigo, consideramos um indicador que cria um canal de preço dinâmico. Um Expert Advisor de negociação é criado com base nesse canal. Tais sistemas podem funcionar bem em períodos de tendência, mas dão muitos sinais falsos em movimentos planos. Portanto, são necessários indicadores adicionais de tendência. A escolha de um indicador apropriado não é uma tarefa fácil, e a escolha geralmente depende de condições específicas do mercado. Portanto, uma boa solução é fornecer a possibilidade de conectar rapidamente qualquer indicador selecionado a um sistema de negociação pronto.
É por isso que usaremos a seguinte abordagem. Vamos criar um módulo especial de sinais de negociação para o Assistente MQL5. Posteriormente, poderemos criar um módulo semelhante com base em qualquer indicador de tendência selecionado para produzir sinais Sim / Não indicando a presença ou ausência de uma tendência. Uma combinação de múltiplos módulos pode ser usada ao criar um sistema de negociação, para que possamos facilmente combinar vários indicadores.
O indicador NRTR.
A idéia do indicador NRTR (Nick Rypock Trailing Reverse) foi proposta por Konstantin Kopyrkin. Informação interessante: o nome Nick Rypock é derivado do sobrenome Kopyrkin escrito ao contrário.
Vamos voltar ao indicador. É um canal de preço dinâmico. O autor ilustra sua ideia principal com a seguinte figura:
Um sistema de negociação baseado no indicador NRTR pertence a estratégias de fuga. Um sinal de compra é gerado quando o preço excede a alta anterior registrada por um determinado período; um sinal de venda é gerado quando o preço cai abaixo de baixo. Durante a mudança de tendência, tais sistemas podem usar altas e baixas passadas da tendência anterior. Para evitar isso, o período de cálculo é definido dinamicamente em nosso sistema.
O autor definiu NRTR como um indicador de tendência de fuga de canal de preço dinâmico.
O princípio de operação do indicador é o seguinte: na tendência de alta, a linha do indicador (canal) é posicionada em um determinado nível abaixo do preço alto detectado em um intervalo de tempo especificado. A linha de tendência de baixa é posicionada acima dos preços, a uma distância constante do preço baixo registrado em um determinado intervalo de tempo.
O período do canal de preço usado para o cálculo do indicador é aumentado dinamicamente a partir da origem da tendência. Assim, o preço do período de cálculo anterior não afeta o indicador.
A figura mostra que o indicador segue primeiro a tendência a uma certa distância. Em seguida, o indicador está localizado a uma distância fixa das elevações locais H1 e H2. O H3 alto local é menor que o anterior e não é usado nos cálculos.
Então o preço quebra o canal no ponto L3. É um sinal de venda. O valor no ponto L3 é definido como um novo valor baixo. O novo período começa neste ponto, ou seja, todos os preços anteriores são redefinidos e não são usados em outros cálculos. Conforme a tendência se desenvolve, a baixa é atualizada para L3-L4-L5. O período do canal de preço dinâmico é estendido até que a tendência seja alterada ou a duração do período atinja o máximo permitido.
A largura do canal é calculada como uma porcentagem do valor extremo ou pode depender da volatilidade do preço. Ambas as abordagens são implementadas neste artigo.
Um sinal de compra / venda é gerado quando o preço rompe a linha do canal. Um sinal de compra é formado quando o preço quebra pela linha de suporte. Um sinal Sell é formado se a linha de resistência estiver quebrada.
Agora, precisamos traduzir a descrição dos princípios de operação do indicador para o MQL5. Vamos começar.
Escrevendo um indicador: do simples ao complexo.
Primeiro de tudo precisamos definir o comportamento do indicador. O indicador será baseado nos preços de fechamento. Os valores dos indicadores baseados nos dados do histórico são interpretados sem ambiguidade. Mas e se o preço quebrar a linha de suporte / resistência em um castiçal incompleto? Nesta versão, a tendência não é formada e, portanto, nenhum sinal é produzido até que a formação da vela seja concluída. Por um lado, podemos perder parte do movimento. Por exemplo, se o movimento começar com um enorme castiçal que interrompe o canal, uma posição só será aberta no próximo castiçal. Por outro lado, isso é uma proteção contra inúmeros falsos fugas.
NB: o indicador tem muita variação; a versão original proposta pelo autor é descrita neste artigo.
Uma implementação do indicador está disponível na CodeBase, mas seu período é apenas parcialmente dinâmico. O período é redefinido quando a tendência muda, mas pode ser estendido infinitamente em teoria. Ou seja a linha de suporte é calculada como MathMax () do valor anterior e o preço de fechamento atual. Nesse caso, a linha de suporte só pode estar subindo, enquanto a linha de resistência está sempre caindo. Na versão original, todos os valores anteriores são considerados obsoletos e, portanto, são ignorados. Aqui max / min são calculados como ArrayMaximum / Minimum (close, i, dynamic_period). Nesta abordagem, as linhas de suporte e resistência podem estar subindo e descendo. Portanto, a linha de suporte pode cair profundamente em alguns casos em movimentos lentos e laterais, quando os períodos dinâmicos são curtos. Mas essas tendências suaves de longo prazo são raras e nenhum método é ideal. Neste artigo, nos atemos à ideia original proposta pelo autor do indicador.
A próxima reserva está relacionada com timeseries. As séries de preços (fechadas) no MQL5 têm o valor padrão ArraySetAsSeries = false. As séries de preços no MQL4 têm um sinalizador de timeseries e seu valor Close [0] é o preço mais próximo da barra mais à direita (enquanto a barra mais à esquerda não é visível como regra). Por favor, note que neste artigo ArraySetAsSeries (fechar, verdadeiro).
Vamos agora proceder à implementação do indicador. Trabalharemos com quatro buffers de indicador: dois deles serão usados para linhas de suporte / resistência e os outros dois serão usados para sinais de compra e venda.
Vamos declarar buffers de indicador e parâmetros externos do indicador.
Os sinais indicadores aparecerão como setas no gráfico. Os parâmetros restantes são definidos na função OnInit (). Eu usei DRAW_ARROW com o parâmetro 236,238 dos caracteres de fonte Wingdings. Parâmetros do sinal "Up":
No início dos cálculos no OnCalculate (), verificamos a disponibilidade dos dados necessários e o início do cálculo do primeiro indicador.
As principais variáveis também são definidas aqui. Duas variáveis são definidas para os valores de tendência e canal. Uma dessas variáveis é estática. Uma variável estática armazenará o valor até o próximo ciclo de cálculo. A variável só mudará em uma barra completamente formada. Se o preço romper o canal em uma barra não formada, somente variáveis locais não estáticas serão alteradas. Se o preço retornar ao canal, a tendência anterior será preservada.
Agora vamos escrever o loop de cálculo principal levando em conta as observações descritas acima.
O período dinâmico neste loop é limitado a um valor especificado. Se o preço de fechamento romper o canal, novos valores de suporte e resistência serão encontrados e será realizada uma verificação se a tendência mudou. O último operador if () verifica se a barra está totalmente formada. Somente se a barra estiver completamente formada, os valores de trend_prev e value_prev serão atualizados e, portanto, um sinal de compra / venda poderá ser gerado. O período dinâmico também pode ser redefinido aqui.
O código do indicador completo está disponível no arquivo NRTR. mq5 anexado.
Vamos verificar a operação do indicador lançando em um gráfico dois NRTRs com parâmetros diferentes: o primeiro NRTR tem o período de 12 e a largura de 0,1%; o segundo período do NRTR é de 120 e a largura é de 0,2%.
A figura acima mostra que, se um período for pequeno, a linha de suporte pode estar subindo e descendo. Está ligado ao fato de que os valores de preço caem além do período dinâmico. Se o período for grande, a linha de suporte geralmente não é decrescente.
Volatilidade e NRTR.
Na abordagem anterior, usamos um percentual de desvio do canal de preço fixo. Uma solução mais lógica é expandir o canal quando a volatilidade aumenta e reduzi-lo quando a volatilidade cai. ATR (Average True Range) é um indicador popular para determinar a volatilidade do mercado. O valor do ATR pode ser usado para definir a largura do canal. Você pode calcular o valor de ATR por conta própria ou usar o indicador técnico padrão do terminal.
Vamos substituir a porcentagem de desvio pelo valor do indicador ATR para vincular a largura do canal à volatilidade do mercado. Um coeficiente ainda será usado para dimensionamento. Vamos defini-lo como 1 por padrão. Declaramos um buffer de indicador adicional para o indicador ATR: double Buff_ATR []. O parâmetro percent é substituído pelo coeficiente K = 1. Vamos criar um ponteiro para o ATR para receber seus valores:
O período de ATR pode diferir do período dinâmico ativo. Uma solução lógica é torná-los iguais, para que o número de parâmetros não seja alterado.
Aqui está o código das linhas recém-adicionadas.
Os valores da linha do canal são calculados usando o valor da fórmula = maxmin (+ -) K * Buff_ATR [i], respectivamente. O código completo do indicador está disponível no arquivo NRTRvolatile. mq5 anexado.
Vamos executar os dois indicadores com os mesmos parâmetros em um gráfico e comparar seu comportamento.
A figura mostra que, se a volatilidade é baixa e os valores de ATR são pequenos, a linha NRTR-volátil é quase "encaixada" nos gráficos de preços. Então, a linha se afasta do preço quando a volatilidade aumenta.
Agora vamos passar a criar um Expert Advisor baseado neste indicador. Como mencionado acima, usaremos um módulo de sinais de negociação.
Um módulo de negociação para o assistente MQL5.
Às vezes, é mais conveniente escrever esses módulos com base nos módulos existentes, usando o método copiar / colar. Mas no nosso caso, é melhor começar desde o início, em vez de descrever todos os lugares a serem substituídos ou modificados.
Abaixo está a estrutura comum de todos os módulos.
Descritor de módulo Parâmetros de negociação e funções de inicialização de parâmetros Verificação dos parâmetros de entrada Conexão de um indicador selecionado ao módulo Descrição da estratégia de negociação.
Primeiro de tudo, vamos criar uma subpasta separada na pasta de sinais para armazenar nossos próprios sinais. Por exemplo, incluir \ Expert \ MySignals. Clique com o botão direito na pasta selecionada e selecione "Novo arquivo" no menu de contexto. O Assistente MQL5 é aberto. Selecione "Nova classe" no menu. Chame isso de NRTRsignal. Todos os sinais são herdados da classe CExpertSignal base, então vamos indicar no Assistente.
Adicione o caminho para a classe base CExpertSignal ao código gerado pelo assistente: #include ".. \ ExpertSignal. mqh"
Esse foi o começo.
Agora precisamos criar um descritor de módulo para que o Assistente MQL5 reconheça esse código como um módulo de sinais.
O descritor começa com "início da descrição do assistente" e termina com "final da descrição do assistente". O nome do módulo e os parâmetros externos estão contidos no interior. Assim que compilarmos este módulo junto com o descritor, ele será adicionado ao menu do Assistente: Novo arquivo / Expert Advisor (gerar) / Parâmetros comuns / Propriedades de sinal do Expert Advisor / Add.
Vamos adicionar às nossas variáveis de classe para armazenar parâmetros externos e métodos para inicializá-los.
Os nomes dos métodos para inicializar parâmetros externos devem corresponder aos nomes dos parâmetros externos escritos no descritor.
Membros de classe são inicializados usando a lista de inicialização. Os métodos "privados" que foram gerados pelo Assistente podem ser substituídos por "protected", no entanto, não é necessário.
O método virtual ValidationSettings () do bool na classe CExpertBase permite verificar a exatidão das entradas.
Precisamos adicionar à nossa classe o protótipo do método e substituí-lo. Por exemplo, precisaremos verificar se o período é maior que um e o valor percentual do desvio é positivo.
Por favor, note que o método da classe base é chamado primeiro.
Em seguida, usamos o método InitIndicators () para conectar um indicador selecionado ao nosso módulo. Vamos criar o protótipo do método em nossa classe: InitIndicators bool virtuais (indicadores CIndicators *) e, em seguida, incluir sua descrição. Usaremos procedimentos padrão para verificar indicadores indicadores e inicializar indicadores e timeseries em filtros adicionais.
Vamos criar e inicializar o indicador na linha InitNRTR (indicadores). Também é necessário adicionar o protótipo e a descrição da função InitNRTR (indicadores).
O indicador é criado usando a estrutura MqlParam e o método Create ().
Nós preparamos o código requerido. Agora precisamos escrever um algoritmo de negociação. Vamos usar os métodos LongCondition () e ShortCondition (). Vamos adicionar métodos para receber sinais indicadores.
A função GetData () recebe o valor do buffer do indicador com base em seu índice e no índice de barras. O indicador já contém o sinal de inversão de tendência. É por isso que as condições para abertura de posição são simples. Compramos se o indicador gerar um sinal "para cima" e vender se um sinal "para baixo" for gerado.
Além de definir o algoritmo de negociação, essas funções definem suas características de comportamento. A função StartIndex () é usada.
A descrição da função virtual int StartIndex () contém a seguinte instrução: "O método retorna 0 se o sinalizador para analisar a barra atual estiver definido como true (análise da barra atual). Se o sinalizador não estiver definido, ele retornará 1 ( análise da última barra completada). " Nosso sistema só analisa sinais em uma barra completamente formada. A função StartIndex () retorna 1 por padrão, apenas de acordo com nossa estratégia. Esse recurso será refletido no Expert Advisor resultante como o parâmetro Expert_EveryTick definido como false.
O passo de criação do módulo de sinais de negociação está terminado.
Vamos usar o Strategy Tester para testar a operação do EA.
Além disso, vamos otimizar os parâmetros de negociação. Para otimização, usamos dados para 25.09.17 - 18.10.17 no EURUSD com o período H1. Apenas os seguintes parâmetros do indicador são otimizados: o período e a largura do canal. Os valores de Stop Loss e Take Profit estão definidos como 0.
A figura mostra o resultado para o período de 48 com a largura do canal configurada para 0,25%.
Combinando NRTR com diferentes indicadores de tendência.
Suponha que exijamos a confirmação dos nossos sinais indicadores. O indicador funciona bem durante a tendência, portanto, vamos adicionar um indicador de tendência. Neste artigo, fornecemos módulos de sinais prontos para uso do Assistente MQL5. Então, vamos continuar com o mesmo método e adicionar um indicador de tendência através de um módulo de sinais.
Identificar uma tendência não é uma tarefa fácil. Portanto, não discutiremos quais dos indicadores de tendência são melhores ou piores. Vamos escolher qualquer indicador de tendência padrão do terminal, porque nosso objetivo principal é elaborar uma técnica para conectar um indicador usando um módulo de negociação. Não estamos interessados no resultado da negociação nesta etapa.
Todas as etapas da criação do módulo foram descritas na seção anterior. Portanto, é mais conveniente usar o método "copiar / colar" aqui e avaliar suas vantagens. Vamos usar um módulo pronto e substituir as linhas necessárias.
Vamos escolher o indicador técnico ADX na categoria Tendência. O ponteiro CiADX especialmente reservado pode ser usado para se referir ao indicador, em vez do ponteiro para um indicador personalizado CiCustom. Consequentemente, existe uma maneira ligeiramente diferente de criá-lo através do método Create, e não é necessário especificar um caminho para ele.
O indicador tem apenas um parâmetro de período. Isso deve ser refletido nas funções de descrição de parâmetros e descritor de módulo. Também precisamos adicionar funções para obter os valores dos buffers do ADX.
Na verdade, passamos por todas as etapas descritas na seção de criação do módulo de negociação. Nós substituímos o NRTR por ADX quando necessário. Vamos usar as condições comerciais padrão descritas no indicador ADX sem verificá-las. O indicador clássico oferece as seguintes condições:
Compre se + DI & gt; - DI e ADX estiverem crescendo. Venda se + DI & lt; - DI e ADX estiver crescendo.
Este é o princípio básico. Nós geramos um sinal de compra, se pensarmos que o indicador mostra uma tendência de alta, um sinal de venda deve ser gerado se a tendência está caindo. O peso do sinal é definido para 100 por conveniência.
Vamos abrir o Assistente MQL5 novamente. Ao criar um Expert Advisor, escolha dois sinais de negociação, incluindo SignalNTRTR e ADXTrendSignal. Se vários sinais forem usados, seu valor médio é calculado. Portanto, atribuímos fatores de ponderação iguais a um para ambos os sinais. O valor limite para abertura é definido como 100. Todos os outros parâmetros, exceto o canal com, são redefinidos para zero. Lançamos o testador de estratégia para garantir que o Expert Advisor seja executado corretamente.
Conclusão.
Vamos resumir. Nós discutimos o indicador de tendência do breakout de canal de preço dinâmico NRTR. Duas versões do indicador foram desenvolvidas: aquela com um percentual fixo de desvio da linha de tendência dos extremos de preço e a outra com valores de desvios dependendo da volatilidade do mercado.
Ambas as versões do indicador estão anexadas abaixo. Um módulo de sinais de negociação foi criado com base no NRTR e um Expert Advisor foi gerado usando o Assistente MQL5.
O módulo indicador ADX foi criado para visualizar um exemplo de uso conjunto do indicador NRTR com indicadores de tendência. Um Expert Advisor de teste baseado em NRTR + ADX foi criado no Assistente MQL5. A combinação de NRTR + um indicador de tendência foi otimizada, porque a seleção de um indicador de tendência depende do usuário e não é descrita neste artigo. A abordagem é baseada em uma filosofia modular e combinacional.
Ao usar os arquivos anexados, certifique-se de especificar corretamente o caminho para indicadores e sinais de negociação de acordo com a pasta de instalação. Por exemplo, para SignalNRTR no meu caso:
Especifique o caminho de acordo com a pasta de instalação dos seus indicadores.
Os arquivos na pasta MQL5.zip estão localizados de acordo com os diretórios do MetaEditor.
Traduzido do russo por MetaQuotes Software Corp.
Especialista em negociação em tempo real.
Somos líderes de mercado no IDX Trading System. Especialista em Realtime Trading System. Vendedor Oficial IDX.
Negociação Remota.
Troca remota em tempo real para IDX. Usando Direct FIX Protocol para IDX. Incluindo Recurso de Comércio de Cópia.
Web Trading.
Negociação sem limite.
Executar em toda a plataforma do navegador.
Negociando até na TV. Dados em tempo real para IDX.
Comércio on-line.
Negocie em qualquer lugar e a qualquer momento. Plataforma de negociação de alta velocidade. Usando o protocolo FIX direto para enviar cerca de 2000 + ordem por segundo.
Negociação Mobile Android.
Negoceie na plataforma Android. Incluindo telefone e guia em qualquer tamanho. Disponível para o SmartWatch também.
Negociação Móvel iOS.
Negocie em qualquer plataforma iOS. Incluindo iPhone, iPad e iWatch.
Negociação de Mídia Social.
Negocie em qualquer telegrama e plataforma de linha.
Nenhum aplicativo adicional é necessário.
Atuar como atendimento ao cliente robótico.
Blackberry Mobile Trading.
Negocie em qualquer dispositivo Blackberry.
Acesso Direto ao Mercado (DMA)
Acessando o Mercado IDX de outro país. Recurso TWAP e VWAP disponível. Enviando Ordem em Tempo Real usando o Protocolo FIX.
Negociação Robótica.
Por favor, entre em contato conosco para mais informações.
Negociação de Simulação.
Negociação parece real.
Precisa de mais informação? Permaneça conectado.
Se você gosta de nossos recursos de produto e nosso portfólio, então você pode obter uma avaliação GRATUITAMENTE.
Contate-Nos.
PT FGS Infotama.
GP Plaza 15 º andar 15.
Jl. Gelora II No. 1, Slipi, Palmerah, Jakarta Selatan.
Horário comercial
Segunda a sexta: das 9h às 17h.
Sábado - Domingo: dia de folga.
&cópia de; 2010 - 2015 FGS Infotama. Todos os direitos reservados.
Negociação IDX não afetada pelo colapso do mezanino: OJK.
O Jakarta Post.
Favoritar esta página.
Compartilhe este artigo.
A Autoridade de Serviços Financeiros (OJK) disse que o colapso do mezanino na Bolsa de Valores da Indonésia (IDX) não afetou o comércio da bolsa.
O vice-comissário da OJK para gestão estratégica e logística, Anto Prabowo, disse que a agência havia sido informada pela administração do IDX de que todos os sistemas de informação estavam funcionando normalmente e que as transações ocorriam normalmente.
& ldquo; Não há interrupção na eletricidade e na rede. Todos os sistemas & ndash; JATS (Jakarta Automated Trading System), E-CLEARS (o sistema de compensação) e C-BEST (o sistema de liquidação) & ndash; são normais, & rdquo; Anto disse em um comunicado na segunda-feira.
Enquanto isso, a polícia informou que 72 pessoas ficaram feridas quando o mezanino do IDX entrou em colapso.
O mezanino da Torre 2 do complexo desmoronou às 11h55, horário local, durante uma visita de estudantes universitários, disse o porta-voz Argo Yuwono, segundo a Bloomberg.
O complexo da bolsa de valores é composto por duas torres de 32 andares, com a intacta Torre 1 concluída em 1994 e a danificada Torre 2 em 1998, de acordo com o site do desenvolvedor Sudirman Central Business District.
O prédio também abriga o escritório local do Banco Mundial, de acordo com o site da bolsa. A troca mudou para negociação automatizada em maio de 1995, limpando o pregão dos corretores. Presidente Joko & quot; Jokowi & quot; Widodo visitou a bolsa no último dia de negociação de 2017, sua terceira visita em um período de 6 meses. (bbn)
Comércio de Cesta.
O que é um 'Basket Trade'?
Uma negociação de cesta é uma ordem para comprar ou vender um grupo de valores mobiliários simultaneamente. A negociação de cestas é essencial para investidores institucionais e fundos de investimento que desejam manter um grande número de títulos em certas proporções. À medida que o dinheiro entra e sai do fundo, grandes cestas de títulos devem ser compradas ou vendidas simultaneamente, de modo que os movimentos de preços para cada título não alterem a alocação do portfólio. Para que uma negociação seja considerada uma "negociação de cesta", ela deve envolver a venda ou compra de 15 ou mais títulos.
QUEBRANDO 'Basket Trade'
Por exemplo, um fundo de índice tem como objetivo rastrear o seu índice alvo mantendo a maioria ou todos os títulos do índice. À medida que novos recursos chegam e podem aumentar o valor do fundo, a administração precisa comprar simultaneamente um grande número de títulos na proporção em que eles estão presentes no índice. Se não fosse possível realizar uma negociação de cesta básica sobre todos esses títulos, então os movimentos rápidos de preço dos títulos impediriam que o fundo indexado mantivesse os títulos nas proporções corretas.
O indicador NRTR e os módulos de negociação baseados em NRTR para o Assistente MQL5.
Introdução.
Neste artigo, consideramos um indicador que cria um canal de preço dinâmico. Um Expert Advisor de negociação é criado com base nesse canal. Tais sistemas podem funcionar bem em períodos de tendência, mas dão muitos sinais falsos em movimentos planos. Portanto, são necessários indicadores adicionais de tendência. A escolha de um indicador apropriado não é uma tarefa fácil, e a escolha geralmente depende de condições específicas do mercado. Portanto, uma boa solução é fornecer a possibilidade de conectar rapidamente qualquer indicador selecionado a um sistema de negociação pronto.
É por isso que usaremos a seguinte abordagem. Vamos criar um módulo especial de sinais de negociação para o Assistente MQL5. Posteriormente, poderemos criar um módulo semelhante com base em qualquer indicador de tendência selecionado para produzir sinais Sim / Não indicando a presença ou ausência de uma tendência. Uma combinação de múltiplos módulos pode ser usada ao criar um sistema de negociação, para que possamos facilmente combinar vários indicadores.
O indicador NRTR.
A idéia do indicador NRTR (Nick Rypock Trailing Reverse) foi proposta por Konstantin Kopyrkin. Informação interessante: o nome Nick Rypock é derivado do sobrenome Kopyrkin escrito ao contrário.
Vamos voltar ao indicador. É um canal de preço dinâmico. O autor ilustra sua ideia principal com a seguinte figura:
Um sistema de negociação baseado no indicador NRTR pertence a estratégias de fuga. Um sinal de compra é gerado quando o preço excede a alta anterior registrada por um determinado período; um sinal de venda é gerado quando o preço cai abaixo de baixo. Durante a mudança de tendência, tais sistemas podem usar altas e baixas passadas da tendência anterior. Para evitar isso, o período de cálculo é definido dinamicamente em nosso sistema.
O autor definiu NRTR como um indicador de tendência de fuga de canal de preço dinâmico.
O princípio de operação do indicador é o seguinte: na tendência de alta, a linha do indicador (canal) é posicionada em um determinado nível abaixo do preço alto detectado em um intervalo de tempo especificado. A linha de tendência de baixa é posicionada acima dos preços, a uma distância constante do preço baixo registrado em um determinado intervalo de tempo.
O período do canal de preço usado para o cálculo do indicador é aumentado dinamicamente a partir da origem da tendência. Assim, o preço do período de cálculo anterior não afeta o indicador.
A figura mostra que o indicador segue primeiro a tendência a uma certa distância. Em seguida, o indicador está localizado a uma distância fixa das elevações locais H1 e H2. O H3 alto local é menor que o anterior e não é usado nos cálculos.
Então o preço quebra o canal no ponto L3. É um sinal de venda. O valor no ponto L3 é definido como um novo valor baixo. O novo período começa neste ponto, ou seja, todos os preços anteriores são redefinidos e não são usados em outros cálculos. Conforme a tendência se desenvolve, a baixa é atualizada para L3-L4-L5. O período do canal de preço dinâmico é estendido até que a tendência seja alterada ou a duração do período atinja o máximo permitido.
A largura do canal é calculada como uma porcentagem do valor extremo ou pode depender da volatilidade do preço. Ambas as abordagens são implementadas neste artigo.
Um sinal de compra / venda é gerado quando o preço rompe a linha do canal. Um sinal de compra é formado quando o preço quebra pela linha de suporte. Um sinal Sell é formado se a linha de resistência estiver quebrada.
Agora, precisamos traduzir a descrição dos princípios de operação do indicador para o MQL5. Vamos começar.
Escrevendo um indicador: do simples ao complexo.
Primeiro de tudo precisamos definir o comportamento do indicador. O indicador será baseado nos preços de fechamento. Os valores dos indicadores baseados nos dados do histórico são interpretados sem ambiguidade. Mas e se o preço quebrar a linha de suporte / resistência em um castiçal incompleto? Nesta versão, a tendência não é formada e, portanto, nenhum sinal é produzido até que a formação da vela seja concluída. Por um lado, podemos perder parte do movimento. Por exemplo, se o movimento começar com um enorme castiçal que interrompe o canal, uma posição só será aberta no próximo castiçal. Por outro lado, isso é uma proteção contra inúmeros falsos fugas.
NB: o indicador tem muita variação; a versão original proposta pelo autor é descrita neste artigo.
Uma implementação do indicador está disponível na CodeBase, mas seu período é apenas parcialmente dinâmico. O período é redefinido quando a tendência muda, mas pode ser estendido infinitamente em teoria. Ou seja a linha de suporte é calculada como MathMax () do valor anterior e o preço de fechamento atual. Nesse caso, a linha de suporte só pode estar subindo, enquanto a linha de resistência está sempre caindo. Na versão original, todos os valores anteriores são considerados obsoletos e, portanto, são ignorados. Aqui max / min são calculados como ArrayMaximum / Minimum (close, i, dynamic_period). Nesta abordagem, as linhas de suporte e resistência podem estar subindo e descendo. Portanto, a linha de suporte pode cair profundamente em alguns casos em movimentos lentos e laterais, quando os períodos dinâmicos são curtos. Mas essas tendências suaves de longo prazo são raras e nenhum método é ideal. Neste artigo, nos atemos à ideia original proposta pelo autor do indicador.
A próxima reserva está relacionada com timeseries. As séries de preços (fechadas) no MQL5 têm o valor padrão ArraySetAsSeries = false. As séries de preços no MQL4 têm um sinalizador de timeseries e seu valor Close [0] é o preço mais próximo da barra mais à direita (enquanto a barra mais à esquerda não é visível como regra). Por favor, note que neste artigo ArraySetAsSeries (fechar, verdadeiro).
Vamos agora proceder à implementação do indicador. Trabalharemos com quatro buffers de indicador: dois deles serão usados para linhas de suporte / resistência e os outros dois serão usados para sinais de compra e venda.
Vamos declarar buffers de indicador e parâmetros externos do indicador.
Os sinais indicadores aparecerão como setas no gráfico. Os parâmetros restantes são definidos na função OnInit (). Eu usei DRAW_ARROW com o parâmetro 236,238 dos caracteres de fonte Wingdings. Parâmetros do sinal "Up":
No início dos cálculos em OnCalculate (), verificamos a disponibilidade dos dados necessários e o início do cálculo do primeiro indicador.
As principais variáveis também são definidas aqui. Duas variáveis são definidas para os valores de tendência e canal. Uma dessas variáveis é estática. Uma variável estática armazenará o valor até o próximo ciclo de cálculo. A variável só mudará em uma barra completamente formada. Se o preço romper o canal em uma barra não formada, somente variáveis locais não estáticas serão alteradas. Se o preço retornar ao canal, a tendência anterior será preservada.
Agora vamos escrever o loop de cálculo principal levando em conta as observações descritas acima.
O período dinâmico neste loop é limitado a um valor especificado. Se o preço de fechamento romper o canal, novos valores de suporte e resistência serão encontrados e será realizada uma verificação se a tendência mudou. O último operador if () verifica se a barra está totalmente formada. Somente se a barra estiver completamente formada, os valores de trend_prev e value_prev serão atualizados e, portanto, um sinal de compra / venda poderá ser gerado. O período dinâmico também pode ser redefinido aqui.
O código do indicador completo está disponível no arquivo NRTR. mq5 anexado.
Vamos verificar a operação do indicador lançando em um gráfico dois NRTRs com parâmetros diferentes: o primeiro NRTR tem o período de 12 e a largura de 0,1%; o segundo período do NRTR é de 120 e a largura é de 0,2%.
A figura acima mostra que, se um período for pequeno, a linha de suporte pode estar subindo e descendo. Está ligado ao fato de que os valores de preço caem além do período dinâmico. Se o período for grande, a linha de suporte geralmente não é decrescente.
Volatilidade e NRTR.
Na abordagem anterior, usamos um percentual de desvio do canal de preço fixo. Uma solução mais lógica é expandir o canal quando a volatilidade aumenta e reduzi-lo quando a volatilidade cai. ATR (Average True Range) é um indicador popular para determinar a volatilidade do mercado. O valor ATR pode ser usado para definir a largura do canal. Você pode calcular o valor de ATR por conta própria ou usar o indicador técnico padrão do terminal.
Vamos substituir a porcentagem de desvio pelo valor do indicador ATR para vincular a largura do canal à volatilidade do mercado. Um coeficiente ainda será usado para dimensionamento. Vamos defini-lo como 1 por padrão. Declaramos um buffer de indicador adicional para o indicador ATR: double Buff_ATR []. O parâmetro percent é substituído pelo coeficiente K = 1. Vamos criar um ponteiro para o ATR para receber seus valores:
O período de ATR pode diferir do período dinâmico ativo. Uma solução lógica é torná-los iguais, para que o número de parâmetros não seja alterado.
Aqui está o código das linhas recém-adicionadas.
Os valores da linha do canal são calculados usando o valor da fórmula = maxmin (+ -) K * Buff_ATR [i], respectivamente. O código completo do indicador está disponível no arquivo NRTRvolatile. mq5 anexado.
Vamos executar os dois indicadores com os mesmos parâmetros em um gráfico e comparar seu comportamento.
A figura mostra que, se a volatilidade é baixa e os valores de ATR são pequenos, a linha NRTR-volátil é quase "encaixada" nos gráficos de preços. Então, a linha se afasta do preço quando a volatilidade aumenta.
Agora vamos passar a criar um Expert Advisor baseado neste indicador. Como mencionado acima, usaremos um módulo de sinais de negociação.
Um módulo de negociação para o assistente MQL5.
Às vezes, é mais conveniente escrever esses módulos com base nos módulos existentes, usando o método copiar / colar. But in our case, it's better to start from the very beginning instead of describing all places to be replaced or modified.
Below is the common structure of all modules .
Module descriptor Trading parameters and parameter initialization functions Checking input parameters Connecting a selected indicator to the module Description of the trading strategy.
First of all, let's create a separate sub-folder in the signals folder to store our own signals. For example, Include\Expert\MySignals. Right-click the selected folder and select "New File" in the context menu. The MQL5 Wizard opens. Select "New class" from the menu. Call it NRTRsignal. All signals are inherited from the base CExpertSignal class, so let's indicate it in the Wizard.
Add the path to the CExpertSignal base class to the code generated by the Wizard: #include "..\ExpertSignal. mqh"
That was the beginning.
Now we need to create a module descriptor so that the MQL5 Wizard could recognize this code as a module of signals.
The descriptor starts with " wizard description start" and ends with " wizard description end" . The module name and external parameters are contained inside. As soon as we compile this module together with the descriptor, it will be added to the Wizard menu: New file/Expert Advisor (generate)/Common parameters/Signal properties of the Expert Advisor/Add.
Let's add to our class variables for storing external parameters and methods for initializing them.
The names of methods for initializing external parameters must match the names of external parameters written in the descriptor.
Class members are initialized using the initialization list. The "private" methods that were generated by the Wizard can be replaced with "protected", however it is not necessary.
The virtual bool ValidationSettings() method in the CExpertBase class allows checking the correctness of inputs.
We need to add to our class the method prototype and override it. For example, we will need to verify that the period is greater than one and the deviation percent value is positive.
Please note that the base class method is called first.
Next, we use the InitIndicators() method for connecting a selected indicator to our module. Let's create the method prototype in our class: virtual bool InitIndicators(CIndicators *indicators), and then add its description. We will use standard procedures for checking indicator pointers and initialize indicators and timeseries in additional filters.
Let's create and initialize the indicator in the InitNRTR(indicators) line. It is also necessary to add the prototype and description of the InitNRTR(indicators) function .
The indicator is created using the MqlParam structure and the Create() method.
We have prepared the required code. Now we need to write a trading algorithm. Let's use the LongCondition() and ShortCondition() methods. Let's add methods for receiving indicator signals.
The GetData() function receives the value of the indicator buffer based on its index and the bar index. The indicator already contains the trend reversal signal. That is why conditions for position opening are simple. We buy if the indicator generates an "up" signal and sell if a "down" signal is generated.
In addition to defining the trading algorithm, these functions set its behavior characteristics. The StartIndex() function is used.
The description of the virtual int StartIndex() function contains the following statement : " The method returns 0 if the flag to analyze current bar is set to true (analysis from the current bar). If the flag is not set, it returns 1 (analysis from the last completed bar)." Our system only analyzes signals on a completely formed bar. The StartIndex() function returns 1 by default, just in accordance with our strategy. This feature will be reflected in the resulting Expert Advisor as the parameter Expert_EveryTick set to false.
The step of creation of the trading signals module is finished.
Let's use the Strategy Tester to test the EA operation.
In addition, let's optimize trading parameters. For optimization, we use data for 25.09.17 — 18.10.17 on EURUSD with the H1 timeframe. Only the following indicator parameters are optimized: the period and width of the channel. Stop Loss and Take Profit values are set to 0.
The figure shows the result for the period of 48 with the channel width set to 0.25%.
Combining NRTR with Different Trend Indicators.
Suppose, we require the confirmation of our indicator signals. The indicator works well during trend, therefore let's add a trend indicator. In this article we provide ready-to use signals modules from the MQL5 Wizard. So, let's proceed with the same method and add a trend indicator though a signals module.
Identifying a trend is not an easy task. Therefore, we will not discuss which of the trend indicators are better or worse. Let's choose any standard trend indicator from the terminal, because our main goal is to work out a technique for connecting an indicator using a trading module. We are not interested in the trading result at this step .
All steps of module creation were described in the previous section. Hence, it is more convenient to use the "copy/paste" method here and to evaluate its advantages. Let's use a ready module and replace the necessary lines.
Let's choose the ADX technical indicator from the Trend category. The specially reserved CiADX pointer can be used to refer to the indicator, instead of the pointer to a custom indicator CiCustom. Accordingly, there is a slightly different way to create it through the Create method, and it is not necessary to specify a path to it.
The indicator has only one parameter of period. It should be reflected in the module descriptor and parameter setting functions. We also need to add functions for obtaining the values of ADX buffers.
We actually pass through all steps described in the trading module creation section. We replace NRTR with ADX where necessary. Let's use standard trading conditions described in the ADX indicator without checking them. The classical indicator offers the following conditions:
Buy if +DI >-DI and ADX is growing. Sell if +DI <-DI and ADX is growing.
This is the basic principle. We generate a buy signal, if we think that the indicator shows an uptrend, a sell signal should be generated if the trend is falling. The signal weight is set to 100 for convenience.
Let's open the MQL5 Wizard again. When creating an Expert Advisor, choose two trading signals, including SignalNTRTR and ADXTrendSignal. If multiple signals are used, their average value is calculated. Therefore we assign weight factors equal to one to both signals. The threshold value for opening is set to 100. All other parameters except for the channel with are reset to zero. We launch the Strategy tester to make sure that the Expert Advisor runs correctly.
Conclusão.
Let's sum up. We have discussed the trend indicator of dynamic price channel breakout NRTR. Two versions of the indicator have been developed: the one with a fixed percent of trendline deviation from price extremes and the other one with deviations values depending on the market volatility.
Both versions of the indicator are attached below. A module of trading signals has been created based on NRTR, and an Expert Advisor has been generated using the MQL5 Wizard.
The ADX indicator module has been created to visualize an example of a joint use of the NRTR indicator with trend indicators. A test Expert Advisor based on NRTR + ADX has been created in the MQL5 Wizard. The combination of NRTR + a trend indicator has been optimized, because the selection of a trend indicator is up to the user and is not described in this article. The approach is based on a modular and combinational philosophy.
When using the attached files, make sure to correctly specify the path to indicators and trading signals in accordance with their installation folder. For example, for SignalNRTR in my case:
Specify the path in accordance with the installation folder of your indicators.
Files in the MQL5.zip folder are located in accordance with MetaEditor directories.
Traduzido do russo por MetaQuotes Software Corp.
Idx trading system
A Bolsa de Valores de Jacarta (JSX) e a Bolsa de Valores de Surabaya (SSX) se fundiram em 1º de dezembro de 2007 para formar a Bolsa de Valores da Indonésia (IDX). A fusão visava melhorar a eficiência do mercado, a liquidez e a competitividade geral.
Antes da fusão, o SSX era a única bolsa na Indonésia a negociar títulos (corporativos, governamentais e de varejo). Retail bonds were launched on the SSX in August 2006, while the trading of government bonds—at a minimum of IDR5 million—was permitted beginning in May 2007.
O IDX mantém o sistema SSX para transações de títulos:
O Sistema de Negociação de Renda Fixa (FITS) é um sistema de negociação sem títulos para títulos listados, incluindo títulos de varejo. O FITS utiliza a plataforma do sistema de negociação de valores mobiliários automatizada, que permite negociações remotas entre participantes do mercado; e a Plataforma de Comercialização Centralizada, que foi inaugurada em setembro de 2006, garante que todas as transações de títulos sejam reportadas no máximo uma hora após a transação ter sido feita. Isso permite maior transparência de preços de títulos.
O FITS do IDX fornece aos membros acesso a seus dois quadros de negociação:
o Regular Outright Board é um mecanismo de negociação de bônus que estabelece um leilão contínuo entre compradores e vendedores com base no preço e no prazo de mercado; e a Diretoria Negociada é uma unidade comercial que permite que os membros da IDX divulguem os resultados das transações comerciais negociadas com outra parte.
The Ministry of Finance (MOF) has the authority to issue government debt securities, including treasury bonds and treasury bills. O Bank Indonesia (BI) gerencia a emissão de notas do Sertifikat Bank Indonesia (SBI), que são certificados bancários de curto prazo.
A Associação de Mercado Inter-Revendedores de Valores Mobiliários do Governo (HIMDASUN) foi criada em março de 2003 para aumentar a liquidez do mercado de títulos secundários, facilitando a informação sobre preços.
O mercado secundário de títulos corporativos é subdesenvolvido na Indonésia porque os detentores de títulos geralmente mantêm seus títulos até o vencimento. A negociação de títulos corporativos é facilitada pelo FITS do IDX.
Sede do ADB: 6 ADB Avenue, Mandaluyong City 1550, Metro Manila, Filipinas.
Комментариев нет:
Отправить комментарий