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

 
IgorM:

Manchmal gibt es komplexe Berechnungen oder das Laden der Historie in init(), oder es gibt eine Menge Indikatoren und Expert Advisors, die auf dem Terminal hängen oder...

aber wenn das Terminal den Code während seiner Initialisierung unterbricht, erscheint der folgende Fehler im Protokoll: ".... timeout in expert ...."

Wenn das Protokoll im Terminal keinen Fehler anzeigt, bedeutet dies, dass die Initialisierung erfolgreich war. Die start()-Funktion selbst ist leicht zu überprüfen - schreiben Sie in die erste Zeile start(): Print("new tick");


Ich habe das getan((.

int start()
  {
  Print("start");
  
/*current_values_from_MT(CUR, CUR_BUF);
current_values_from_MT(MAIN, MAIN_BUF);*/

  


   return(0);
  }

Ja, ich schaukele viele Informationen, auch Berechnungen, experimentiere mit Zecken...

Berechnung dauert 2 - 3 Minuten, MT "hängt nicht", alles funktioniert typisch, Meldungen von Print() und Alert werden angezeigt und dann alles))

Ich habe mir alle Nachrichten von MT angesehen und konnte keine Fehler finden...

Bitte helfen Sie mit.

 
BBSL:

Die Berechnung dauert 2 - 3 Minuten, MT "hängt" nicht, alles funktioniert typischerweise, Print() und Alert-Meldungen werden angezeigt und dann alles))

wenn Print() gedruckt wird, funktioniert start() auf jeden Fall, aber Ihre Aussage, dass die Berechnung 2-3 Minuten dauert, verwirrt mich - bei einer solchen Belastung des Terminals müssen Sie die Berechnungen mit der Funktion sleep() unterbrechen, sonst bleibt das Terminal definitiv hängen.

Da MT4 keinen Debugger hat, fügen Sie Print() in fragliche Codeabschnitte ein und fangen die Codeabschnitte und Bedingungen ab, die fehlgeschlagen oder nicht fehlgeschlagen sind.

 
Ich muss die Auslösung der offenen Aufträge durch TakeProfit oder StopLoss festlegen, und die Werte von TakeProfit und StopLoss sind für mich nicht von Interesse.
 
Jaguar1974:

Wie prüfe ich, ob ein Auftrag durch TakeProfit oder StopLoss ausgelöst wird? Vielen Dank für Ihre Antwort!

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по стопу.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, osl;
  int      dg, i, j=-1, 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();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, 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();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}
Machen Sie sich mit dem Code beider Funktionen vertraut und fügen Sie sie zu einer einzigen zusammen, um die Ausführungsgeschwindigkeit und Ihre spezifischen Aufgaben zu optimieren...
 
eddy:
Sayod ,in welchem Zeitrahmen haben Sie gehandelt und mit welchen Parametern?


Was ist der Unterschied oder haben Sie es umgedreht und wollen es testen?

Standardmäßig auf h1 gehandelt,

Pip Schritt - 30

LotExpo - 1.59

Ich denke, die Parameter spielen keine große Rolle, wenn die Idee umgesetzt wurde, ich denke, der Expert Advisor wird mit allen Parametern gut sein, IMHO.

 
Jaguar1974:
Ich muss die Tatsache festhalten, dass die offenen Aufträge durch TakeProfit oder StopLoss ausgelöst werden. Die tatsächlichen Werte von TakeProfit und StopLoss interessieren mich nicht.

Wenn Sie nur die Tatsache registrieren wollen, dass die Order ausgelöst wurde, dann können Sie die Anzahl der Orders beim vorherigen Tick speichern und mit der Anzahl der Orders beim nächsten Tick vergleichen - wenn sich die Anzahl der Orders geändert hat, bedeutet das ....
 
kiimar:
Das Terminal schloss den Verlustauftrag mit dem Vermerk "so:19,5%/28,4/145,8". Was bedeutet das?
Das bedeutet, dass bei Erreichen der freien Marge von 19,5 % ein Stopout erfolgte und der verlustbringende Handel gemäß den Regeln geschlossen wurde.
 
IgorM:

wenn Print() ausgibt, dann funktioniert sicherlich start(), aber ich bin verwirrt durch Ihre Aussage, dass die Berechnung 2-3 Minuten dauert - bei einer solchen Belastung des Terminals müssen Sie die Berechnungen mit der Funktion sleep() unterbrechen, sonst hängt das Terminal definitiv

Da MT4 keinen Debugger hat, fügen Sie Print() in zweifelhafte Codeabschnitte ein und fangen die Codeabschnitte und Bedingungen ab, die fehlgeschlagen oder nicht fehlgeschlagen sind.


Entschuldigung, ich habe mich geirrt, Drucken funktioniert nur in init. Ich komme nicht zum Start))

Ja, am Ende jeder Funktion habe ich eine Meldung gedruckt, um zu prüfen, ob alles in Ordnung ist. Und alle Meldungen (alle Funktionen) haben zu 100% funktioniert, bis zum Ende von init, ich kann nicht zum Start gehen!

Vielen Dank im Voraus für die Antwort!

 
Danke, ich habe noch viel zu lernen.
artmedia70:
Machen Sie sich mit dem Code beider Funktionen vertraut und fügen Sie sie zu einer einzigen zusammen, um die Ausführungsgeschwindigkeit und Ihre spezifischen Aufgaben zu optimieren...
 
BBSL:


Entschuldigung, ich habe mich falsch ausgedrückt, Print funktioniert nur in inite. Ich komme nicht in die Gänge))

Ja, am Ende jeder Funktion füge ich einen Ausdruck mit einer Meldung darüber ein, um zu prüfen, ob alles in Ordnung ist. Und alle Meldungen (alle Funktionen) haben bis zum Ende des Init zu 100% funktioniert, ich kann nicht zum Start gehen!

Vielen Dank im Voraus für die Antwort!

Sie haben also offen gesagt kein Häkchen im Terminal. D.h. entweder ist er nicht verbunden, oder Sie arbeiten an einem Offline-Chart, oder Sie überprüfen IsExpertEnabled() in der Init und wenn es nicht erlaubt ist, dann aktivieren Sie EAs.