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

 

Und noch eine Frage.

Wie macht man für (i=1; i<StartBar; i++) StartBar den Balken mit der angegebenen Biegung (extern int b= 2)des älteren Zeitrahmens (extern int = ... ; //W1, MN1)

 
Ermitteln Sie die Taktzeit und rechnen Sie sie auf die Taktnummer der älteren TF um.
 
FAQ:
Ermitteln Sie die Taktzeit und rechnen Sie sie auf die Taktnummer der älteren TF um.


Warum schreiben Sie den Code nicht selbst?

 
gince:


Wie macht man für (i=1; i<StartBar; i++) StartBar den Balken mit der angegebenen Biegung (extern int b= 2) des älteren Zeitrahmens (extern int = ... ; //W1, MN1)


Berichtigung

Abgleich von zwei Tops eines bestimmten Zeitraums (z. B. eine Woche und ein Monat)

 

Ist das der richtige Weg?

Bedingung tf1 >tf2

datetime GetExtremumZZ_2TF_Bars(string sy="", int tf1=0, int tf2=0, int ne=0, int dp=12, int dv=5, int bs=3) 
{
  if (sy=="" || sy=="0") sy=Symbol();
  double zz1, zz2, p1, p2;
  int    i, k1=iBars(sy, tf1), ke=0;
  int    j, k2=iBars(sy, tf2);
  datetime t;
  
  for (i=1; i<k1; i++) 
  {
    zz1=iCustom(sy, tf1, "ZigZag", dp, dv, bs, 0, i);
    if (zz1!=0) 
    {
      ke++;
      if (ke>ne) 
         {p1=zz1;}
    }
  }
  for (j=1; j<Bars; j++) 
  {
    zz2=iCustom(sy, tf2, "ZigZag", dp, dv, bs, 0, j);
    if (zz2!=0) 
    {
      p2=zz2;
      t=iTime(sy, tf2, j);
      if(p1==p2)
      return(t);
    }
  }
  return(0);
}
 

Die Frage lautet wie folgt. Im MQL4-Buch, das unter MQL4.community zufinden ist, heißt es im Kapitel "GlobalVariables" im Abschnitt "Eigenschaften von GV-Variablen": "GV-Variablen können nur den Typ double haben". Im Abschnitt "Funktion GlobalVariableDel()" finden Sie ein Beispiel für den Experten globalvar.mq4 mit dem folgenden Inhalt:

//--------------------------------------------------------------------
// globalvar.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
int    Experts;                                 // Колич. экспертов
double Depo=10000.0,                            // Заданный депозит
       Persent=30,                              // Заданный процент     
       Money;                                   // Искомые средства
string Quantity="GV_Quantity";                  // Имя GV-переменной
//--------------------------------------------------------------------
int init()                                      // Спец. функция init
  {
   Experts=GlobalVariableGet(Quantity);         // Получим тек. знач.
   Experts=Experts+1;                           // Колич. экспертов
   GlobalVariableSet(Quantity, Experts);        // Новое значение
   Money=Depo*Persent/100/Experts;              // Средства для эксп.
   Alert("Для эксперта в окне ", Symbol()," выделено ",Money);
   return;                                      // Выход из init()
  }
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
   int New_Experts= GlobalVariableGet(Quantity);// Новое колич. эксп.
   if (Experts!=New_Experts)                    // Если изменилось
     {
      Experts=New_Experts;                      // Теперь текущ. такое
      Money=Depo*Persent/100/Experts;           // Новое знач. средств 
      Alert("Новое значение для эксперта ",Symbol(),": ",Money);
     }
   /*
   ...
   Здесь долен быть указан основной код эксперта,
   в котором используется значение переменной Money
   ...
   */
   return;                                      // Выход из start()
  }
//--------------------------------------------------------------------
int deinit()                                    // Спец. ф-ия deinit
  {
   if (Experts ==1)                             // Если эксперт один..
      GlobalVariableDel(Quantity);              //..удаляем GV-перемен
   else                                         // А иначе..
      GlobalVariableSet(Quantity, Experts-1);   //..уменьшаем на 1
   Alert("Эксперт выгружен из окна ",Symbol()); // Сообщ. о выгрузке
   return;                                      // Выход из deinit()
  }
//--------------------------------------------------------------------

Frage: Warum sind in diesem Beispiel die GV-Variablen Expert und New_Expert vom Typ int, obwohl diese Variablen, wie bereits erwähnt , vom Typ double sein sollten?

Vielen Dank im Voraus für die Antwort

 
gince:

Ist das der richtige Weg?

Bedingung tf1 >tf2


Hier stimmt etwas nicht.

Im ersten Zyklus versuche ich, den Preis der angegebenen Kurve auf der hohen TF zu finden. Ich beginne den zweiten Zyklus auf der niedrigen TF, wo ich nach dem Preis jeder Kurve auf den Balken suche, solange sie auf dem Diagramm ist, und ihn mit dem Preis aus dem ersten Zyklus vergleiche. Wenn ich einen solchen Preis finde, gebe ich die Zeit des Balkens der gegebenen Kurve in diesem TF zurück.

Ich habe es ab 2000.01.01 im Testgerät gestartet.

Was im Protokoll steht

2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1688
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2495
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1192
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2315
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1069
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3161
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2351
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.4535
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.338
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.4249
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.416
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2596
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3353
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2658
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3138
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0344
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1537
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0608
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1216
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.079
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2401
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0104
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0917
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 0.8227
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 0.9596
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: t1 1992.09.01 00:00
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p1 1.4104

Dasselbe gilt für das Jahr 2000, d. h. für den Beginn des Testzeitraums.

Wo liegt der Fehler? Ich bin ein schwacher Programmierer. Ich möchte ein Testprogramm schreiben. Es fällt mir schwer, damit umzugehen. Ich kann den Programmierer nicht darum bitten, weil es schrittweise geschieht, je nachdem, welche Daten ich erhalten habe.

Ich brauche hier etwas Hilfe. Ich habe auf der vorherigen Seite auch um Hilfe gebeten, um die Funktion NewZZ() zu schreiben.

Ich wäre dankbar, wenn jemand Fehler korrigieren und erklären würde.

datetime GetExtremumZZ_2TF_Bars(string sy="", int tf1=0, int tf2=0, int ne=0, int dp=12, int dv=5, int bs=3) 
{
  if (sy=="" || sy=="0") sy=Symbol();
  double zz1,  zz2, p1, p2;
  int    i, k1=iBars(sy, tf1), ke=0;
  int    j;
  datetime t;
  
  for (i=1; i<k1; i++) 
  {
    zz1=iCustom(sy, tf1, "ZigZag", dp, dv, bs, 0, i);
    if (zz1!=0) 
    {
      ke++;
      if (ke>ne) 
         {p1=zz1;datetime t1=iTime(sy,tf1,i);}
    }
    
  }
  Print("                                  p1   " ,p1);
  Print("                                  t1   ", TimeToStr(t1,  TIME_DATE|TIME_MINUTES));
  for (j=1; j<Bars; j++) 
  {
    zz2=iCustom(sy, tf2, "ZigZag", dp, dv, bs, 0, j);
    if (zz2!=0) 
    {
      p2=zz2;
      Print("p2=   ",p2);
      t=iTime(sy, tf2, j);
      if(p1==p2)
      {
         Print("skaiciavimo pradzia nuo   ",TimeToStr(t, TIME_DATE|TIME_MINUTES));
         return(t);
      }
    }
  }
  return(0);
}
 
gince:


Hier stimmt etwas nicht.

Helfen Sie den Schwachen.

 

Guten Tag. Ich habe auf der Website eine Nachlauffunktion gefunden:

for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) weiter;
if(Auftragsart()==OP_BUY)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop_)
{
{ if(OrderStopLoss()<Bid-Point*TrailingStop_)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop_,OrderTakeProfit(),0,Green);
zurück(0);
}
}
}

if(OrderType()==OP_SELL)
{
if((OrderOpenPrice()-Ask)>(Punkt*TrailingStop_))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop_)) || (OrderStopLoss()==0)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop_,OrderTakeProfit(),0,Red);
zurück(0);
}
}
}
}

Beim Testen der Strategie funktioniert diese Funktion nach der Eröffnung der ersten Order einwandfrei, d. h. das Trailing läuft und die Order wird geschlossen. Aber nach dem Öffnen der zweiten Ordnung tritt ein Fehler bei der Nullteilung auf, wenn man sich auf die nachgestellte Funktion bezieht. Bitte helfen Sie mir, die Nachlauffunktion für die zweite Ordnung, die dritte Ordnung usw. zu aktivieren.

 
Ich kann nicht für das gesamte Forum sprechen, aber ich persönlich bin besessen davon, wenn ich eine Quelle ohne Einrückung sehe, dass es sinnlos ist, dem Autor etwas zu erklären.