Como encontrar o tempo da barra onde as médias móveis cruzaram? (código dentro) - página 3

 

Sim, eu preciso dele especificamente para a tabela PERÍODO_H1. Como eu posso mudar os prazos e quero esse código rígido para essa TF.

(Estou preocupado que eu esteja fazendo isso errado - especialmente o que você me escreveu duas vezes agora WHRoeder sobre MA's e a declaração de se... - Por isso, estou me preparando para um tapa, mas acho que isso me dirá a barra onde o MA atravessou (abaixo). Então isto certamente funcionaria aplicando-o ao iBarShift...?)

if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12)triggerBarTime = Time[1];
 
WHRoeder:

As médias móveis múltiplas não se cruzarão ao mesmo tempo.

Por que você está postando duas vezes? Sua pergunta foi respondida anteriormente.

Encontre a barra mais antiga onde estavam todos na ordem correta.


int DIR = 0;
for(int iBar = 0; iBar < Bar; iBar++){
   double MA20 = ... iBar), 
           MA5 = ... iBar);
          :
   if(     MA20 > MA5 && MA5 > ...) DIR = -1;
   else if(MA20 < MA5 && MA5 < ...) DIR = +1; // All fanning up.
   else if (DIR != 0){ iBar--; break; }       // Last one was cross.
}
Posso perguntar qual é a finalidade das variáveis da Barra? Além disso, o que significa "--"? As duas marcas "--" e "!"? (se você fosse tão gentil? Já procurei na seção de ajuda, mas não encontrei quais são seus propósitos).
 
DomGilberto:

Posso perguntar qual é a finalidade das variáveis da Barra? Além disso, o que significa "--"? As duas marcas "--" e "!"? (se você fosse tão gentil? Já procurei na seção de ajuda, mas não encontrei quais são seus propósitos).


E posso lhe perguntar por que o básico do livro ainda é desconhecido ??

https://book.mql4.com/basics/expressions

 
Sua pergunta é como se você dissesse "o que é essa coisinha de metal (uma chave) e por que uma coisa de pressey é um retângulo (gás) e as outras são quadradas"?
aprenda a codificar.
 

Mas sei o que é uma chave de gás... - que é mais simples do que codificar...

Mas vocês estão certos - eu preciso ler tudo.

É porque eu aprendo melhor com a tentativa e o erro (sou um homem de mãos dadas quando se trata de reter conhecimento). Isso me ajuda a entender a lógica quando eu a vejo. Além disso, o site da MQL4 não explica necessariamente as coisas claramente sobre como todas elas funcionam juntas.

Portanto, para responder à sua pergunta deVries, é por isso que eu sei algumas coisas básicas e algumas coisas mais avançadas, mas vem de forma desigual porque eu gosto de brincar e aprender dessa forma.

Desculpe se estou me tornando uma dor!

EDIT - Ainda não entendo a parte "Bar" do código que você escreveu WHRoeder - não tenho certeza se isso está certo?

 
DomGilberto: Mas eu sei o que é uma chave de gás... - que é mais simples do que codificar...

Mas será que você estaria tentando dirigir sem saber o que era? Isso seria idiota.

Você está tentando codificar sem saber o que "--" e "!" são. Qual é a diferença?

 

!=Verdadeiro, se x não for igual a y -(DIR != 0) - Se DIR (que é 0) não for igual a "0" então o operador do Break devolverá o controle para o operador. E iniciará o loop novamente.

-- Subtração de 1 do valor da variável. Então "iBar--;" = iBar = 0, subtraindo assim 1 = -1?

Ei - Estou realmente tentando aqui. Sinto muito se eu não aprendo tão rápido como algumas pessoas (e você não acha que eu prefiro ser assim! Eu preferia aprender sozinho e conseguir, sem ter que pedir ajuda de alguém!) mas estou tentando o melhor que posso. Talvez eu não seja a faísca mais brilhante do mundo. Então me perdoe por isso, pelo menos...

 
DomGilberto:

!=Verdadeiro, se x não for igual a y -(DIR != 0) - Se DIR (que é 0) não for igual a "0" então o operador do Break devolverá o controle para o operador. E iniciará o loop novamente.

-- Subtração de 1 do valor da variável. Então "iBar--;" = iBar = 0, subtraindo assim 1 = -1?

Ei - Estou realmente tentando aqui. Sinto muito se eu não aprendo tão rápido como algumas pessoas (e você não acha que eu prefiro ser assim! Eu preferia aprender sozinho e conseguir, sem ter que pedir ajuda de alguém!) mas estou tentando o melhor que posso. Talvez eu não seja a faísca mais brilhante do mundo. Então me perdoe por isso, pelo menos...


Neste loop

for(int iBar = 0; iBar < Bar; iBar++){//....do some stuff and come back}

iBar tem aqui valores diferentes, desde que seja menor e que o Bar se torne valor 1 maior

iBar--;

significa....

iBar = iBar - 1;
 
int DIR = 0;
for(int iBar = 0; iBar < Bars; iBar++)
   {
   double i1  = iMA(NULL,60,3,0,1,0,1); 
   double i2  = iMA(NULL,60,5,0,1,0,1);
   double i3  = iMA(NULL,60,8,0,1,0,1);
   double i4  = iMA(NULL,60,10,0,1,0,1);  
   double i5  = iMA(NULL,60,12,0,1,0,1);
   double i6  = iMA(NULL,60,15,0,1,0,1);  
   double i7  = iMA(NULL,60,30,0,1,0,1);
   double i8  = iMA(NULL,60,35,0,1,0,1);
   double i9  = iMA(NULL,60,40,0,1,0,1);
   double i10 = iMA(NULL,60,45,0,1,0,1);
   double i11 = iMA(NULL,60,50,0,1,0,1);
   double i12 = iMA(NULL,60,60,0,1,0,1); 
   double ema21 = iMA(NULL,60,21,0,1,0,1);

   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21)
      OrderEntry(0);
  else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)
      OrderEntry(1);
   
   if (DIR != 0)
   { 
   iBar--; break; 
   }       // Last one was cross.

Ah - Acho que consegui pô-lo a funcionar agora - Só de olhar para o Bar por um tempo e depois percebi :) - Estou começando a perceber que o que estou tentando codificar é um pouco mais complexo do que eu pensava inicialmente. Eu preciso que os MA's aumentem ou diminuam (dependendo se é uma compra ou venda). Se o MA estiver bem (por um longo período), eles não precisam estar sempre na ordem correta - é apenas um caso de primeiro identificar quando estão todos empilhados para cima e bem separados na ordem correta - a partir deste ponto, tudo o que eu quero é que o preço verifique os 21 ema e depois faça um pedido acima dos máximos. É claro que vou ter uma brincadeira! NÃO estou esperando que ninguém me escreva o código - apenas escrevendo meus pensamentos em voz alta.

Obrigado!

 
Conserte suas reentrâncias ou falta de aparelho
Código postado
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && 
      i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21)
      OrderEntry(0);
  else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && 
          i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)
      OrderEntry(1);
Apropriadamente indentados
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && 
      i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
   triggerBarTime = Time[1];
   if(Low[1]<ema21) OrderEntry(0);
   else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && 
          i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
   triggerBarTime1 = Time[1];
   if(High[1]>ema21)  OrderEntry(1);
Corretamente fixado
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && i7<i8 && 
      i8<i9 && i9<i10 && i10<i11 && i11<i12){
      DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21) OrderEntry(0);
   }
   else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && 
           i8>i9 && i9>i10 && i10>i11 && i11>i12){
      DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)  OrderEntry(1);
   }
Razão: