Acho que o indicador precisa de ArraySetSeries (mf, true) e (ms, true) em OnInit () para funcionar corretamente.
Todos os operadores
if (flg == 0) / / initialise on first pass { ArrayInitialize (ag, EMPTY_VALUE); ArrayInitialize (bg, EMPTY_VALUE); ArrayInitialize (cg, EMPTY_VALUE); hi = 0; I = 0; trend = 0; flg = 1; }
seria mais eficaz em OnInit () e não teria que usar "flg"
A EA em relação... ao uso do MACD acha que o algoritmo da estratégia é simplificado assim:
Compra aberta: MACDcurrent>MACDprev && MACDcurrent<0; buyed = true.
Fechar compra: buyed && MACDcurrent<MACDprev && MACDcurrent>0; buyed = false
Para ações reversas de venda.
Se usarmos SL e TP quando não estivermos operando o EA, posso dizer "comprar" ou "vender" conforme a tendência (MA lenta) e esperar por um novo sinal.
Olá, não sei por que esse indicador: madelta_inc.mq5, não desenha nada quando eu o anexo ao gráfico. Anexei aqui uma imagem para que você possa ver o que estou dizendo. Também coloquei abaixo o código com a alteração sugerida por josemiguel1812 sobre não usar o sinalizador: 'flg', e mover parte do código para o evento OnInit(). Eu não usei: ArraySetAsSeries (mf, true) e ArraySetAsSeries (ms, true) porque tanto 'mf' quanto 'ms' são matrizes de apenas um elemento e acho que essa mudança não terá efeito, e o MT5 também não permite o uso dessa função para matrizes estáticas. Mas o que eu gostaria de saber é por que ele não desenha as linhas do indicador? Você poderia tentar o código a seguir e testá-lo?
Desde já agradeço, Cyberglassed.
//+------------------------------------------------------------------+ //|madelta_inc //|Direitos autorais 2013 Winston | //+------------------------------------------------------------------+ #property copyright "Winston 2013" #property version "1.10" #property description "madelta_inc" #property indicator_separate_window #property indicator_buffers 4 #property indicator_plots 3 #property indicator_type1 DRAW_COLOR_LINE #property indicator_color1 White,Yellow,Red #property indicator_style1 STYLE_SOLID #property indicator_width1 2 #property indicator_type2 DRAW_LINE #property indicator_color2 Yellow #property indicator_style2 STYLE_DOT #property indicator_width2 1 #property indicator_type3 DRAW_LINE #property indicator_color3 Red #property indicator_style3 STYLE_DOT #property indicator_width3 1 input double d = 0.00195; //delta input double m = 39.2; //mult input int F = 26; //média móvel rápida input ENUM_MA_METHOD FM = MODE_SMA; //modo de média rápida input ENUM_APPLIED_PRICE FP = PRICE_WEIGHTED; //modo de preço rápido input int S = 51; /média móvel lenta input ENUM_MA_METHOD SM = MODE_EMA; /modo médio lento input ENUM_APPLIED_PRICE SP = PRICE_MEDIAN; /modo de preço lento int Ms, Mf, trend; double px, hi, lo; double ms[1], mf[1]; double ag[], bg[], cg[], ac[]; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnInit() { SetIndexBuffer(0, ag, INDICATOR_DATA); ArraySetAsSeries(ag, true); //sinal SetIndexBuffer(1, ac, INDICATOR_COLOR_INDEX); ArraySetAsSeries(ac, true); //cor da tendência do sinal SetIndexBuffer(2, bg, INDICATOR_DATA); ArraySetAsSeries(bg, true); //hi limiar SetIndexBuffer(3, cg, INDICATOR_DATA); ArraySetAsSeries(cg, true); limiar //lo ArrayInitialize(ag, EMPTY_VALUE); ArrayInitialize(bg, EMPTY_VALUE); ArrayInitialize(cg, EMPTY_VALUE); hi = 0; lo = 0; trend = 0; Mf = iMA(NULL, PERIOD_H1, F, 0, FM, FP); Ms = iMA(NULL, PERIOD_H1, S, 0, SM, SP); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, // tamanho da matriz price[] const int prev_calculated, // barras tratadas em uma chamada anterior const int begin, // onde os dados significativos começam const double &price[]) // matriz para calcular { CopyBuffer(Mf, 0, 0, 1, mf); //valor da média móvel rápida CopyBuffer(Ms, 0, 0, 1, ms); /valor da média móvel lenta px = pow(m * (mf[0] - ms[0]), 3); //amplifique e cubra a diferença if (px > hi) { //identificar tendência hi = px; lo = hi - d; trend = 1; } if (px < lo) { //com mudança de cor lo = px; hi = lo + d; trend = 2; } ag[0] = px; bg[0] = hi; cg[0] = lo; ac[0] = trend; return (rates_total); } //+------------------------------------------------------------------+
Olá, não sei por que esse indicador: madelta_inc.mq5, não desenha nada quando eu o anexo ao gráfico. Anexei aqui uma imagem para que você possa ver o que estou dizendo. Também coloquei abaixo o código com a alteração sugerida por josemiguel1812 sobre não usar o sinalizador: 'flg', e mover parte do código para o evento OnInit(). Eu não usei: ArraySetAsSeries (mf, true) e ArraySetAsSeries (ms, true) porque tanto 'mf' quanto 'ms' são matrizes de apenas um elemento e acho que essa mudança não terá efeito, e o MT5 também não permite o uso dessa função para matrizes estáticas. Mas o que eu gostaria de saber é por que ele não desenha as linhas do indicador? Você poderia tentar o código a seguir e testá-lo?
Desde já, obrigado, Cyberglassed.
O que você espera? Somente os valores do índice 0 dos buffers do indicador são definidos.
Foi um pouco confuso para mim ver que sempre o índice 0 dos buffers era atribuído, então eu esperava que o ArraySetAsSeries tivesse alguma influência para mudar o comportamento intuitivo do que se poderia pensar (reverso) ou algo assim, sou iniciante no mql5. De qualquer forma, tive que reiniciar meu computador por algum outro motivo e tentei novamente o indicador, e agora ele desenha linhas como eu esperava no início. Anexei uma imagem.
Obrigado, Cyberglassed.
Foi um pouco confuso para mim ver que o índice 0 dos buffers era sempre atribuído, então eu esperava que o ArraySetAsSeries tivesse alguma influência para mudar o comportamento intuitivo do que se poderia pensar (reverso) ou algo assim, pois sou iniciante no mql5. De qualquer forma, tive que reiniciar meu computador por algum outro motivo e tentei novamente o indicador, e agora ele desenha linhas como eu esperava no início. Anexei uma imagem.
Obrigado, Cyberglassed.
Ou o código que você está executando não é o mesmo que o que você postou, ou seu terminal desenha dados provenientes de alguns buffers.
O código que você postou não pode produzir esse resultado.
Obrigado por seus comentários. O indicador talvez seja incomum, pois foi projetado para funcionar apenas com o testador de estratégia no modo de visulização.
No Navegador, clique com o botão esquerdo do mouse na EA e, em seguida, clique com o botão direito do mouse em Testar. No Testador de estratégias EURUSD, H1 e marque a caixa Visulização e, em seguida, Iniciar, o indicador deverá aparecer.
Informe-me sobre seu progresso.
Com os melhores cumprimentos
Winston
Há algo errado com esse EA. Quando tento operar em apenas um par de moedas, esse EA não faz nada durante 2 dias, o indicador às vezes mostra sinais de venda e compra ao mesmo tempo.
Quando tento operar em vários pares de moedas, ele faz a mesma coisa, mas observei que, quando fecho manualmente as posições, ele começa a operar novamente. Algo está muito errado com esse EA, algo está bloqueando a operação no Meta Trader 5
Quando o testei no testador de estratégias, tudo estava ok, mas quando tentei negociar, ele só abria posições e não as fechava, eu precisava fechá-las manualmente....
Alguém poderia consertar isso?
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Diferença de duas moving averages:
Este expert advisor foi desenvolvido depois de observar quando duas médias móveis se divergem e convergem, há geralmente uma diferença máxima entre os valores instantâneos das duas médias móveis antes das mudanças de tendência.
A diferença entre as duas médias móveis é amplificado por uma função cúbica de transferência não-linear para diferenciar entre excursões maiores e menores de zero. O passo final é um discriminador de nível simples com limites de altos e baixos que responde às principais maiores excursões antes da sinalização de uma mudança de tendência.
Autor: Winston