Discussão do artigo "Relembrando a antiga estratégia de tendência: dois osciladores estocásticos, MA e Fibonacci"

 

Novo artigo Relembrando a antiga estratégia de tendência: dois osciladores estocásticos, MA e Fibonacci foi publicado:

Estratégias de negociação tradicionais. Neste artigo, vamos explorar uma estratégia de acompanhamento de tendências. Essa abordagem é totalmente baseada em análise técnica e faz uso de vários indicadores e ferramentas para gerar sinais e identificar metas de negociação. Os elementos-chave dessa estratégia incluem um oscilador estocástico de 14 períodos, um oscilador estocástico de cinco períodos, uma média móvel de 200 períodos e uma projeção de Fibonacci (para determinar as metas de negociação).

As regras da estratégia são as seguintes:

  • Um sinal de compra é gerado sempre que ambos os osciladores estocásticos atingem simultaneamente o nível de sobrevenda, fazem um rebote e depois retornam a ele (aproximadamente ao mesmo tempo). Tudo isso deve acontecer enquanto o mercado estiver acima da média móvel de 200 períodos. O primeiro nível-alvo é definido usando a projeção de Fibonacci, aplicada a partir do mínimo da primeira vez que os osciladores estocásticos atingiram o fundo e do mínimo da segunda vez que atingiram o fundo. Logo, o primeiro alvo é a projeção de 61,8%, e o segundo alvo é a projeção de 100,0%.
  • Um sinal de venda é gerado sempre que ambos os osciladores estocásticos atingem simultaneamente o nível de sobrecompra, fazem um rebote e depois retornam a ele (aproximadamente ao mesmo tempo). Tudo isso deve acontecer enquanto o mercado estiver abaixo da média móvel de 200 períodos. O primeiro nível-alvo é definido usando a projeção de Fibonacci, aplicada a partir do máximo da primeira vez que os osciladores estocásticos atingiram o topo e do máximo da segunda vez que atingiram o topo. Logo, o primeiro alvo é a projeção de 61,8%, e o segundo alvo é a projeção de 100,0%.

(Fiz alterações na estratégia para incluir níveis de stop em cada nível de Fibonacci)

A figura a seguir mostra um sinal de baixa:

bearish


Em última análise, os resultados podem variar de mercado para mercado, e os resultados atuais podem ser instáveis. Há estratégias que funcionam em determinados períodos, mas podem ser ineficazes em outros.

Autor: Javier Santiago Gaston De Iriarte Cabrera

 

Esse é provavelmente o artigo que li com o pior código que já vi, sem intenção de ofender, apenas fatos. Nunca use isso em uma conta ativa.

   int Highest = iHighest(Symbol(),my_timeframe,MODE_REAL_VOLUME,WHOLE_ARRAY,1);

O que você acha que isso está fazendo?

Não há dados reais de volume na maioria dos símbolos, exceto em futuros e ações. No Forex, isso sempre retornará 1. O mais alto é sempre = 1.

Então, você está usando esse índice (o mais alto obtido no volume real) para obter um valor alto:

   double highestValue = iHigh(Symbol(),my_timeframe,Highest);

Você está misturando coisas que não deveriam ser misturadas (a menos que você saiba o que está fazendo). Como um valor de preço "alto" está relacionado a um volume real?

De qualquer forma, ele sempre dará o mesmo que High[1], que aparentemente é o que você estava tentando obter. Mas, então, por que não obtê-lo diretamente, sem esse desvio por meio do iHighest e do volume real?

Não vou prosseguir. Você disse :

o objetivo deste artigo é ajudar as pessoas a entender como programar em MQL5

Se alguém quiser entender como programar em MQL5, recomendo que evite este artigo a todo custo.

 
Alain Verleyen #:

Esse é provavelmente o artigo que li com o pior código que já vi, sem intenção de ofender, apenas fatos. Nunca use isso em uma conta ativa.

O que você acha que isso está fazendo?

Não há dados reais de volume na maioria dos símbolos, exceto em futuros e ações. No Forex, isso sempre retornará 1. O mais alto é sempre = 1.

Então, você está usando esse índice (o mais alto obtido no volume real) para obter um valor alto:

Você está misturando coisas que não deveriam ser misturadas (a menos que você saiba o que está fazendo). Como um valor de preço "High" está relacionado a um volume real?

De qualquer forma, ele sempre dará o mesmo que High[1], que aparentemente é o que você estava tentando obter. Mas então por que não obtê-lo diretamente, sem esse desvio por meio do iHighest e do volume real?

Não vou prosseguir. Você disse :

o objetivo deste artigo é ajudar as pessoas a entender como programar em MQL5

Se alguém quiser entender como programar em MQL5, eu recomendaria evitar este artigo a todo custo.


Eu explico a estratégia, esse é o meu objetivo. Você pode codificar seu próprio programa. Este é apenas um exemplo. Estou na situação de ter que mostrar os resultados, por isso carreguei um EA simples. O objetivo real é mostrar a estratégia.

Sim, você está certo, isso não é útil para aprender programação, é apenas para mostrar uma estratégia.

 

Concordo com o Alain nesse ponto, o pior programador que já vi. Aqui está a correção, se isso puder ajudar: (substitua a primeira parte da função OnTick())

MqlTick tick;
SymbolInfoTick(_Symbol,tick);

int highest_index = iHighest(NULL,0,MODE_CLOSE,100,0);
int lowest_index = iLowest(NULL,0,MODE_CLOSE,100,0); 

if(highest_index == -1 || lowest_index == -1) { 
   PrintFormat("iHighest()/iLowest() call error. Error code=%d",GetLastError());
   return;
 }

double previousHigh = iHigh(NULL, PERIOD_CURRENT, highest_index);
double previousLow = iLow(NULL, PERIOD_CURRENT, lowest_index);
double currentHigh = iHigh(NULL, PERIOD_CURRENT, 1);
double currentLow = iLow(NULL, PERIOD_CURRENT, 1);
 

A explicação é clara, mas o código tem muitas declarações e linhas desnecessárias.

Não vejo onde a condição MA é comparada e a condição estocástica converge com a indicação de tendência MA.

Por favor, indique o que é, talvez o código possa ser modificado e simplificado.

Executei o EA, mas infelizmente ele não executa negociações.