Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 383

 
konam1:
Boa tarde a todos. Acompanhamento dos valores da parabólica na abertura de cada vela de hora em hora.
Quando eu o percorro na história, o iSAR da barra zero coincide com o ponto no gráfico, exceto quando o parabólico muda de posição de cima para baixo e vice versa.
if (newbarall!=(iTime(Symbol(),60,0))
{
newbarall=iTime(Symbol(),60,0);
Impressão (iTime(Símbolo(),60,0));
Imprimir ("SAR = ",NormalizeDuplo(iSAR(Símbolo(),60,0.02,0.2,0),Dígitos);
};
Daí as seguintes perguntas:
Por que a parabólica de barra zero é contada de forma incorreta e precisa nesses momentos?
E, na verdade, como evitá-lo, pois quando a barra se abre, o ponto aparece e fica estático sem recálculo durante a formação da vela.
Por favor, ajude). Obrigado!

Se você observar o ponto parabólico na vela zero, afinal não é estático - ele muda de posição, e não apenas quando você muda de posição para cima e para baixo, mas em geral - algumas vezes ele muda ligeiramente em uma posição (sem subir e descer)

 

Olá, você poderia me dizer por que as linhas horizontais não estão sendo apagadas?

   if(SellInvertedHammer == true)
   {
      //if ((Open1 < Close1 && delta_minus < 0) || (Open1 >= Close1 && delta_plus > 0))
      {
         if(!ObjectCreate(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJ_ARROW_DOWN,0,TimeCurrent(),High[1] + 70*Point))
               {
               Print("Не удалось создать метку вниз");
               }
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_COLOR,clrRed);//--- установка цвета
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установка стиля линии
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_WIDTH,1);//--- установка толщины линии
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_BACK,false);//--- отображение на переднем (false) или заднем (true) плане
               InvertedHammerCandle ++;
         Print ("Перевернутый молот");
         Print ("Дельта+ = " + IntegerToString (delta_plus));
         Print ("Дельта- = " + IntegerToString (delta_minus));
         Print ("Объем = " + IntegerToString (volume));
         Print ("Кумулитивная дельта = " + IntegerToString (cum_delta));
         
         if(!ObjectCreate(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJ_HLINE,0,TimeCurrent(),UpLine_InvertedHammer))
         {
         Print("Не удалось создать верхнюю линию");
         }
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_COLOR,clrBlueViolet);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         
         
         if(!ObjectCreate(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJ_HLINE,0,TimeCurrent(),DownLine_InvertedHammer))
         {
         Print("Не удалось создать нижнюю линию");
         }
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_COLOR,clrSlateBlue);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         lineInvertedHammerCandle ++;
                         
      }

   }
   if(ma2 > UpLine_InvertedHammer && ma2 > DownLine_InvertedHammer && ma1 > UpLine_InvertedHammer && ma1 > DownLine_InvertedHammer)
               {
                  UpLine_InvertedHammer = 0;
                  DownLine_InvertedHammer = 0;
               }
      
   if (ma2 < UpLine_InvertedHammer && ma2 > DownLine_InvertedHammer && ma1 < UpLine_InvertedHammer && ma1 < DownLine_InvertedHammer)
         {
            
             if(!ObjectCreate(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJ_ARROW_SELL,0,TimeCurrent(),Low[1] + 50*Point))
                {
                Print("Не удалось создать метку вниз");
                }
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_COLOR,clrRed);//--- установка цвета
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_STYLE,STYLE_SOLID);//--- установка стиля линии
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_WIDTH,1);//--- установка толщины линии
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_BACK,false);//--- отображение на переднем (false) или заднем (true) плане
                InvertedHammerCandleSell ++;
                Print("Точка входа SELL по разворотной свече 'Перевернутый молот'");
                UpLine_InvertedHammer = 0;
                DownLine_InvertedHammer = 0;
                
                int upline;
                int downline;
                upline = ObjectFind(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                downline = ObjectFind(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                if(upline > -1 && downline > -1)
                  {
                   ObjectDelete("UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                   ObjectDelete("DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                   Print("Линии удалены");
                  }
                  Print("Не удалось удалить верхнюю и нижнюю линии");
                
          }

Isto faz parte de todo o código. Eu afixarei o código inteiro se necessário


Obrigado

 

- Quero aprender como escrever um EA em MT4 ou MT5, preciso de um escritor de EA experiente que possa explicar todas as nuances do código na prática e me ajudar a escrever o código. Não preciso de ajuda para escrever um EA pronto, tenho alguma experiência de negociação e idéias para verificar tudo no teste e entender como usar em condições, preciso aprender a escrever condições diferentes.

 
Artyom Trishkin:

Se você observar o ponto da parabólica na vela zero, afinal ela não é estática - ela muda de posição, e não apenas quando você muda de posição para cima e para baixo, mas em geral - algumas vezes ela muda um pouco em uma posição (sem transição para cima/para baixo)


No entanto, a história é uma partida completa, exceto pelos momentos de "transição". Estou até feliz com um erro de 1-2 pontos. Na "transição" pode ser de 20 pips ou mais.

A questão é a mesma, como evitá-la. Obrigado

 
konam1:

No entanto, a história é uma partida completa, exceto pelos momentos de "transição". Estou até feliz com um erro de 1-2 pontos. Na "transição" pode ser de 20 pips ou mais.

A questão é a mesma, como evitá-la. Obrigado

Afinal, o que é esta construção?

if(newbarall!=(iTime(Symbol(),60,0)))
  {
   newbarall=iTime(Symbol(),60,0);  
   Print(iTime(Symbol(),60,0));
   Print("SAR = ",NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),Digits));
  };

O que ele dá?

Por que você imprime o tempo de tal maneira?

E por que você imprime o valor do parabólico desta maneira?

 
Artyom Trishkin:

Que tipo de projeto é este, afinal?

Qual é o benefício de um projeto desse tipo?

Por que você imprime o tempo desta maneira?

Por que você imprime o valor do parabólico desta maneira?


-Esta construção dá o cumprimento da condição quando uma nova vela de hora aparece: Se a hora da vela de hora não corresponde ao valor da variável newbarall, então escrevemos uma nova hora para a variável e cumprimos a condição.

Tempo de abertura da vela de uma hora é impresso

- O valor do parabólico é arredondado para 4 casas decimais para ser idêntico ao que é mostrado no gráfico.

 
konam1:

-Este projeto dá uma condição quando uma nova vela de uma hora ocorre: Se o tempo da vela de uma hora não corresponder ao valor da variável newbarall, então escreva um novo tempo para a variável e preencha a condição.

Tempo de abertura da vela de uma hora é impresso

- O valor parabólico é arredondado a 4 casas decimais para ser idêntico ao que é mostrado no gráfico

1. Não, não

2. Que seja assim

3. Você tem certeza de que está imprimindo um número real com essa função?

4 - Por que você precisa ; após o fechamento do parêntese?

 
Artyom Trishkin:

1. Não, não

2. Que seja desta maneira

3. Você tem certeza de que está imprimindo um número real com essa função?

4 - Por que você precisa ; após o fechamento do parêntese?


1. entretanto, o algoritmo funciona apenas na abertura de uma vela, qual é o erro em tal construção?

3. os números impressos são 1.1820, por exemplo, por isso tenho certeza.

4. uma parte do código é dada.

 
konam1:

1. No entanto, o algoritmo só funciona na abertura de uma vela, qual é o erro em tal projeto?

3. Os números 1.1820 são impressos, por exemplo, com tanta certeza.

4. uma parte do código é dada.

1. Talvez eu tenha perdido - são cinco e meia da manhã.

3. DoubleToString()

4. Mas você tem uma condição e um operador composto:

if(condition) { }

Não vejo nenhuma outra maneira de interpretar isso. Por que você precisa do ";" após o operador?

 
konam1:
Daí as seguintes perguntas:
Por que a parabólica de barra zero é contada incorretamente nestes exatos momentos?
E, de fato, como evitá-lo, pois quando a barra abre o ponto aparece e fica estática sem recálculo durante a formação da vela.
Por favor, ajude). Obrigado!

A afirmação "o ponto aparece e é estático sem recálculo durante a formação de uma vela" não é correta, se o preço quebra o parabólico, o ponto é redesenhado.
É preciso recalcular o parabólico a cada tique, porque a fuga pode acontecer a qualquer momento, não apenas na abertura do bar.