Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 834

 
Pavel Nikiforov:
Bitte erläutern Sie, worin das Problem besteht. Die Funktion soll alle offenen Positionen durchsuchen und die Anzahl der Positionen mit einer bestimmten magischen Zahl berechnen. Tatsächlich wählt er nur einen aus der Liste aus, die von einem anderen EA mit demselben Ticket und derselben Magik geöffnet wurde, und daher ist die Anzahl immer =0.

Ich habe es selbst herausgefunden, die Auswahl muss überPositionGetSymbol erfolgen:

//+------------------------------------------------------------------+
int OpenPositions()//проверка открытых позиций по Magic number 
  {
   int count=0;
     for(int z=PositionsTotal()-1; z>=0; z --) // Перебор всех позиций
     {
       if(PositionGetSymbol(z)!=_Symbol) // Найдена позиция с заданным символом
        {
         Print(__FUNCSIG__" позиция не выбрана ",GetLastError()); continue;
        }
      long  ticket = PositionGetInteger(POSITION_TICKET);
            Print(__FUNCSIG__" ТИКЕТ ", IntegerToString(ticket));
      ulong myMN=PositionGetInteger(POSITION_MAGIC);
            Print(__FUNCSIG__" МАГИК ", IntegerToString(myMN));
      if(myMN==Magic)
            count++;
     }
   return(count);
  }
//+------------------------------------------------------------------+
 
Pavel Nikiforov:

Ich habe es selbst herausgefunden, die Auswahl muss mitPositionGetSymbol getroffen werden:

Nicht gut durchdacht. Sie müssen das Hadge-Konto mit der Funktion PositionGetTicket(i) auswählen und dann das Symbol und die Magie überprüfen.

Документация по MQL5: Торговые функции / PositionGetTicket
Документация по MQL5: Торговые функции / PositionGetTicket
  • www.mql5.com
Торговые функции / PositionGetTicket - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von MQL4 MT4 MetaTrader 4 Anfängern" verschoben.
 
Alexey Viktorov:

Es ist nicht gut, das herauszufinden. Sie müssen das Hadge-Konto mit der Funktion PositionGetTicket(i) auswählen und dann das Symbol und die Magie überprüfen.

Ja, das ist besser, die anderen Funktionen waren in der Demo auch fehlerhaft, aber jetzt funktioniert es.

 

Hallo, könnten Sie mich zu diesem Indikator https://www.mql5.com/ru/forum/94447#comment_6780067 beraten?

Es zeigt rote und blaue Kreise auf dem Chart an, wenn sich der Preis drastisch ändert, d.h. wenn sich der Preis um 4 Pips oder mehr ändert,

Ich brauche diese Signale, um nur zu gehen, wenn der Preis von 10 Pips oder mehr ändert

Dateien:
1.png  48 kb
 
yesterday35:

Hallo, könnten Sie mich zu diesem Indikator https://www.mql5.com/ru/forum/94447#comment_6780067 beraten?

Es zeigt rote und blaue Kreise auf dem Diagramm an, wenn sich der Preis drastisch ändert, d.h. wenn sich der Preis um 4 Pips oder mehr ändert,

Ich möchte, dass diese Signale nur dann ausgelöst werden, wenn sich der Kurs um 10 Pips oder mehr ändert.

Dieser Indikator berechnet nicht die Pips, sondern das Sigma oder die RMS (root-mean-square deviation). Auf eine Stichprobe der letzten N Ticks (standardmäßig 50). Es wird ein Kanal von 3 Sigmas gebildet. Wenn der Preis aus dem Kanal herausgesprungen ist, wird er diese Stelle markieren. Das Hauptproblem besteht jedoch darin, dass die ursprüngliche Preisreihe nicht normalverteilt ist und sehr starke Schwänze aufweist. In der Tat ist dieser Indikator eine Spielhilfe.

 

Hallo.

Ich schreibe ein kleines Programm. Ich befinde mich in einer völlig unverständlichen Situation.

In meinem Code gibt es diese beiden Zeilen. Sie stehen ganz am Ende von OnTester() und befinden sich nicht in der Schleife.

Print("Мат ожидание ставки  ",MatOgidanieStavk(KKef,VVer,Stavka)," Ставка ",Stavka);
Print("Ставка =",Stavka);

Und hier ist ein völlig unerwartetes Ergebnis der Ausführung dieser Zeilen.

Мат ожидание ставки  447.0461599959392 Ставка -1.0
Ставка =3912.820000338397

Hier ist die Definition der FunktionMatOgidanieStavk

double MatOgidanieStavk(double Kef,double Ver,double &BestStavka)
{
 .......... 
   BestStavka=-1;// Первое обращении к этой переменой.
............
return MatOgidanie;
}
 
pivomoe:

Hallo.

Ich schreibe ein kleines Programm. Ich befinde mich in einer völlig unverständlichen Situation.

In meinem Code gibt es diese beiden Zeilen. Sie stehen ganz am Ende von OnTester() und befinden sich nicht in der Schleife.

Und hier ist ein unerwartetes Ergebnis der Ausführung dieser Zeilen.

Hier ist die Definition der FunktionMatOgidanieStavk

Stavka wird vor dem Druck initialisiert?

Wie wird festgestellt, dass der Aufruf der erste innerhalb der Funktion ist?

Welches Ergebnis haben Sie erwartet?

 

Ich danke Ihnen. Ich habe das Problem gelöst.

Es stellte sich heraus, dass dieStavka-Variable vor Print. gleich -1 war. Sein Wert wurde an die Funktion Drucken übergeben und als Kopie gespeichert. Meine FunktionMatOgidanieStavk hat die VariableStavkaselbst geändert, nicht ihre Kopie, die gedruckt wird.

 
So sollte es auch sein.

2795/2797 wird 0 sein, da nicht gerundet wird. Entweder s3 = (double)s2/s1; oder double für s2 und s1 wählen

Grund der Beschwerde: