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

 
psyman:

Neverness, warum schreibst du das hier?

Eröffne einen separaten Thread in der Rinne und verteile dort Elefanten, Hut ab vor dir.

Nun, das habe ich dem Moderator gleich gesagt.

Lassen Sie uns, Herr Moderator, die Handelstheorie in einem separaten Thread diskutieren.

Der Moderator ist bisher dagegen.

Vielleicht hat der Moderator keine eigene "Handelstheorie".

 
inter78:

Hallo! Auch ich habe eine Frage zum Wechsel zwischen den Diagrammen. Es sind 28 oder 30 Karten geöffnet. Ich tausche sie mit Bedacht gegen Abkürzungen aus, und wenn sie der Bedingung entsprechen, öffne ich Positionen. Ich habe 10 oder 20. Oder 5. Das spielt keine Rolle. Das Wichtigste ist, dass der Rest im Weg ist und es keine Informationen über offene Stellen gibt. Ich habe versucht, IDs in globale Variablen zu übertragen. Aber es werden ganz andere Zahlen geliefert. Mir wurde erklärt, dass ID groß und verzerrt ist. Ich habe es mit einer Datei versucht. Die Rückgabe erfolgt in TXT und wird nicht in long umgewandelt. Ich habe die ID manuell in den Code eingegeben - es scheint zu funktionieren. Wenn ich das Feld verschiebe, öffnet sich das gewünschte Diagramm. Was muss ich richtig machen?

Double und Long haben die gleiche Länge - 8 Bytes.

Um einen long in einen double zu speichern (und umgekehrt), kann man "union" verwenden.


Zum Beispiel:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long id=ChartID();
   
   double X=LongToDouble(id);
   long   Y=DoubleToLong(X);
   
   Print("id=",id," X=",X," Y=",Y);
  }


//+------------------------------------------------------------------+
union eightbytes
   {
   double   dbl;
   long     lng;
   } VALUE;

double LongToDouble(long value)
   {
   VALUE.lng=value;
   return(VALUE.dbl);
   }

long DoubleToLong (double value)
   {
   VALUE.dbl=value;
   return(VALUE.lng);
   }
 
neverness:

Nun, ich habe dem Moderator sofort davon erzählt.

Lassen Sie uns, Herr Moderator, die Handelstheorie in einem separaten Thread diskutieren.

Der Moderator ist bisher dagegen.

Vielleicht hat der Moderator keine eigene "Handelstheorie".

Man muss in die Filiale der theoretischen Clowns gehen, wo sie gerne etwas zeichnen, das man nicht versteht und nicht weiß, warum.

Es gibt eine Menge ähnlicher Themen im Forum - diskutieren Sie sie doch wenigstens!

От теории к практике
От теории к практике
  • 2017.12.01
  • www.mql5.com
Добрый вечер, уважаемые трейдеры! Решил было на какое-то время покинуть форум, и сразу как-то скучно стало:)))) А просто читать, увы - неинтересно...
 
Taras Slobodyanik:

Double und long haben die gleiche Länge - 8 Bytes.

Um einen Long in einen Double (und umgekehrt) zu speichern, können Sie "union" verwenden.


Zum Beispiel:

Entschuldigen Sie, Taras, könnten Sie ein Stück Code haben, wie man die ID an eine globale Variable sendet und sie ohne Verzerrung abruft?
 
inter78:
Sorry Taras , können Sie nicht ein bisschen Code, wie man die ID zu einer globalen Variable zu senden und extrahieren Sie es ohne Verzerrung haben?

Es ist also alles fertig, wir müssen nur noch schreiben/lesen

string GVname="gvName";

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   //создаем временную глобальную переменную
   if (!GlobalVariableCheck(GVname))
      GlobalVariableTemp(GVname);
   
   long  id=ChartID();
   
   //сохраняем long как double
   GV_Save(LongToDouble(id));
   
   //читаем double и переводим в long
   long  Y=DoubleToLong(GV_Read());
   
   Print("id=",id," Y=",Y);
  }

//+------------------------------------------------------------------+
union eightbytes
   {
   double   dbl;
   long     lng;
   } VALUE;

double LongToDouble(long value)
   {
   VALUE.lng=value;
   return(VALUE.dbl);
   }

long DoubleToLong (double value)
   {
   VALUE.dbl=value;
   return(VALUE.lng);
   }


//+------------------------------------------------------------------+
double GV_Read()
{
if (!GlobalVariableCheck(GVname))
   GlobalVariableTemp(GVname);
   
return(GlobalVariableGet(GVname));
}
//+------------------------------------------------------------------+
void GV_Save(double value)
{
GlobalVariableSet(GVname, value);
}
 
Taras Slobodyanik:

Es ist also alles vorbereitet, es muss nur noch das Schreiben/Lesen hinzugefügt werden.

Herzlichen Dank! Ich frage mich, ob schon einmal jemand versucht hat, einen solchen Indikator zu erstellen? Ich habe noch nie einen gefunden, so lange ich lebe. Ich denke, das wäre für viele Leute interessant.
 
Vitaly Muzichenko:

OnInit()-Initialisierung durchführen

Nein, es wird nicht auf dem aktuellen Balken angezeigt. Vielleicht kann die _time-Variable zurückgesetzt werden, nachdem der Indikator alles zum ersten Mal nach dem Beitritt zum Diagramm gezählt hat.

Woher weiß ich, dass der Indikator alles einmal gezählt hat?
 
Ghabo:

Ich werfe den Indikator auf den Chart und... ALERT, aber das Signal ist 5 Balken entfernt. Während der weiteren Arbeit piept es, wie es sein sollte.

Wie kann ich erreichen, dass es beim Starten nicht mehr piept?

if(М_А>0.0)  
{
if(time!=Time[0])
   {
    time=Time[0]; 
    AL(Symbol()+" "+Period()+" УХ ТЫ",2);//
   }
 }

In der Funktion AL(), alle möglichen Ausschreibungen.

Was ist M_A? Was enthält er und woher nimmt er die Daten?

Sie müssen die Gültigkeit des Signals auf dem aktuellen Balken zusammen mit der Zeitprüfung überprüfen. Und Sie überprüfen einfach den M_A-Wert. Woher beziehen Sie es?

 
Artyom Trishkin:

Was ist M_A? Was enthält er und woher bezieht er seine Daten?

Sie müssen die Gültigkeit des Signals auf dem aktuellen Balken zusammen mit der Uhrzeit überprüfen. Und Sie überprüfen einfach den M_A-Wert. Woher beziehen Sie es?

Aufrufen eines Indikators.

М_А =NormalizeDouble(iCustom(NULL,0,"Morning_All_Best",0,i),Digits);

Wie kann ich die Gültigkeit überprüfen?

 
Ghabo:

Aufrufen des Indikators.

Wie kann ich die Gültigkeit überprüfen?

1. Warum führen Sie eine Normalisierung durch? Es ist eine zu teure Operation, um im Indikatorenzyklus zu arbeiten und wird hier nicht benötigt.

2. Was bedeutet "mehr als Null"? Welche Signale gibt dieser benutzerdefinierte Indikator aus? Was wird in den Pufferwerten dieses Indikators im Datenfenster (Strg+D) angezeigt?

Grund der Beschwerde: