[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 137

 
hoz:

Im Moment lautet die Aufgabe: fastMa hat slowMa nach oben durchquert... Wir suchen also nach einem Ort, an dem wir sie kaufen können. Dann warten wir, bis der Preis d.h. Ask (da wir den Kauf in Betracht ziehen) fastMa erreicht ( nun, ich denke, es wird keinen exakten Wert geben, wir brauchen +- eine gewisse Abweichung, und diese wird durch i_thresholdFromMa verändert) und sobald der Preis fastMa +- i_thresholdFromMa erreicht, sollte der Expert Advisor BUYSTOP bei (fastMa + buyHear * pt) setzen.

Was ich mir ausgedacht habe, funktioniert nicht in einem Terminal und nicht immer in einem anderen. Irgendetwas stimmt generell nicht.

Die letzte Variante der Funktion buyHear hier:

Hier sind die Eingabeparameter:

Die Fehler sind auf dem Screenshot zu sehen (in OrderSend() wird der Preis oberhalb des roten Stabes eingegeben, und der Auftrag liegt, wie auf dem Screenshot zu sehen, unter ....):

Ich war für ein paar Tage weg... Ich frage mich - haben die gleichen Parameter die Stäbe, die auf dem Diagramm geworfen werden, wie die Stäbe, die in den Berechnungen verwendet werden? Vielleicht ist der Hund dort begraben?

(Ich hatte noch keine Zeit, mich mit dem Code zu befassen und ihn zu zerlegen).

Ich würde z.B. eine Funktion erstellen:

//-----------------------------------------------------------------------------+
double ma(int MAperiod, int MAmethod, int MAshift) {return (iMA(Symbol(), Period(), MAperiod, 0, MAmethod, PRICE_OPEN,MAshift));}
//-----------------------------------------------------------------------------+

und rufen es auf, um die Parameter zu erhalten

 

Hallo, können Sie uns bitte beraten! Ein Indikatorsignal hat ein Kaufsignal ausgelöst, ich eröffne eine Order erst nach Bestätigung der nächsten beiden Kerzen nach oben.

 
Top2n:

Hallo, können Sie mir bitte einen Rat geben! Ein Indikatorsignal hat ein Kaufsignal ausgelöst, ich eröffne eine Order erst nach Bestätigung der nächsten beiden Kerzen nach oben.


Überprüfen Sie also, ob die letzten beiden Kerzen nach oben zeigen und ob die Bedingung, einen Auftrag zu eröffnen, vor zwei Bars zur gleichen Zeit erfüllt ist.
 
Roger:

Überprüfen Sie also, ob die letzten beiden Candlesticks nach oben zeigen und ob die Bedingung erfüllt ist, einen Auftrag zwei Balken zurück zu eröffnen.

Wie mache ich das?

 if (bay_min == true) сработал сигнал на покупку ждем подтверждение
  
 if (Open[1]<Close[1] && Open[2]<Close[2] )
   
 if (Bars(2).............


Und wenn ja, wird das Signal ausgelöst, warten Sie auf die Bestätigung, nur nach einer Bar nach oben oder unten 2 Bars.

Wir brauchen es, um die Bar auf das Signal, die Bar nach dem Signal, vergleichen sie, wenn die beiden sind aufsteigend oder absteigend, dann .....

 
Top2n:

Wie mache ich das?


Wenn das Signal funktioniert hat, warten wir auf die Bestätigung, aber nachdem der Balken nach oben oder unten geht.

Es sollte sich den Balken vor dem Signal und den Balken nach dem Signal merken und vergleichen, ob die beiden auf- oder absteigend sind, dann .....

Zeigen Sie, wie Sie bay_min bekommen haben.
 
Top2n:

Wie mache ich das?


Wenn das Signal funktioniert hat, warten wir auf die Bestätigung, aber nachdem der Balken nach oben oder unten geht.

Es sollte sich den Balken vor dem Signal und den Balken nach dem Signal merken und vergleichen, ob die beiden auf- oder absteigend sind, dann .....



if (bay_min == true)   datetime T=Time[0] //сработал сигнал на покупку запоминаем время  бара

if(iBarShift(NULL,0,T)==2) //по времени, сигнал был на 2 баре
   {   
  if (Open[1]<Close[1] && Open[2]<Close[2] )   //и эти бары бичьи 
     { 
    // что-то делаем
     }
   }
   
// я думаю, как-то так.
 
Frage für Expert Advisors

Ich schreibe einen einfachen Expert Advisor und stoße dabei auf eine Menge Probleme.

Die Bedingung ist

Ich merke mir den Schlusskurs des aktuellen Balkens und gebe ihn in die Variable Startprice ein, wenn der vorherige 4.


Wenn die Bedingung erfüllt ist, wird ein Symbol gezeichnet, das den Schlusskurs des Balkens, d. h. den Startpreis, anzeigt.

Bei mir wird das Symbol zwar gezeichnet, aber nur einmal, während ich es jedes Mal brauche.

Der Schlusskurs des Balkens stimmt nicht mit dem Startpreis bei 0,00001 überein. Warum und wie kann ich das beheben?

Versuchtes Runden und Trimmen auf 5 Stellen hat nicht geholfen(

Im Protokoll mit dem Druck nenne ich den Wert Startprice, zeigt die Zahl nur bis zu 4 Ziffern und weniger.

Wie lässt sich die gleiche Genauigkeit wie im Datenfenster des Terminals erreichen?

Dieses Problem mit dem Dezimalpunkt gilt auch für den Schieberegler selbst. Wenn Sie die Werte über print aufrufen, können Sie nicht mehr als 4 Ziffern im Protokoll erhalten.



#property copyright "Zuly"


 extern int MA_Period = 50; //периуд Ма
extern int MA_Method =MODE_SMA;     //Метод усреднения скользящего среднего. Может быть любым из значений методов скользящего среднего (Moving Average):
                              //*MODE_SMA 
                              
 extern int Maximum_History = 0;         //Ограничение истории для расчетов, если 0 то расчет всей истории
 
   
    
   //начало кода советника
int start()


{      
    double MA4;                                // Значение МА на 4 баре 
    
    double Startprice;
    
   { 
   MA4=iMA(NULL,0,MA_Period,0,MA_Method,PRICE_CLOSE,4); 
 
   
                       if  (Low[4]< MA4 && MA4 < High[4]) //условия если 4-я свеча лежит в скользящей
  
  {    
  
   Startprice=Close[0];
  
    //   Startprice=NormalizeDouble(Close[0],5); // пробуем округлить до 5-го знака, не помогло 
 
    //  Startprice=MathFloor(Close[0]*100000)/100000; // пробуем обрезать до 5-го знака не помогло
      
  
  
     
      //Print (Startprice); // распечатаем Startprice
     
      
   datetime TmR1=Time[0]; // запоминаем время текущего бара? 

   

   
       ObjectCreate("Rep1",OBJ_ARROW, 0, TmR1, Startprice); // создаем обьект 
      ObjectSet("Rep1", OBJPROP_COLOR, White); // устанавливаем обьект на график
       ObjectSet("Rep1", OBJPROP_ARROWCODE,71); 
      
     return(0); 
 
 
 
}} }    
   
Prüfparameter und -zeit
 
Verwenden Sie DoubleToStr(number, Digits) zur Ausgabe. Anstelle von Ziffern können Sie die gewünschte Genauigkeit angeben. Fügen Sie dem Namen des Symbols die Uhrzeit des Balkens hinzu, an dem Sie das Symbol einstellen.
 
artmedia70:
Verwenden Sie DoubleToStr(number, Digits) für die Ausgabe. Anstelle von Ziffern können Sie die gewünschte Genauigkeit angeben. Fügen Sie dem Namen des Symbols die Uhrzeit des Balkens hinzu, an dem Sie das Symbol einstellen.


wenn ja

Startprice=DoubleToStr(Close[0],5);

es funktioniert nicht, es wird '=' verantwortlich gemacht - inkompatible Typen C:\fortest\experts\sve.mq4 (34, 14)

Wie schreibe ich es richtig?

Danke für die Antwort, ich kämpfe schon seit einer Woche mit diesem Problem.)

 
artmedia70:
Verwenden Sie DoubleToStr(Zahl, Ziffern). Sie können anstelle von Digits die gewünschte Genauigkeit angeben. Fügen Sie dem Namen des Symbols die Taktzeit hinzu, wenn Sie das Symbol einstellen.

aber was die Ausgabe betrifft, so verstehe ich, dass der Drucker nur 4 oder weniger Ziffern druckt.

then if Drucken (DoubleToStr(Startpreis,5)); // Startpreis drucken

gibt es 5.

Aber hier ist, wie man die Zeit der Bar hinzufügen.

Diese Zeile fügt nicht die Zeit des Taktes hinzu?

  datetime TmR1=Time[0];