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

 
Integer:


Você pode me dizer como, em vez de "ito", as pessoas escrevem "ito"?

1. Você não sabe que "isto" é soletrado com um "e" e não com um "e"?

2. Você é preguiçoso demais para mover sua mão para a letra "e", é mais fácil pressionar "e"?

3. Não há uma tecla "e" no teclado? Se não, por que não?

4. É algum tipo de ponce especial?

5. Algum outro motivo desconhecido. O que é isso?


Eu não sou russo e não há letras russas no teclado. Além disso, eu uso um teclado fonético (é um programa de software). Pressiono "p", mas diz "p". A letra "e" também está lá. Eu tenho que digitar "\".

Existem erros gramaticais, porque a gramática há muito tempo foi esquecida. Tive que escrever em russo apenas em fóruns e isso depois de muitos anos.

Peço desculpas pelos erros. Não me chute muito.

 
artmedia70:

Esta linha pode ser removida porque iFractals() retorna zero como nenhum valor fractal, não "valor vazio" (EMPTY_VALUE).

Minha pergunta é a seguinte: você está tentando fazer um indicador que procurará por dois fractais consecutivos? Ou você está procurando em seu EA por dois fractais consecutivos mais próximos da barra atual? Esta questão não é de curiosidade ociosa porque os métodos de busca no indicador e no Expert Advisor são diferentes - o indicador calcula do final ao início - do passado ao presente, e o Expert Advisor olha através das barras do presente ao passado. Assim, as direções de busca também são diferentes no Expert Advisor e no indicador.

E uma última pergunta: qual deve ser a saída?



Eu não pedi (não precisei até agora) o que o iFractals() retorna. Se for realmente 0 - sim, desculpe ter mentido, EMPTY_VALUE não precisa ser verificado.

Eu apresentei esta formulação como uma boa justificativa - consideramos o caso geral de EMPTY_VALUE e não o local com 0 de retorno.

Mas eu me envergonho e me divirto por não saber uma coisa tão elementar.

Entendo que o código era para um indicador - o artmedia70 está certo de que a abordagem é diferente para Consultores Especialistas.

Não tenho tempo para isso - o farei à noite quando chegar em casa, porque não nos entendemos bem (depois de encontrar a condição de dois fractais o evento deve ser processado), mas tudo está bem.

//----
   БЛОК ПРОВЕРКИ НОВОГО БАРА;                //проверить наличие нового бара 

   int   a1=0,                               //преведущий фрактал (-1 ->нижний, 1 -> верхний)
         a2,                                 //нынешний фрактал  (-1 ->нижний, 1 -> верхний)
         a3,                                 //сума преведущий + нынешний
         kilkict,                            //была введена с мыслю уменьшить перерасчет после глобального расчета (идея просто еще не реализована)
         frac,                               //frac - флаг существования фракталов,
         frac1=0,                            //frac1- счетчик фракталов (+1 или 0 за цикл)сейчас просто выполняет роль фильтра, надо найти сперва 2 фрактала чтобы приступить к их сравнению.
         i;
     
   kilkict=Bars;                            

   for (i=3; i<kilkict;i++){                 // 3
      a2=0;
      frac=0;
      if(iFractals(NULL, 0, MODE_UPPER, i)>0) {            
         if (Bufer0!=EMPTY_VALUE) {          //не нужно для iFrctals()данной проверки условий
            a2+=1;                           //к числу фракталов добавляем 1
            frac=1;                          //флаг - фрактал есть
            frac1++;                         //счетчик увеличиваем на 1
         }
      }
      if(iFractals(NULL, 0, MODE_LOWER, i)>0) {            
         if (Bufer0!=EMPTY_VALUE) {          //не нужно для iFrctals() данной проверки условий
            if(a2==0){              
               frac1++;                      //счетчик увеличиваем на 1 
               frac=1;                       //флаг - фрактал есть
            }
            a2+=-1;                          //к числу фракталов добавляем -1(т. е. уменшаем)
         }
      } 
      if (frac==0){continue;}                // если флага нет (фрактал не найден)
      if (frac1==1){                         //если счетчик равен 1,
         a1=a2; 
         continue;
      }          
      a3=a1+a2;
      if(a3<0)           { a1=a2; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; continue;}//Два фрактала вниз  подряд найдено// 
      if(a3>0)           { a1=a2; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; continue;}//Два фрактала вверх подряд найдено //
      if(a3==0 && a1==0) { a1=a2; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; }// Два фрактала подряд вверх и два фрактала подряд вниз найдено //
   } 

 
gince:


...

Peço desculpas pelos erros. Não seja muito difícil para mim.


Só de pensar, é um fenômeno engraçado.
 
Integer:

Só de pensar, é um fenômeno engraçado.

Obrigado pela correção.
 
if(!SL==0)
   {
  dollarsPerPip = lot/SL;
   }

Quem faz isso?

if(SL>0) dollarsPerPip = lot/SL;

Por que se preocupar com muito { }?? e retardar o processo...

alternativamente...

if(SL) dollarsPerPip = lot/SL;
 
gince:


Os métodos de busca no indicador e no Expert Advisor são diferentes - o indicador calcula do final ao início - do passado ao presente, e o Expert Advisor olha através das barras do presente ao passado .

para (i=kilkict;i>0;i--)

Resultado - dois altos -> vender (seta para baixo), dois baixos -> comprar (seta para cima). O sinal aparecerá +2 barras à direita do fractal. Isso é o que eu gostaria de ver visualmente na história, no início. E provavelmente vamos precisar de um filtro.

Então a pergunta é: por que você quer se cansar de escrever este indicador, se você só quer olhar para a história? Foi-lhe dado um link para o indicador Articulus. Ele faz exatamente o que você quer:

//+------------------------------------------------------------------+
//|                                                    iFractals.mq4 |
//|                             Copyright © 2010, EGEN Software LTD. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright   "Copyright © 2010, EGEN Software LTD."
#property link        "http://www.metaquotes.net"

#property indicator_chart_window

#property indicator_buffers   2
#property indicator_color1    Lime
#property indicator_color2    Red
#property indicator_width1    2
#property indicator_width2    2

datetime TIME; double F,F1,F2;

double WAVE.0[];
double WAVE.1[];

bool EQ(int value1, int value2)
{
   return(value1==value2);
}

bool ZERO(int value)
{
   return(EQ(value,0));
}

int MathSign(double value1, double value2)
{
   if(value1<0)
      if(value2<0) return(-1);
   if(value1>0)
      if(value2>0) return(1);
   return(0);
}

bool TOTAL(int index)
{
   return(index<Bars);
}

double FRACTALS(int mode, int shift)
{
  return(iFractals(NULL,0,mode,shift));
}

double UPPER(int shift)
{
   return(FRACTALS(MODE_UPPER,shift));
}

double LOWER(int shift)
{
   return(FRACTALS(MODE_LOWER,shift));   
}

int PEAK(int shift)
{
   int peak=0;
   double F1=UPPER(shift); 
   if(F1>0) peak++;
   double F2=LOWER(shift); 
   if(F2>0) peak--;
   F=F1+F2; 
   return(peak);
}

void init()
{
   IndicatorBuffers(2);
   SetIndexBuffer(0,WAVE.0);
   SetIndexStyle(0,DRAW_ARROW,EMPTY);  
   SetIndexArrow(0,236);    
   SetIndexBuffer(1,WAVE.1);
   SetIndexStyle(1,DRAW_ARROW,EMPTY);      
   SetIndexArrow(1,238);
   IndicatorDigits(Digits);
   IndicatorShortName("iFractals");  
}

bool F1(int shift)
{
   int peak=PEAK(shift);
   if(ZERO(peak)) return(false); 
   F1=F*peak;
   return(true);
}

int WAVE.1(int shift)
{   
   for(int i=shift; TOTAL(i); i++) 
      if(F1(i)) break; 
   return(i);
}

bool F2(int shift)
{
   int peak=PEAK(shift);
   if(ZERO(peak)) return(false); 
   F2=F*peak;
   return(true);
}

int WAVE.2(int shift)
{   
   for(int i=shift; TOTAL(i); i++) 
      if(F2(i)) break; 
   return(i);
}

void WAVE(int shift)
{
   WAVE.0[shift]=EMPTY_VALUE;
   WAVE.1[shift]=EMPTY_VALUE;
   shift=WAVE.1(shift); 
   int index=shift; shift++;
   shift=WAVE.2(shift);
   int wave=MathSign(F1,F2);
   F1=MathAbs(F1);
   F2=MathAbs(F2);
   if(wave<0) 
      if(F1<F2) WAVE.1[index]=F1; else WAVE.0[index]=F1;                  
   if(wave>0) 
      if(F1>F2) WAVE.0[index]=F1; else WAVE.1[index]=F1;       
}   

void CheckWave()
{
   for(int i=3; TOTAL(i); i++) WAVE(i);
}   

void start()
{
   CheckWave();
}

Compilar e olhar para as histórias. Em seguida, tire conclusões.

Ou "ficar de pé em uma rede" é mais confortável?

 
artmedia70:

Então a pergunta é: por que você está se torturando ao escrever este indicador se você só quer olhar as histórias? Foi-lhe dado um link para o indicador Articulus. Ele faz exatamente o que você quer que ele faça:

Compilar e olhar para a história. E depois tirar conclusões.

Ou "ficar de pé em uma rede" é mais confortável?



e você rastreia a lógica do peru ))

Você não precisa de 20 funções para descobrir isso, precisa?

 
VOLDEMAR:

Quem faz isso?

Por que se preocupar com muito { }?? e retardar o processo...

alternativamente...


Engraçado, eu não sabia disso, vou ter que checar isso.
 
ALXIMIKS:


e você rastreia a lógica do peru ))

você não fica entediado com 20 funções????

Cada função lá retorna um resultado que é compreensível num piscar de olhos. Eu não fico atolado num relance. É tão claro quanto o dia. Além disso, do que ele precisa? Ele precisa olhar para histórias, não para códigos.
 
VOLDEMAR:

Quem faz isso?

Por que se preocupar com muito { }?? e retardar o processo...

essa é uma maneira de fazer isso.

Obrigado pela correção.

Eu tenho este hábito estúpido

ao escrever uma declaração condicional

para colocar os parênteses imediatamente.