[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 170

 
splxgf:
Sua versão pode ser reduzida a estas duas linhas adicionadas à versão do autor, e com algumas alterações nas condições deve, em princípio, acelerar bastante as coisas.
Você tem certeza?
 
MaxZ:
Você tem certeza?

Essencialmente sua sugestão é excluir das verificações e cálculos as velas que não se enquadram na faixa UPPprice/LOWprice... isto é excluído por duas linhas. Se você não desistir do loop, isso significa que o preço está na faixa que precisamos e nós fazemos as verificações padrão. Seu código pode ir mais rápido apenas em detrimento dos resultados, porque a lógica de trabalhar com INS é muito complicada para usar o valor desta variável da iteração anterior é um absurdo.

 
splxgf:

Essencialmente sua sugestão é excluir das verificações e cálculos as velas que não se enquadram na faixa UPPprice/LOWprice... isto é excluído por duas linhas. Se você não desistir do loop, isso significa que o preço está na faixa que precisamos e nós fazemos as verificações padrão. Seu código pode ir mais rápido apenas em detrimento dos resultados, porque a lógica de trabalhar com INS é muito complicada para usar o valor desta variável da iteração anterior é um absurdo.

Então você tem certeza! :))))


Você citou o código antes:

splxgf:
        if (LOWprice > iHigh(NULL,60,i)) continue;
        if (UPPprice < iLow (NULL,60,i)) continue;

Se o preço está abaixo de Baixo, por que devemos verificar se o preço está acima de Alto? Em sua versão, esta condição não é excluída. Mas em minha sugestão:

         if (UPP)
            ... // не выполнится
         if (LOW)
            if (LOWprice < iLow (NULL,60,i))
               continue;
            else
            ..

está excluída.

Eu não nego que meu código pode não ser o mais ideal.

Mas quantas vezes mais rápido você acha

         if (UPP)

funcionará do que.

         if (LOWprice > iHigh(NULL,60,i))

?

De fato:

UPP = LOWprice > iHigh(NULL, 60, i);

Só eu sei disso por um fato (exceto quando lancei dentro da barra histórica atual) e você o calcula...

 
abolk:


Sim.

Você tem que ficar tão distorcido a ponto de transformar três linhas claras de código em código que é difícil de entender.

Se você tivesse a idéia de dividir o iLow, iHigh check, você poderia tê-lo dividido imediatamente:

E não faça nenhuma piada

E você já pensou alguma vez que um código torcido e pesado pode, às vezes, funcionar mais rápido do que uma simples três linhas? :)))
 
 INS = True;
   
   for (int i=1; i<=6000; i++)
   {
      if (INS)
      {
         if (LOWprice > iHigh(NULL,60,i))
         {
            INS = False;
            UPP = True;
            LOW = False;
            continue;

Considere esta seção do código

INS=Verdadeiro;

O loop foi

se o vôo (INS) estiver ok

se (BAIXO preço...) por exemplo, a condição é verdadeira, mas depois dá errado porque recebemos INS=Falso e vamos para a próxima iteração

então se (falso) e nós terminamos, porque é outro bar, então o que o...

Quanto ao meu código, não estou verificando o preço, mas se a barra está dentro de +300/300 pips do preço atual e, se estiver, deve ser considerada. Todas as outras otimizações não são tão críticas porque as duas primeiras verificações, por exemplo, eliminam 90% das barras desnecessárias.

 
splxgf:

então se (falso) e estamos ferrados, porque é uma barra diferente, você tem que perguntar o que o...

Não navegou, mas navegou em outro lugar { ... }.
 

e depois realmente nadou...

Por que você acha que as variáveis booleanas irão acelerar se cada condição for seguida por mais uma se (BAIXO preço > iHigh(NULL,60,i)), ou seja, os mesmos ovos mas do lado mais uma condição e muitas atribuições...

 

Uau!

É aqui que os argumentos se aquecem.

Por enquanto, vou colocar as coisas desta maneira:

 extern int Distance = 3000;
 int CountH,NewCountH,CountL,NewCountL,CountB,NewCountB;
 
 double ResistH,ResistL,ResistB;
 
//======================================================================
int start(){


   double bid = Bid;
   double UPPprice = bid+Distance*Point;
   double LOWprice = bid-Distance*Point;
      NewCountH=0;
      NewCountL=0;
      NewCountB=0;
      ResistH=0;
      ResistL=0;
      ResistB=0;
  
   while(LOWprice<UPPprice)
    {
      CountH=0;
      CountL=0;
      for(int i=1; i<=6000; i++){  
          if(iHigh(NULL,60,i)>LOWprice) 
          if(LOWprice>iLow(NULL,60,i)) 
          if(LOWprice> bid) CountH++; else CountL++;
       }  
      if(CountH>NewCountH){NewCountH=CountH;ResistH=LOWprice;} 
      if(CountL>NewCountL){NewCountL=CountL;ResistL=LOWprice;}   
      LOWprice=LOWprice+25*Point;
    }
      CountB=0;
      for(i=1; i<=6000; i++){  
          if(iHigh(NULL,60,i)>=bid) if(bid>=iLow(NULL,60,i)) CountB++;
       }
      if(CountB>NewCountB){NewCountB=CountB;ResistB=bid;}  
 
     
   
    Comment("\n", 
      "\n",     
//      "\n", "     Spread                                ", MarketInfo(Symbol(), MODE_SPREAD),  
      "\n", "     Distance                             ", Distance, 
      "\n", "     CountH                               ", NewCountH, 
      "\n", "     CountB                               ", NewCountB, 
      "\n", "     CountL                                ", NewCountL, 
      "\n", "-------------------------------------------------- ",     
      "\n");
      

    if(ObjectFind("RH") == -1) {
      ObjectCreate("RH", OBJ_HLINE, 0, 0, ResistH);
      ObjectSet("RH", OBJPROP_COLOR, Magenta);
      ObjectSet("RH", OBJPROP_STYLE, STYLE_DOT);
     }else ObjectMove("RH", 0, iTime(NULL,0,0), ResistH);

    string text=DoubleToStr(NewCountH,0);
    ObjectDelete("RHtxt"); 
     if(ObjectFind("RHtxt") == -1) {
       ObjectCreate("RHtxt", OBJ_TEXT, 0, 0, 0);
       ObjectSetText("RHtxt", text , 8, "Arial", Aqua);
       ObjectMove("RHtxt", 0, iTime(NULL,0,0), ResistH);
      }else ObjectMove("RHtxt", 0, iTime(NULL,0,0), ResistH);
      
    string text3=DoubleToStr(NewCountB,0);
    ObjectDelete("RBtxt"); 
     if(ObjectFind("RBtxt") == -1) {
       ObjectCreate("RBtxt", OBJ_TEXT, 0, 0, 0);
       ObjectSetText("RBtxt", text3 , 8, "Arial", Aqua);
       ObjectMove("RBtxt", 0, iTime(NULL,60,0), ResistB);
      }else ObjectMove("RBtxt", 0, iTime(NULL,60,0), ResistB);

    if(ObjectFind("RL") == -1) {
      ObjectCreate("RL", OBJ_HLINE, 0, 0, ResistL);
      ObjectSet("RL", OBJPROP_COLOR, Magenta);
      ObjectSet("RL", OBJPROP_STYLE, STYLE_DOT);
     }else ObjectMove("RL", 0, iTime(NULL,0,0), ResistL);
     
    string text2=DoubleToStr(NewCountL,0);
    ObjectDelete("RLtxt");
    if(ObjectFind("RLtxt") == -1) {
      ObjectCreate("RLtxt", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("RLtxt", text2 , 8, "Arial", Aqua);
      ObjectMove("RLtxt", 0, iTime(NULL,0,0), ResistL);
     }else ObjectMove("RLtxt", 0, iTime(NULL,0,0), ResistL);

 return (0);}            //====== THE END ======================

É muito interessante observar o movimento de preços. Vai sempre na direção da menor resistência.

Você pode até mesmo prever seu movimento futuro. Observe.

O preço é como a água que flui em um riacho.

Obrigado a todos vocês!

 

Por favor, me diga como encontrar o número da barra com o maior valor da alta.


Search_High=MathMax( High[i],High[1])

 
001:

Você pode me dizer como encontrar o número da barra com o maior valor chai?


Search_High=MathMax( High[i],High[1])

Você pode ir a https://docs.mql4.com/ru/array/ArrayMaximum

através da matriz Alta.

Razão: