Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 2

 
gyfto:


Ich habe die folgende Frage. Es gibt einen Block in init(), der das Terminal aufhängt (das ist es, was ich in die DLL übertragen möchte). Natürlich kann das Protokoll nicht eingesehen werden - das Terminal wird nur mit Strg+Alt+Entf geschlossen. Das Aufheben des Druckvorgangs zur Nachverfolgung (und zur Messung der Durchlaufzeit von Schleifen, die in den Block kommen) hilft nicht - der Drucker schreibt nichts, die Protokollierung wird nicht einmal erstellt. Ich versuche, FileOpen/FileWrite mit dem gleichen Ziel zu verwenden - die Datei wird gerade erstellt (0 Kb), und Ruhe. Ich habe FileWrite nach FileOpen in die nächste Zeile gesetzt - ohne Wirkung. In welche Richtung soll ich graben?

Versuchen Sie, dies zu verwenden. Wenn das nicht hilft, können Sie, um nach Fehlern zu suchen, den erwähnten Initialisierungsblock vorübergehend in den Start für den einmaligen Start per Flag setzen und versuchen, Protokolle daraus zu "ziehen".
 
gyfto:


Das Thema wurde geschlossen... Böser Mann.

Ich habe die folgende Frage. Es gibt einen Block in init(), der das Terminal aufhängt (das ist es, was ich in die DLL übertragen möchte). Natürlich kann das Protokoll nicht eingesehen werden - das Terminal wird nur mit Strg+Alt+Entf geschlossen. Das Aufheben des Druckvorgangs zur Verfolgung (und zur Messung der Zeitspanne, in der die Schleifen in den Block kommen) hilft nicht - der Drucker schreibt nichts, die Protokollierung wird nicht einmal erstellt. Ich versuche, FileOpen/FileWrite mit dem gleichen Ziel zu verwenden - die Datei wird gerade erstellt (0 Kb), und Ruhe. Ich habe FileWrite nach FileOpen in die nächste Zeile gesetzt - ohne Erfolg. In welche Richtung muss man graben?


Sehen Sie, in den Attributen ist nichts versteckt?


Sie ist nicht versteckt.
 
TarasBY:
Versuchen Sie dies zu benutzen. Wenn das nicht hilft, kann man, um nach Fehlern zu suchen, den erwähnten Initialisierungsblock für einen einmaligen Start über ein Flag vorübergehend in den Start nehmen und versuchen, die Protokolle daraus zu "ziehen".


Weder der einmalige Start in start noch ininit funktioniert - weder Print noch FileWrite. Ich hänge dieses Stück Code an (ich sehe keinen anderen Ausweg), ich werde es hier nicht posten, weil es zu lang ist. Ich habe alle Pufferdeklarationen entfernt und alle Aufrufe der eingebauten technischen Indikatoren dort beschrieben. Ich habe bereits über Speicherüberlauf mit Arrays nachgedacht, ich habe berechnet, dass das größte Array plus alle anderen Arrays fünfzig und einen Penny beträgt. Nun, wenn es nicht einmal in der allerersten Zeile gedruckt wird, wenn man den Block eingibt... - Das ist es, was mich beunruhigt. Die angehängte Version gilt für FileWrite.
Dateien:
eflfcaj.mq4  10 kb
 
gyfto:

Weder der einmalige Start beim Starten noch ininit funktionieren - weder Print noch FileWrite. Ich füge dieses Codestück an (ich sehe keinen anderen Ausweg), ich füge es hier nicht ein, weil es zu lang ist. Ich habe alle Pufferdeklarationen entfernt und alle Aufrufe der eingebauten technischen Indikatoren dort beschrieben. Ich habe bereits über Speicherüberlauf bei Arrays nachgedacht, ich habe berechnet, dass das größte Array plus alle anderen Arrays fünfzigeinhalb Meter groß ist. Nun, wenn es nicht einmal in der allerersten Zeile gedruckt wird, wenn man den Block eingibt... - Das ist es, was mich beunruhigt. Die angehängte Version gilt für FileWrite.

Der Stil des Codes hat nichts mit ihm zu tun. Keine Leerzeichen, Klammern auf verschiedenen Ebenen, mehrere Vorgänge hintereinander, keine Kommentare... Ein Alptraum! :-))

Wissen Sie selbst etwas darüber?

 
Hilfe bei der Lösung eines Problems mit MT4. Beim Aufrufen eines benutzerdefinierten Indikators werden dessen Eingabeparameter und Farben im Fenster nicht angezeigt (blinkt schnell und verschwindet). Wie kann man das beheben? Ich habe MT4 neu installiert, das hat nicht geholfen.
 
gyfto:


Er schloss das Thema ab... Er ist kein guter Mensch.


= :)
 
gyfto:

Weder das einmalige Starten noch das erstmalige Starten funktioniert - weder Drucken noch FileWrite. Ich füge dieses Codestück an (ich sehe keinen anderen Ausweg), ich füge es hier nicht ein, weil es zu lang ist. Ich habe alle Pufferdeklarationen entfernt und alle Aufrufe der eingebauten technischen Indikatoren dort beschrieben. Ich habe bereits über Speicherüberlauf bei Arrays nachgedacht, ich habe berechnet, dass das größte Array plus alle anderen Arrays fünfzigeinhalb Meter groß ist. Nun, wenn es nicht einmal in der allerersten Zeile gedruckt wird, wenn man den Block eingibt... - Das ist es, was mich beunruhigt. Die angehängte Version gilt für FileWrite.

Ich stimme mit Vadim überein - der Code ist schwer zu lesen. Versuchen Sie, diesen Code in Funktionsblöcke zu zerlegen und in jedem Block zu drucken oder in eine Datei zu schreiben. Und führen Sie ihn in einer Struktur aus, die die Ausführung des Codes "verlangsamt", zum Beispiel so:

void SteppingThrough()
{
    int  li_Time = TimeLocal(), li_N = 0;
    bool lb_work = true, lb_break = false;
    while (IsStopped() == false)
    {
        if (lb_work)
        {
            switch (li_N)
            {
                case 0:
                    //---- Block 1
                    lb_work = false;
                    li_N++;
                    break;
                case 1:
                    //---- Block 2
                    lb_work = false;
                    li_N++;
                    break;
                case N:
                    //---- Block N
                    lb_break = true;
                    li_N++;
                    break;
            }
            if (lb_break) break;
        }
        if (TimeLocal() > li_Time) {li_Time = TimeLocal(); lb_work = true;}
    }
}

Verzögert die Ausführung des nächsten Blocks um 1 Sekunde. - Das Terminal sollte genug Zeit haben, um das Protokoll zu drucken.

 
 

Es gibt 2 sehr ähnliche Funktionen in Kims "letzte Position schließen Flagge durch STOP" und die andere durch TAKE.

Hier ist der Code

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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(OrderSymbol(), 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(OrderSymbol(), 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);
}

Wie Sie sehen können, sind sie sich sehr ähnlich.

Aber aus irgendeinem Grund funktioniert bei mir nur das Schließen mit STOP.

SL=  isCloseLastPosByStop("", -1, -1);
TP=  isCloseLastPosByTake("", -1, -1);

Print(SL,"_",TP); 

Es funktioniert, aber mein Expert Advisor druckt nicht UNIT, sondern weiterhin NULL.

Aber der Abschluss bei STOP wird korrekt gedruckt: wenn stop = 1, wenn nicht stop =0....

bitte helfen Sie mir....

 
lottamer:

Es gibt 2 sehr ähnliche Funktionen in Kims "letzte Position schließen Flagge durch STOP" und die andere durch TAKE.

Hier ist der Code

Wie Sie sehen können, sind sie sich sehr ähnlich.

Aber aus irgendeinem Grund funktioniert bei mir nur das Schließen mit STOP.

Ich eröffne die Position manuell, setze short TAKE. es funktioniert - aber EA druckt nicht UNIT, sondern weiterhin NULL.

Aber der Abschluss bei STOP wird korrekt gedruckt: wenn stop = 1, wenn nicht stop =0....

Bitte helfen Sie mir, dies zu verstehen....


Schauen Sie sich genau an, zu welchem Preis die Stop-Order in der offenen Position stand und zu welchem Preis sie geschlossen wurde. Die Funktion von Igor vergleicht diese exakten Preise, berücksichtigt aber nicht den Slippage.
Grund der Beschwerde: