Cruzamento de 3 ma

 

Oi galera, tudo bem ? Acabei de começar a estudar mql5 e estou tendo problemas em fazer um programa de cruzamento de médias. Gostaria de fazer um cruzamento de 3 médias móveis..

Eu consigo fazer duas porém, na terceira estou tendo problemas. Para exemplificar melhor o meu problema, suponha que tenhamos uma Ma_rapida , Ma_médio e Ma_lenta.. Quando a lenta cruza com a média.. Gostaria de verificar se a mais rápida já cruzou a mais lenta dentro de um intervalo específico tipo 20 bars..

Como faço isso ??


Obrigado pela ajuda

Abraçao a todos

 
segue esqueleto do solicitado ( não testado)

if(newBar)                 // faça código p/dar valor ao newBar
{
  barNumber+=1;        

}


//|--------------------------------------------------------------------|//
// eventos entre Low e Fast
//|--------------------------------------------------------------------|//


if(maLow[1]>maFast[1])     // Low está sobre Fast

{
 if(LowSobreFast==false)    // Low não estava acima de Fast
 {
  LowSobreFast=true        // memo que Low ficou acima de Fast
  barNumber=1;             // reinicia contagem dos Bars
 }
}
else                      // Low está abaixo de Fast
{
 if(lowSobreFast==true)   // Low estava sobre Fast
 {
  LowSobreFast=false      // memo que Low ficou anaixo de Fast
   barNumber=1;            // reinicia contagem dos Bars
 }
}


//|-------------------------------------------------------------------|//

// eventos entre Low e Media
//|--------------------------------------------------------------------|//


if(

   maLow>maMedia            // Low foi acima da Media
   && lowAbaixoMedia==true  // antes estava abaixo, agora cruzou
  )
{
 lowAbaixoMedia=false;      // memo que Low não esta abaixo de Media
 fazerAlgo=true;            // já que cruzou, vai fazer algo, né?
}
if(
   maLow<maMedia            // Low foi abaixo da Media
   && lowAbaixoMedia==false // antes estava acima, agora cruzou
  )
{
 lowAbaixoMedia=true;       // memo que Low está abaixo de Media
 fazerAlgo=true;            // já que cruzou, vai fazer algo, né? }


//|-------------------------------------------------------------------|//

// finalizando o pgm
//|--------------------------------------------------------------------|//


if(fazerAlgo==true && barNumber>=20)   // passaram 20 Bars após cruzamento de Low c/ Fast

{
  // escreva aqui o que fazer, por exemplo:
  // fazer passeata com faixa de "I AM AGAINST THIS GOVERNMENT" :)
  fazerAlgo=false;                // false p/não executar este bloco antes de novo cruzamento
  barNumber=0;                  // se não quer repetir eventos dentro do mesmo cruzamento maLow x maFast + 20 bars
}

 

Sergio Gelli

 

Valeu mesmo pela ajuda .. vou testar .. estou tendo bastante dificuldades com mql, por que na verdade eu não sou programador .. sou matemático e não tenho muito esperiencia com programação OPP.

Mais isso já me ajudou a entender melhor a logica das coisas

 

Valeu 

Abs 

 

Ahh esqueci de pergunta..

Vc acha melhor criar como um indice(.mqh) .. e depois chamar no EA (.mq5) principal  ou fazer direto no EA (.mq5).

A principio eu estava fazendo como um indice .. mas não sei o  qu é melhor.

 

Outra coisa .. como faço o codigo do newBar.. ?? 

 

 

Abs 

 
francysouz:

Ahh esqueci de pergunta..

Vc acha melhor criar como um indice(.mqh) .. e depois chamar no EA (.mq5) principal  ou fazer direto no EA (.mq5).

A principio eu estava fazendo como um indice .. mas não sei o  qu é melhor.

 

Outra coisa .. como faço o codigo do newBar.. ?? 

 

 

Abs 

Não se sinta pequeno por não ser programador.
O MQL5 tem um manual com 5 mil páginas. Não é brincadeira nem exagero, é realidade mesmo!!!
Assim não tem quem se sinta seguro em programação.

Não acho importante fazer um .MQH, para simples detecção de cruzamento de MAs.

Nem tenho qualquer experiência nisso.

Mas qualquer trabalho em programação deve zelar para ser simples e direto, sem muitas chamadas, sem muitos enfeites.  Tudo em busca de eficiência e velocidade.

Segue o código para monitorar os Bars:


void OnTick()
{
 static datetime oldTime;
 datetime newTime[3];
 bool isNewBar=false;
 // copying the last bar time to the element newTime[0]
 int handle_copied=CopyTime(_Symbol,_Period,0,3,newTime);
 if(handle_copied>0)           // dados copiados com sucesso
 {
  if(oldTime!=newTime[0])      // se oldtime não é igual a hora atual
  {
   isNewBar=true;              // = true qdo é um novo Bar
   numBarPeriod+=1;            // pode contar aqui quantos bars
   oldTime=newTime[0];         // achamos um novo Bar, então memorizamos sua hora
  }
 }
 else                         // matriz com datas não funcionou
 {
  Comment("Erro ao copiar historical times data, error =",GetLastError());
  ResetLastError();
  return;
 }
 // ---------------------------------//
 // seu código deve ficar aqui
 // ---------------------------------//
}    // chave de enceram/do OnTick()
 
Sergio Gelli:
Não se sinta pequeno por não ser programador.
O MQL5 tem um manual com 5 mil páginas. Não é brincadeira nem exagero, é realidade mesmo!!!
Assim não tem quem se sinta seguro em programação.

Não acho importante fazer um .MQH, para simples detecção de cruzamento de MAs.

Nem tenho qualquer experiência nisso.

Mas qualquer trabalho em programação deve zelar para ser simples e direto, sem muitas chamadas, sem muitos enfeites.  Tudo em busca de eficiência e velocidade.

Segue o código para monitorar os Bars:


void OnTick()
{
 static datetime oldTime;
 datetime newTime[3];
 bool isNewBar=false;
 // copying the last bar time to the element newTime[0]
 int handle_copied=CopyTime(_Symbol,_Period,0,3,newTime);
 if(handle_copied>0)           // dados copiados com sucesso
 {
  if(oldTime!=newTime[0])      // se oldtime não é igual a hora atual
  {
   isNewBar=true;              // = true qdo é um novo Bar
   numBarPeriod+=1;            // pode contar aqui quantos bars
   oldTime=newTime[0];         // achamos um novo Bar, então memorizamos sua hora
  }
 }
 else                         // matriz com datas não funcionou
 {
  Comment("Erro ao copiar historical times data, error =",GetLastError());
  ResetLastError();
  return;
 }
 // ---------------------------------//
 // seu código deve ficar aqui
 // ---------------------------------//
}    // chave de enceram/do OnTick()

Cara valeu .. mesmo eu peguei esse manual .. é enorme mesmo .. mas achei muitas partes mal explicadas .. tipo poderia ter mais exemplos acho que isso ajudaria bastante .. 

valeu pelo programa e pela ajuda 

 

abs  

 

Pessoal, estou precisando de um indicador com 2 medias moveis, sendo:

1º Linha: Média/Período: 2  /  Deslocamento/Período: 2  /  Exponencial  /  Calculado Sobre: Abertura

2º Linha: Média/Período: 2  /  Deslocamento/Período: 1  /  Exponencial  /  Calculado Sobre: Fechamento

Tempo Gráfico: 1M e/ou 2M


Pode ser parametrizada apenas como estratégia, ou como robô, onde eu dê apenas a 1º ordem (compra/venda), e depois ele segue dando as entradas/saídas e reversão da ordem (após a saída), conforme o cruzamento das médias (para cima e/ou para baixo).


Espero ter sido claro em minha explanação.

Desde já agradeço pela apoio.

 
Adiliocorreia:


Aplicativos de negociação para o MetaTrader 5 por encomenda
Aplicativos de negociação para o MetaTrader 5 por encomenda
  • www.mql5.com
Preciso de um EA baseado em negociação de spreed de dois ativos EX: INDICE CHEIO e Mini indice , DOLAR CHEIO e Mini dolar detalhes no privado para MT5 que trabalhe em todas corretoras Bom dia. Preciso criar um robô " Preço de Fechamento de Reversão" para utilizar em mini indice e mini dolar para operações de swing trade utilizando graficos...
 

Boa tarde, pessoal.

Estou tentando criar meu primeiro indicador/robo baseado nas seguintes configuracoes:

- Compra quando cruzar a VWAP (somente compra e, claro, no sentido favoravel)

- Venda quando cruzar a EMA9 (somente venda...)

- Trailing Stop/ Stop Loss ajustável

- Uma unica operacao dentro de um candle de 60min de modo que perdeu ou ganhou, fecha posicao e so entra no proximo candle de 60min.

      Faz algum sentido essa estrategia? é possível implementar?

      Agradeco desde já. abraco.

Razão: