[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 608

 

Hallo nochmal an alle.

Wie kann man eine Zeitverzögerung in einem EA einrichten, bevor man einen neuen Handel nach dem Ende eines vorherigen Handels eröffnet.

D.h. das Geschäft endete t/p und danach muss ich z.B. 15 Minuten warten und erst dann wird die Formel weiter funktionieren:)

Gefunden

OrderCloseTime( )
Ich habe es gefunden, aber wie kann ich es mit der Programmzeit verbinden und Konflikte mit dem EA-Historienlauf vermeiden. Vielen Dank im Voraus
 
Tragedy:

Hallo nochmal an alle.

Wie kann man eine Zeitverzögerung in einem EA einrichten, bevor man einen neuen Handel nach dem Ende eines vorherigen Handels eröffnet.

D.h. das Geschäft endete t/p und danach muss ich z.B. 15 Minuten warten und erst dann wird die Formel weiter funktionieren:)

Gefunden

OrderCloseTime( )
Aber wie verknüpfe ich dies mit der Programmzeit, so dass es keinen Konflikt mit der Ausführung des EA durch die Historie gibt. Vielen Dank im Voraus


https://www.mql5.com/ru/forum/131859

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество секунд после открытия последней позиций. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество секунд после закрытия последней позиций. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime SecondsAfterCloseLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(TimeCurrent()-t);
}
 
Aufforderung:) Vielen Dank
 
rigonich:

int iHighest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)
Gibt den Index des höchsten gefundenen Wertes zurück (Offset relativ zum aktuellen Takt).
Parameter:
Der Wert wird als derWert des höchsten Balkens zurückgegeben:

int iHighest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)
Gibt den Index des höchsten gefundenen Wertes zurück (Offset relativ zum aktuellen Takt).
Parameter:
Symbol - Name des Symbols, dessen Daten durchsucht werden sollen. NULL bedeutet aktuelles Symbol.
Zeitrahmen - Zeitraum. Kann eine der Perioden des Diagramms sein. 0 zeigt die Periode des aktuellen Diagramms an.
Typ - Der Bezeichner der Zeitreihe. Kann einer der Zeitreihenbezeichner sein.
zählen - Anzahl der Elemente der Zeitreihe (in Richtung vom aktuellen Takt zum aufsteigenden Index), unter denen die Suche durchgeführt werden soll.
Start - Der Index (Offset vom aktuellen Takt) des Starttaktes, ab dem die Suche nach dem höchsten Wert beginnt. Negative Werte werden ignoriert und durch Nullwerte ersetzt.
Hier stellt sich die Frage, wie festgelegt werden kann, dass bis zu dem Balken gesucht werden muss, über dem das Fraktal erschienen ist, und wie, wenn der Zeitraum weniger als eine Minute beträgt.....?
 

Es tutmir leid,

Das wäre großartig. Ich habe durch das Tutorial auf globale Variablen sah, ich verstehe, dass dies ist, was ich brauche, aber ich verstehe nicht die Nuancen. Wo sind sie zu deklarieren, wie sind die erforderlichen Werte in sie einzutragen, usw.

Wenn z.B. 5 EAs auf 5 verschiedenen Paaren im Terminal hängen und jeder EA 4 Variablen hat, die geschrieben werden müssen, bedeutet das, dass wir 20 globale Variablen brauchen und diese irgendwie mit dem Befehl Symbol() benannt werden müssen, damit ich nicht jeden Namen in den EA schreiben muss.

Alles in allem ist es noch nichts für mein Gehirn((

 
i999i:



Erinnern Sie sich an die Eröffnungszeit des Balkens, in dem das letzte Fraktal gesetzt wurde, und verwenden Sie diese, um die Nummer dieses Balkens zu ermitteln. wenn der Zeitraum weniger als eine Minute beträgt........, wie ist das? Wenn der Zeitraum des Diagramms, weniger als eine Minute ist einfach nicht da.
 
i999i:

Danke für die Antwort, aber was ich meinte, war, wie man weiß, ob das aktuelle Fraktal gebrochen wurde oder nicht, bevor das nächste Fraktal erscheint

Wenn Sie nach dem Preis eines neuen Fraktals suchen (Sie können mit dem Mausrad auf dieser Seite scrollen), dann wissen Sie, ob dieses Fraktal durchbrochen ist. Mein Profil enthält Links zur B.Williams ProfitUnity Expo. Ich habe es selbst geschrieben. Jetzt handele ich mit umgekehrten Signalen, in der Richtung, in der der Kurs zu seinem gleitenden Durchschnitt zurückkehrt.
 
xant:

Es tutmir leid,

Das wäre großartig. Ich habe durch das Tutorial auf globale Variablen sah, ich verstehe, dass dies ist, was ich brauche, aber ich verstehe nicht die Nuancen. Wo sind sie zu deklarieren, wie schreibt man die richtigen Werte hinein, usw.

Wenn z.B. 5 EAs auf 5 verschiedenen Paaren im Terminal hängen und jeder EA 4 Variablen hat, die geschrieben werden müssen, bedeutet das, dass wir 20 globale Variablen brauchen und diese irgendwie mit dem Befehl Symbol() benannt werden müssen, damit ich nicht jeden Namen in den EA schreiben muss.

Alles in allem ist es noch nichts für mein Gehirn((

Wenn ich nicht genug Grips für die globalen Variablen des Terminals habe, dann über das Schreiben von ihnen in eine Datei zu...

double Var1, Var2, Var3, Var4;  // 4-ре переменных для сохранения (у Вас они свои !!!)
void fSave_MineGV (string fs_PrefName = "")     // префикс имени переменной
{
    static datetime ldt_NewBar;
    datetime ldaTBeginBar = iTime (Symbol(), 1, 0);
//----
    //---- Сохраняемся в начале каждой минуты
    if (ldt_NewBar == ldaTBeginBar) return;
    ldt_NewBar = ldaTBeginBar;
    //---- Сохраняем поочереди значения каждой переменной
    string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
    GlobalVariableSet (ls_Name, Var1);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
    GlobalVariableSet (ls_Name, Var2);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
    GlobalVariableSet (ls_Name, Var3);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
    GlobalVariableSet (ls_Name, Var4);
//----
}
// в init()
void fGet_MineGV (string fs_PrefName = "")     // префикс имени переменной
{
    string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
//----
    //---- Восстанавливаем значения переменных
    if (GlobalVariableCheck (ls_Name)) Var1 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
    if (GlobalVariableCheck (ls_Name)) Var2 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
    if (GlobalVariableCheck (ls_Name)) Var3 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
    if (GlobalVariableCheck (ls_Name)) Var4 = GlobalVariableGet (ls_Name);
//----
}

Aber es gibt für alles ein erstes Mal. fSave_MineGV() in start() und fGet_MineGV() in init().

Ich hoffe, Sie finden es heraus und schreiben Ihre Speichervariablen anstelle von Var1 usw.
 
xant:

Es tutmir leid,

Das wäre großartig. Ich habe durch das Tutorial auf globale Variablen sah, ich verstehe, dass dies ist, was ich brauche, aber ich verstehe nicht die Nuancen. Wo sind sie zu deklarieren, wie sind die erforderlichen Werte in sie einzutragen, usw.

Wenn z.B. 5 EAs auf 5 verschiedenen Paaren im Terminal hängen und jeder EA 4 Variablen hat, die geschrieben werden müssen, bedeutet das, dass wir 20 globale Variablen brauchen und diese irgendwie mit dem Befehl Symbol() benannt werden müssen, damit ich nicht jeden Namen in den EA schreiben muss.

Nun, für mein Gehirn ist es noch nicht((

Die Variablen, die Sie brauchen, ist wirklich 20, Sie wollen nicht, um sie in Ihrem EA zu schreiben, machen Sie es eine separate Datei, gibt es Präprozessor-Befehle für vordefinierte Konstanten, und für einen Anfänger ist es viel einfacher, mit globalen Variablen zu arbeiten, als mit Dateien, aber natürlich sind Sie der Chef.

string perem = "peremEURUSD-1";
string perem = "peremEURUSD-2";
Doppel-A;
//+------------------------------------------------------------------+
//| Skriptprogramm-Startfunktion |
//+------------------------------------------------------------------+
int start()
{
GlobalVariableSet(peremEURUSD-1,2.5); //Erstellen oder Zuweisen eines neuen Wertes
A=GlobalVariableGet(peremEURUSD-1); //hierbei Wert lesen
if(GlobalVariableGet(peremEURUSD-1)==....) //auf diese Weise prüfen
zurück(0);
}

//+------------------------------------------------------------------+

P.S. Es ist besser, Variablen (für ein Währungspaar) einmal im Voraus zu definieren.

 

rigonich,

warum, in der EA will ich nur, ich dachte im Gegenteil, dass die Aufnahme von Dateien ist einfacher.

TarasBY ,

Danke, es ist alles klar, ich werde es versuchen, ich denke, es wird funktionieren.