Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 383

 
konam1:
Buon pomeriggio a tutti. Tracciando i valori della parabolica all'apertura di ogni candela oraria.
Quando lo faccio passare attraverso la storia, l'iSAR della barra zero coincide con il punto sul grafico, tranne quando la parabolica cambia posizione dall'alto al basso e viceversa.
se (newbarall!=(iTime(Symbol(),60,0))
{
newbarall=iTime(Symbol(),60,0);
Stampa (iTime(Symbol(),60,0));
Print ("SAR = ",NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),Digits);
};
Da qui le seguenti domande:
Perché la barra zero parabolica viene contata in modo errato proprio in questi momenti?
E, in realtà, come evitarlo, perché quando la barra si apre, il punto appare ed è statico senza ricalcolo durante la formazione della candela.
Per favore, aiutatemi). Grazie!

Se osservate il punto parabolico sulla candela zero, dopo tutto non è statico - cambia la sua posizione, e non solo quando si cambia posizione su e giù, ma in generale - a volte si sposta leggermente in una posizione (senza andare su e giù)

 

Ciao, potresti dirmi perché le linee orizzontali non vengono cancellate?

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

Questo fa parte dell'intero codice. Posterò l'intero codice se necessario


Grazie

 

- Voglio imparare a scrivere un EA in MT4 o MT5, ho bisogno di uno scrittore EA esperto che possa spiegare tutte le sfumature del codice in pratica e aiutarmi a scrivere il codice. Non ho bisogno di aiuto per scrivere un EA già pronto, ho una certa esperienza di trading e idee per controllare tutto nel test e capire come utilizzare in condizioni, ho bisogno di imparare a scrivere diverse condizioni.

 
Artyom Trishkin:

Se osservate il punto della parabolica sulla candela zero, dopo tutto non è statico - cambia la sua posizione, e non solo quando si cambia posizione su e giù, ma in generale - a volte si sposta un po' in una posizione (senza transizione su/giù)


Ciononostante, la storia è una corrispondenza completa, tranne che per i momenti di "transizione". Mi accontento anche di un errore di 1-2 punti. Alla "transizione" potrebbe essere di 20 pips o più.

La domanda è la stessa, come evitarlo. Grazie

 
konam1:

Ciononostante, la storia è una corrispondenza completa, tranne che per i momenti di "transizione". Mi accontento anche di un errore di 1-2 punti. Alla "transizione" potrebbe essere di 20 pips o più.

La domanda è la stessa, come evitarlo. Grazie

Ma cos'è questa costruzione?

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

Che cosa dà?

Perché stampate l'ora in questo modo?

E perché stampate il valore della parabolica in questo modo?

 
Artyom Trishkin:

Ma che tipo di design è questo?

Qual è il vantaggio di un tale design?

Perché stampate l'ora in questo modo?

Perché stampate il valore della parabolica in questo modo?


-Questa costruzione dà l'adempimento della condizione quando appare una nuova candela oraria: se il tempo della candela oraria non corrisponde al valore nella variabile newbarall, allora scriviamo un nuovo tempo nella variabile e adempiamo la condizione.

Il tempo di apertura della candela di un'ora è stampato

- Il valore della parabola è arrotondato a 4 cifre decimali per essere identico a quello mostrato sul grafico.

 
konam1:

-Questo disegno dà una condizione quando si verifica una nuova candela di un'ora: se il tempo della candela di un'ora non corrisponde al valore nella variabile newbarall, allora scrivi un nuovo tempo nella variabile e compila la condizione.

Il tempo di apertura della candela di un'ora è stampato

- Il valore parabolico è arrotondato a 4 cifre decimali per essere identico a quello mostrato sul grafico

1. No, non lo fa

2. Che sia così

3. Sei sicuro che stai stampando un numero reale con quella funzione?

4. Perché avete bisogno di ; dopo la parentesi di chiusura?

 
Artyom Trishkin:

1. No, non lo fa

2. Che sia così

3. Sei sicuro che stai stampando un numero reale con quella funzione?

4. Perché avete bisogno di ; dopo la parentesi di chiusura?


1. Tuttavia, l'algoritmo funziona solo sull'apertura di una candela, qual è l'errore in una tale costruzione?

3. I numeri stampati sono 1,1820, per esempio, quindi sono sicuro.

4. Viene data una parte del codice.

 
konam1:

1. tuttavia, l'algoritmo funziona solo sull'apertura di una candela, qual è l'errore in un tale disegno?

3. i numeri 1.1820 sono stampati per esempio, quindi sicuro.

4. viene data una parte del codice.

1. Beh, forse me lo sono perso - sono le cinque e mezza del mattino...

3. DoubleToString()

4. Ma tu hai una condizione e un operatore composto:

if(condition) { }

Non vedo altro modo di interpretarlo. Perché avete bisogno di ";" dopo l'operatore?

 
konam1:
Da qui le seguenti domande:
Perché la barra zero parabolica viene contata in modo errato in questi momenti esatti?
E, in effetti, come evitarlo, perché quando la barra si apre il punto appare ed è statico senza ricalcolo durante la formazione della candela.
Per favore, aiutatemi). Grazie!

L'affermazione "il punto appare ed è statico senza ricalcolo durante la formazione di una candela" non è corretta, se il prezzo rompe la parabolica, il punto viene ridisegnato.
Devi ricalcolare la parabolica ogni tick, perché il breakout può avvenire in qualsiasi momento, non solo all'apertura della barra.

Motivazione: