[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 411

 
kolyango:

Wie man es macht:

Wenn Bedingung 1 erfüllt ist, wird sie nicht mehr bei jedem Tick geprüft, und bei den nächsten Ticks wird auch Bedingung 2 geprüft und dann auch Bedingung 3, bis alle Flaggen für falsch erklärt werden?

bool проверять_ус1=true;
bool проверять_ус2=true;
bool проверять_ус3=true;
void start(){
      if(проверять_ус1)
         if(Open[0]>Close[1]){//условие 1
            проверять_ус1=false; //заглушка
         }
      if(проверять_ус2)
         if(Open[0]<Close[2]){//условие 1
            проверять_ус2=false; //заглушка
         }
      if(проверять_ус3)
         if(Open[0]==Close[3]){//условие 1
            проверять_ус3=false; //заглушка
         }
      if(!проверять_ус1&&!проверять_ус2&&!проверять_ус3){
            проверять_ус1=true;
            проверять_ус2=true;
            проверять_ус3=true;      
      }
}

Lesen Sie den Code mehrmals, bis Ihnen klar ist, was dort steht, und Sie werden zufrieden sein.

 
costy_:

liest er die Daten des Balkens, der bereits (vorher) i+1 entfernt hat. Aber der Algorithmus des Urhebers wird gebrochen (er weiß es besser, ich arbeite auch mit offenen und generierten +1 Daten)


Wie der Ersteller sagt, dient i+1 nur zur Einspeisung von Daten aus einem anderen Indikator, dann wird die Aufgliederungsbedingung geprüft, aber alle weiteren Berechnungen werden mit i durchgeführt.

Das Problem ist, dass der Indikator nicht automatisch aktualisiert wird, sondern nur beim Nachladen (Änderung der TF, Änderung der Eigenschaften).

Ich verstehe nicht, was der Grund dafür ist.

Ich habe versucht, nur i zu verwenden, indem ich die Datenberechnung des gewünschten Indikators auf den vorherigen Balken am Ende des Zyklus geschoben habe, aber das hat nicht geholfen.

 
costy_:

Ich verstehe es immer noch nicht.

Es ist wahrscheinlich einfacher, es mit einem Bild zu erklären.


Ja, ich danke Ihnen! An der blau markierten Stelle müssen Sie die Kerze finden, die über dem Hoch auf D1 geschlossen hat.
 
costy_:

Lesen Sie den Code mehrmals, bis Ihnen klar ist, was dort steht, und Sie werden zufrieden sein.


Nochmals vielen Dank!
 
LOA:


Als Ersteller sage ich, dass i+1 nur für die Einspeisung von Daten aus einem anderen Indikator gedacht ist, dann wird geprüft, ob ein Ausfall vorliegt, aber alle weiteren Berechnungen basieren auf i.

Das Problem ist, dass der Indikator nicht automatisch aktualisiert wird, sondern nur beim Nachladen (Änderung der TF, Anzeige der Eigenschaften).

Ich verstehe den Grund nicht.

Ich habe versucht, nur i zu verwenden, indem ich die Datenberechnung des gewünschten Indikators auf dem vorherigen Balken an das Ende des Zyklus geschoben habe, aber das hat nicht geholfen.

Sie haben

           int  proboy_5_UP = iCustom (NULL,0,"ME_Proboy_F5_For_EX",0,i+1);/*запрос значения индикатора 

Ich vermute, dass es so sein sollte.

           double proboy_5_UP = iCustom (NULL,0,"ME_Proboy_F5_For_EX",0,i+1);/*запрос значения индикатора 
 
costy_:

Sie haben

Ich vermute, dass es so sein sollte.


nein.... Wir nehmen nicht den Kurswert, sondern den Indikatorwert (Histogramm), dessen Wert 1 oder -1 sein kann.
 
costy_:

Lesen Sie den Code mehrmals, bis Ihnen klar ist, was dort steht, und Sie werden zufrieden sein.


Wie schreibt man die Bedingungen eines solchen Codes um, das verstehe ich nicht.

static bool Val_max, Cl_dn, Val_min; //static or global
                                        |
//+------------------------------------------------------------------+
int start()
  {
   int j;
   double bid;                                         
   bid=Bid;                                    // Текущая цена продажи
   string
   Symb=Symbol();                               // Название фин.инстр.
double Value_max=1.0000;
double Value_min=0.9980;
double Open_1=Open[1];
double Close_1=Close[1];
//----

//--------------------------------------------------------------- 4 --

double Val=iCustom(NULL, 0, "Название Польз. Индикатора",0,0);   // Присваиваем пер. Val значение польз. индикатора
if (Условие1)
{
 Val_max=true;                  // 
 Alert("Значение инд. >= Value_max (исп. 1-е усл.)");
}
if (Условие2)
{
 Cl_dn=true;
 Alert("1 бар закрылся падением (исп. 2-е усл.)");
}
if (Условие3 && Cl_dn==true)
{
 Val_min=true;
 Alert("Значение инд. <= Value_min (исп. 3-е усл.)");
}
if (Val_max==true && Cl_dn==true && Val_min==true)
  {
   for (j = 0; j < OrdersTotal(); j++)
    {
     OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol() == Symbol())
      {
      if (OrderType() == OP_SELL) return(0);
      }
    }
   
   OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),2,Bid+400*Point,Bid-400*Point,"",3,Red);  // Открытие SELL
   Val_max=false; Cl_dn=false; Val_min=false;
  }

//----
   return(0);
  }
 
LOA:

nein.... Wir nehmen nicht den Preiswert, sondern den Indikator (Histogramm), der einen Wert von 1 oder -1 haben kann.

Ich kann immer noch nicht beantworten, wo sind die aufgerufenen inds, dass sie int double zurückgeben, können sie wirklich >1 sein, so dass int >0 zugewiesen wird und umgekehrt (zumindest *.ex4)?

ME_Proboy_F5_For_EX

ME_Order_ATR_For_EX

2011.12.07 18:10:42 Kann Datei \experts\indicators\ME_Proboy_F5_For_EX.ex4' auf dem AUDUSD,M30 nicht öffnen

Alles durch MACD ersetzt, alles funktioniert!

Dateien:
temp_1.mq4  14 kb
 
kolyango:


Wie schreibe ich die Bedingungen eines solchen Codes um, ich verstehe es nicht?

bool проверять_ус1=true;
bool проверять_ус2=true;
bool проверять_ус3=true;
void start(){
      if(проверять_ус1)
         if(Open[0]>Close[1]){//условие 1
            проверять_ус1=false; //заглушка
         }
      if(проверять_ус2)
         if(Open[0]<Close[2]){//условие 1
            проверять_ус2=false; //заглушка
         }
      if(проверять_ус3)
         if(Open[0]==Close[3]){//условие 1
            проверять_ус3=false; //заглушка
         }
      if(!проверять_ус1&&!проверять_ус2&&!проверять_ус3){
            проверять_ус1=true;
            проверять_ус2=true;
            проверять_ус3=true;      
      }
}

Lesen Sie den Code mehrmals, bis Ihnen klar ist, was dort steht, und Sie werden zufrieden sein.

Wozu brauchen Sie Flaggen?) Sie können auf sie verzichten.

   if(Close[i+3]>Open[i+3]&&Close[i+2]>Open[i+3]&&Close[i+2]<Close[i+3]&&Close[i]>Close[i+3]) //открываем бай

 
costy_:

Ich kann immer noch nicht beantworten, wo sind die aufgerufenen inds, dass sie int double zurückgeben, können sie wirklich >1 sein, so dass int >0 zugewiesen wird und umgekehrt (zumindest *.ex4)?

ME_Proboy_F5_For_EX

ME_Order_ATR_For_EX

2011.12.07 18:10:42 Kann Datei \experts\indicators\ME_Proboy_F5_For_EX.ex4' auf dem AUDUSD,M30 nicht öffnen

Ersetzte alles mit MACD, alles funktioniert!


Ja, der Indikator in der Historie funktioniert mit jedem getriggerten Indikator, funktioniert aber nicht in der Realität, geprüft auf M1.

Wenn ich Sie richtig verstanden habe, werde ich versuchen, die Bedingungen >0, <0 durch ==1 oder ==-1 zu ersetzen.

Grund der Beschwerde: