Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 383

 
konam1:
Buenas tardes a todos. Seguimiento de los valores del parabólico en la apertura de cada vela horaria.
Cuando lo paso por el historial, el iSAR de la barra cero coincide con el punto del gráfico, excepto cuando la parabólica cambia de posición de arriba a abajo y viceversa.
si (¡nuevobaral!=(iTime(Símbolo(),60,0))
{
newbarall=iTime(Symbol(),60,0);
Imprimir (iTime(Symbol(),60,0));
Print ("SAR = ",NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),Digits);
};
De ahí las siguientes preguntas:
¿Por qué la parábola de la barra cero se cuenta de forma incorrecta precisamente en estos momentos?
Y, en realidad, cómo evitarlo, porque cuando la barra se abre, el punto aparece y es estático sin recalcular durante la formación de la vela.
Por favor, ayuda). Gracias.

Si observas el punto parabólico en la vela cero, no es estático después de todo - cambia su posición, y no sólo cuando se cambia de posición hacia arriba y hacia abajo, sino en general - a veces se desplaza ligeramente en una posición (sin subir y bajar)

 

Hola. ¿Podría decirme por qué no se eliminan las líneas horizontales?

   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("Не удалось удалить верхнюю и нижнюю линии");
                
          }

Esto es parte de todo el código. Voy a publicar el código completo si es necesario


Gracias

 

- Quiero aprender a escribir un EA en MT4 o MT5, necesito un escritor de EA con experiencia que pueda explicar todos los matices del código en la práctica y me ayude a escribir el código. No necesito ayuda para escribir un EA ya hecho, tengo algo de experiencia en el comercio y las ideas para comprobar todo en la prueba y entender cómo utilizar en condiciones, necesito aprender a escribir diferentes condiciones.

 
Artyom Trishkin:

Si observas el punto de la parabólica en la vela cero, no es estático después de todo - cambia su posición, y no sólo cuando cambias de posición arriba y abajo, sino en general - a veces se desplaza un poco en una posición (sin transición arriba/abajo)


Sin embargo, la historia coincide completamente, salvo los momentos de "transición". Incluso estoy contento con un error de 1-2 puntos. En la "transición" podría ser de 20 pips o más.

La pregunta es la misma, cómo evitarlo. Gracias

 
konam1:

Sin embargo, la historia coincide completamente, salvo los momentos de "transición". Incluso estoy contento con un error de 1-2 puntos. En la "transición" podría ser de 20 pips o más.

La pregunta es la misma, cómo evitarlo. Gracias

¿Qué es esta construcción?

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));
  };

¿Qué es lo que da?

¿Por qué imprimen la hora de esa manera?

¿Y por qué se imprime el valor de la parabólica de esta manera?

 
Artyom Trishkin:

¿Qué tipo de diseño es éste?

¿Cuál es el beneficio de este diseño?

¿Por qué se imprime la hora de esta manera?

¿Por qué se imprime el valor de la parabólica de esta manera?


-Esta construcción da el cumplimiento de la condición cuando aparece una nueva vela horaria: Si la hora de la vela horaria no coincide con el valor de la variable newbarall, entonces escribimos una nueva hora en la variable y cumplimos la condición.

La hora de apertura de la vela de una hora está impresa

- El valor de la parabólica se redondea a 4 decimales para que sea idéntico al que aparece en el gráfico.

 
konam1:

-Este diseño da una condición cuando se produce una nueva vela de una hora: Si el tiempo de la vela de una hora no coincide con el valor de la variable newbarall, entonces escribe un nuevo tiempo en la variable y rellena la condición.

La hora de apertura de la vela de una hora está impresa

- El valor de la parábola se redondea a 4 decimales para que sea idéntico al que aparece en el gráfico

1. No, no lo hace

2. Que sea así

3. ¿Estás seguro de que estás imprimiendo un número real con esa función?

4. ¿Por qué necesitas ; después del paréntesis de cierre?

 
Artyom Trishkin:

1. No, no lo hace

2. Que sea así

3. ¿Estás seguro de que estás imprimiendo un número real con esa función?

4. ¿Por qué necesitas ; después del paréntesis de cierre?


1. Sin embargo, el algoritmo sólo funciona en la apertura de una vela, ¿cuál es el error en tal construcción?

3. Los números impresos son 1,1820, por ejemplo, así que estoy seguro.

4. Se da una parte del código.

 
konam1:

1. sin embargo, el algoritmo sólo funciona en la apertura de una vela, ¿cuál es el error en tal diseño?

3. los números 1.1820 se imprimen por ejemplo, así que seguro.

4. se da una parte del código.

1. Bueno, tal vez me lo perdí, son las cinco y media de la mañana...

3. DoubleToString()

4. Pero tienes una condición y un operador compuesto:

if(condition) { }

No veo otra forma de interpretarlo. ¿Por qué necesita ";" después del operador?

 
konam1:
De ahí las siguientes preguntas:
¿Por qué la parábola de la barra cero se cuenta incorrectamente en estos momentos exactos?
Y, de hecho, cómo evitarlo, porque cuando la barra se abre el punto aparece y es estático sin recalcular durante la formación de la vela.
Por favor, ayuda). Gracias.

La afirmación "el punto aparece y es estático sin recalcular durante la formación de una vela" no es correcta, si el precio rompe la parábola, el punto se redibuja.
Es necesario recalcular la parábola cada tick, porque la ruptura puede ocurrir en cualquier momento, no sólo en la apertura de la barra.