[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 125

 
pyatka__ASD:
Können Sie mir sagen, ob jemand eine Software hat, die eine hohe und niedrige Zickzack-Extremum-Verbindung hat. Danke

Ich weiß nicht, welche Verbindung Sie brauchen, aber... So bestimme ich im EA, welches Zickzack-Extremum verfügbar ist - niedrig oder hoch, hoffentlich finden Sie, was Sie brauchen:

//-----------------------------------------------------------------------------------------------------------------   
   if (op==OP_BUY)
      {
         for (m=1; m<=CalcBarsLimit; m++)                      // Найдём первый перелом ЗЗ слева от первого бара
            {
               zz=iCustom(sy, tf, "ZigZag", dp, dv, bs, 0, m); // Берём данные 0 буфера ЗЗ с бара m
               if (zz!=0 &&                                    // Если первый экстремум верхний
                  NormalizeDouble(zz, dg)==NormalizeDouble(iCustom(sy, tf, "ZigZag", dp, dv, bs, 1, m), dg))
                     return(false);                            // Валим отсюда
               else if (zz!=0 &&                               // Если первый экстремум нижний
                        NormalizeDouble(zz, dg)==NormalizeDouble(iCustom(sy, tf, "ZigZag", dp, dv, bs, 2, m), dg)) 
                  {
                     if (MathRound((KLevel-zz)/pt)>=DistanceMIN &&         // Если расстояние от ZZ до KLevel ...
                         MathRound((KLevel-zz)/pt)<=DistanceMAX)           // ... в заданных пределах
                        {
                           if (Open[1]<KLevel && 
                               Close[1]>KLevel &&
                               pa>KLevel)
                              {
                                 Fibo0_PriceB=zz;                                   // Сохраним цену излома ZZ
                                 Fibo23_PriceB=pa;                                  // Сохраним цену 23 фибы
                     
                                 nmKLB=DoubleToStr(Time[m], 4);                     // имя метки
                                 SetArrow(5, DeepSkyBlue, nmKLB, Time[m], zz, 1);   // Отмечаем излом ЗЗ на графике
                                 return(true);
                              }
                        }       
                  }
            }
      }
//-----------------------------------------------------------------------------------------------------------------   
   if (op==OP_SELL)
      {
         for (m=1; m<=CalcBarsLimit; m++)                      // Найдём первый перелом ЗЗ слева от первого бара
            {
               zz=iCustom(sy, tf, "ZigZag", dp, dv, bs, 0, m); // Берём данные 0 буфера ЗЗ с бара m
               if (zz!=0 &&                                    // Если первый экстремум нижний
                  NormalizeDouble(zz, dg)==NormalizeDouble(iCustom(sy, tf, "ZigZag", dp, dv, bs, 2, m), dg))
                     return(false);                            // Валим отсюда
               else if (zz!=0 &&                               // Если первый экстремум верхний
                        NormalizeDouble(zz, dg)==NormalizeDouble(iCustom(sy, tf, "ZigZag", dp, dv, bs, 1, m), dg)) 
                  {
                     if (MathRound((zz-KLevel)/pt)>=DistanceMIN &&         // Если расстояние от ZZ до KLevel ...
                         MathRound((zz-KLevel)/pt)<=DistanceMAX)           // ... в заданных пределах
                        {
                           if (Open[1]>KLevel && 
                               Close[1]<KLevel &&
                               pb<KLevel)
                              {
                                 Fibo0_PriceS=zz;                                // Сохраним цену излома ZZ
                                 Fibo23_PriceS=pb;                               // Сохраним цену 23 фибы
                     
                                 nmKLS=DoubleToStr(Time[m], 4);                  // имя метки
                                 SetArrow(5, BurlyWood, nmKLS, Time[m], zz, 1);  // Отмечаем излом ЗЗ на графике
                                 return(true);
                              }
                        }       
                  }
            }
      }

   return(false);
}
//-------------------------------------------------------------------------------

ZS... Der Code ist grob und nicht optimiert. Ich hoffe, Sie wissen, dass es besser ist, zwei normalisierte Werte zu subtrahieren und das Ergebnis auf Null zu überprüfen...

 
alsu:

Sie können. Zurück zu den Parametern.

Wie? Wenn eine Variable innerhalb von start deklariert wird, können Sie sie dann return_value1 zuweisen?
 
eddy:
Wie? Wenn eine Variable innerhalb von start deklariert wird, können Sie sie return_value1 zuweisen?

Ja, dies wird als Übergabe eines Parameters per Referenz bezeichnet. Wenn eine Funktion normal deklariert ist, bewirkt ihr Aufruf, dass alle Variablen, die als formale Parameter übergeben werden, in die lokalen Variablen der Funktion kopiert und behandelt werden. Das Kopieren wird nicht durchgeführt, wenn Parameter per Referenz übergeben werden, d.h. die Funktion arbeitet mit ihren Originalen, nicht mit ihren Kopien. Dementsprechend bleiben alle Änderungen, die im Funktionscode mit diesen Parametern vorgenommen werden, nach der Rückkehr aus dem Funktionscode wirksam.

Um einen Parameter per Referenz zu übergeben, geben Sie diese Methode in der Funktionsdeklaration an, indem Sie das Zeichen & vor den Bezeichner des gewünschten Parameters setzen.

 

Beispiel (als Skript kompilieren und prüfen)

void Func1(double a)
{
   a=a*2;
}

void Func2(double &a)
{
   a=a*2;
}

int start()
{
   double a=5;

   Func1(a);
   
   Print(a); //выведет 5

   Func2(a);
   
   Print(a); //выведет 10
}
 
eddy:
5*5=5?))
nicht mit 5, sondern mit 2 multipliziert wird. Im ersten Fall wird der Parameter a "als Wert" übergeben und sein Inhalt wird nach dem Verlassen der Funktion nicht gespeichert, im zweiten Fall wird er als Referenz (double &a) übergeben, so dass der geänderte Wert, d.h. 5*2=10, nach dem Verlassen der Funktion Func2 in der Variablen a enthalten sein wird.
 

cool:)

Wie wäre es damit?

double a=5;

   Print(Func2(a));
 
eddy:


Wie wäre es damit?

das wären dann zehn. Es ist übrigens schneller zu prüfen als zu fragen)))
 

Der Computer ist mit Berechnungen beschäftigt, so dass ich es im Moment nicht selbst überprüfen kann.

Es gibt ein Stück Code wie dieses:

   if(DecreaseFactor>0){
      for(int cnt=OrdersHistoryTotal()-1; cnt>=0; cnt--){
        if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY)){ 
          if(OrderMagicNumber()==Magic){
            if(OrderSymbol()==Symbol()){
              if(OrderType()<2){ 
                  if(OrderProfit()>0) break;
                  if(OrderProfit()<0) losses++;
       } } } } } 
      if(losses>1) Lot=NormalizeDouble(Lot-Lot*losses/DecreaseFactor,1);
    }

Google hat mehrere Wiederholungen dieses Codes gefunden, so dass ich davon ausgehe, dass er funktioniert.

Allerdings ist diese Linie

Lot=NormalizeDouble(Lot-Lot*losses/DecreaseFactor,1);

ist verwirrend.

Wenn DecreaseFactor=3 und Verluste=3, dann erhalten wir nach der Formel Lot=0 !!!

Wenn die Verluste>3 sind, erhalten wirLot<0!!!

Ist das möglich?

 
Wie hoch sind dann die Verluste und der DecreaseFactor ?
 
eddy:

cool:)

Wie wäre es damit?

wird es nichts bewirken. Die Funktion Funk2 - gibt keinen Wert zurück. Sie ist ungültig
Grund der Beschwerde: