Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 317

 
voron_026:

HalloAleksey Vyazmikin Ich habe vor kurzem mit der Programmierung begonnen. Ich fange langsam an, mich mit dem Thema zu beschäftigen.

Ich habe versucht, es auf diese Weise zu machen:

Das erste Rechteck wird gezeichnet, die übrigen werden nicht gezeichnet. Ich versuche immer noch herauszufinden, wie man das macht. Danke für die Tipps und was meinen Sie mit untypischem Stil?


Sind Sie sicher, dass ein Objekt gezeichnet wird und nicht mehrere an denselben Koordinaten?

Sie haben Punktkonstanten.

datetime time0 = iTime(Symbol(),PERIOD_H4,0);
datetime time1 = iTime(Symbol(),PERIOD_H4,1);
double open0 = iOpen(Symbol(), PERIOD_H4,0);
double open1 = iOpen(Symbol(), PERIOD_H4,1);
double close1 = iClose(Symbol(), PERIOD_H4,1);
double high1 = iHigh(Symbol(), PERIOD_H4,1);
double low1 = iLow(Symbol(), PERIOD_H4,1);

Definieren Sie sie entweder in einer Funktion oder direkt im Code bei der Erstellung eines Objekts...

Über die Typizität - Ihre Berechnungsfunktion ist verdreht und ein solcher Ausdruck if(!...) wird nach meinen Beobachtungen nicht von vielen Anfängern verwendet.

 

Hallo!


Können Sie uns bitte beraten:

Wie kann man die Position eines Indikators (I-1) im Verhältnis zu einem anderen Indikator (I-2), der auf ihm aufbaut (I-1), berechnen?


Zum Beispiel:

Die Position des RSI im Verhältnis zum Bollinger.

Ich dachte, Sie können die Daten anstelle von Preisberechnungen ersetzen

 RSI = iRSI(Symbol(), TimeFrame, 14, PRICE_CLOSE, 1);
 BB  = iBands(Symbol(), TimeFrame, 34, 1, 0, RSI, MODE_UPPER, 1);
Aber ich erhalte eine Fehlermeldung.
 
Ras al Ghul:

Hallo!


Können Sie uns bitte beraten:

Wie kann man die Position eines Indikators (I-1) im Verhältnis zu einem anderen Indikator (I-2), der auf ihm aufbaut (I-1), berechnen?


Zum Beispiel:

Die Position des RSI im Verhältnis zum Bollinger.

Ich dachte, es wäre möglich, die Daten anstelle des Preises der Berechnung zu ersetzen

aber es gibt einen Fehler.

Es ist nicht einmal klar, wie Sie bb auf RSI gebaut haben, d.h. das Bild ist klar, wie gemacht...


double  iBands( 
   string       symbol,           // имя символа 
   int          timeframe,        // таймфрейм 
   int          period,           // период 
   double       deviation,        // кол-во стандартных отклонений 
   int          bands_shift,      // сдвиг относительно цены 
   int          applied_price,    // тип цены 
   int          mode,             // индекс линии 
   int          shift             // сдвиг 
   );

Ihr Preistyp ist nicht korrekt - Sie müssen es mit

double  iBandsOnArray( 
   double       array[],          // массив 
   int          total,            // количество элементов 
   int          period,           // период 
   double       deviation,        // кол-во стандартных отклонений 
   int          bands_shift,      // сдвиг относительно цены 
   int          mode,             // индекс линии 
   int          shift             // сдвиг 
   );
 
Aleksey Vyazmikin:

Zur Typizität - Ihre Berechnungsfunktion ist verdreht und ein solcher Ausdruck if(!...) wird nach meinen Beobachtungen von sehr wenigen Anfängern verwendet.


Ich verstehe, was Sie meinen. Vielleicht entwickle ich meinen eigenen Stil. Ich verwende gerne den if(!...)-Operator in diesem Format. Und ich habe die Berechnungsfunktion von jemand anderem, aber ich mag diese Logik

 
Aleksey Vyazmikin:

Es ist nicht einmal klar, wie Sie die RSI bb gebaut haben, d.h. das Bild ist so klar wie fertig...


Ihr Preistyp ist nicht korrekt - Sie müssen ihn über

Vielen Dank für Ihre Antwort!

Es wurde deutlich, worauf meine Gedanken gerichtet sind.


Das Bild dient zur Veranschaulichung mit Standard-MT4-Tools (entsprechend dem vorherigen/ersten Indikator).


Ich bin mit Arrays nur aus Java vertraut... Ich bin mit Arrays in Java vertraut, aber nur oberflächlich.

Wie erstelle ich sie und was muss ich dort eintragen?

F1 in MetaEditor und MQLQLQL-Assistent haben mir keine Klarheit verschafft...

 
voron_026:

Ich verstehe, was Sie meinen. Vielleicht entwickle ich meinen eigenen Stil. Ich verwende gerne den if(!...)-Operator in diesem Format. Die Berechnungsfunktion habe ich von jemand anderem, aber die Logik hat mir gefallen.


Ich kann sehen, dass Sie ein tiefgründiger Denker sind - viel Glück!

 
Ras al Ghul:

Vielen Dank für Ihre Antwort!

Es ist klar geworden, worauf ich meine Gedanken richten muss.


Das Bild dient zur Veranschaulichung mit Standard-MT4-Tools (entsprechend dem vorherigen/ersten Indikator).


Ich bin mit Arrays nur aus Java vertraut... Ich bin mit Arrays in Java vertraut, aber nur oberflächlich.

Wie erstelle ich sie und was muss ich dort eintragen?

F1 in MetaEditor und MQLQL-Lernen haben mir keine Klarheit gebracht...


Erstellen Sie ein Array und füllen Sie es in einer Schleife (z. B. for) mit dem Indikatorwert. Und dann die FunktioniBandsOnArray() verwenden.

 
Aleksey Vyazmikin:

Erstellen Sie ein Array und verwenden Sie eine Schleife (z. B. for), um es mit dem Indikatorwert zu füllen. Und dann die FunktioniBandsOnArray() verwenden.


Entweder ist Ihre Version sehr komplex oder ich verstehe den Wert nicht, von dem Sie sprechen...


double Array[], BB;  


 Array[1] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,1);
BB = iBandsOnArray(Array[1],0,34,1,0,MODE_UPPER,1);

Meine Variante erzeugt einen Fehler bei dem ausgewählten Fragment:

Array" - Array erforderlich.

Ist das nicht die Art und Weise, wie wir einen Indikatorwert in ein Array bekommen?


 
Aleksey Vyazmikin:

Sind Sie sicher, dass ein Objekt gezeichnet wird und nicht mehrere an denselben Koordinaten?



Ja, Sie haben Recht. Rechtecke werden mit denselben Koordinaten gezeichnet. Ich habe das Problem auf folgende Weise gelöst:

void OnTick()
{
Fun_New_Bar();

   if(UseDojiCandles = true && Doji() == 1 && New_Bar == true)
     {
      datetime time0 = iTime(Symbol(),TimeFrame,0);
      datetime time1 = iTime(Symbol(),TimeFrame,1);
      double open0 = iOpen(Symbol(), TimeFrame,0);
      double open1 = iOpen(Symbol(), TimeFrame,1);

      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вверх");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         
         DojiCandle ++;
     }
   

   
   if(UseDojiCandles = true && Doji() == -1 && New_Bar == true)
     {
      datetime time0 = iTime(Symbol(),TimeFrame,0);
      datetime time1 = iTime(Symbol(),TimeFrame,1);
      double open0 = iOpen(Symbol(), TimeFrame,0);
      double open1 = iOpen(Symbol(), TimeFrame,1);
      
      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вниз");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 

         DojiCandle ++;
     }
     

   
}
Ich habe eine VariableTimeFrame hinzugefügt, um den berechneten Zeitrahmen schnell zu ändern
 
Ras al Ghul:

Entweder ist Ihre Variante sehr kompliziert, oder ich verstehe den Wert nicht, von dem Sie sprechen...


In meiner Variante ist der hervorgehobene Teil ausgeschworen:

Array" - Array erforderlich.

Ist das nicht die Art und Weise, wie wir einen Indikatorwert in ein Array bekommen?


Array[1] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,1);
BB = iBandsOnArray(Array,0,34,1,0,MODE_UPPER,1);
Grund der Beschwerde: