[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 320

 
snail09:
Zählen Sie entweder alle linken Klammern, dann alle rechten Klammern, dann vergleichen Sie die Mengen, oder kommentieren Sie die Funktionen einzeln, bis Sie den Fehler gefunden haben. Jeder hat einen anderen Geschmack und eine andere Farbe (Quellcode-Design).
es gibt 4 öffnende und 4 schließende Klammern, alles klar. Aber wie die Kommentare mir helfen können, ist nicht ganz klar
 
Pinki:
Es gibt 4 öffnende Klammern und 4 schließende Klammern, alles klar. Aber wie die Kommentare helfen können, verstehe ich nicht ganz

Sie können zuerst benutzerdefinierte Funktionen auskommentieren, dann Schleifen, logische Konstrukte... Ich kann Ihnen versichern, dass Sie durch sequenzielles Abschneiden eine Übereinstimmung mit Ihrer Klammer finden werden. Oder vielleicht haben Sie auch vergessen, irgendwo ";" einzufügen...

Verwechseln Sie nicht IF mit FOR?

Entschuldigung, ich habe es nicht sofort bemerkt.

   // Перебор в цикле всех рыночных и отложенных ордеров
   for(int i=0;i<=OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
         // Если инструмент и магик соответствуют - значит ордер наш
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
            {
            // Подсчитываем только рыночные ордера
            if(_Type==OP_BUY || _Type==OP_SELL) 
               {
               op++;
               }
            }
         }
     }

Vergleichen Sie es mit diesem Fragment. Das ist nur eine Variante.

 
001:

Wer kann erklären, warum der 6. Auftrag nicht auf der Kerze geöffnet wurde und was zu tun ist, damit er geöffnet wird?

Protokoll.

2011.11.04 19:42:21 1999.11.04 20:00 RLB_FLAT GBPUSD,H4: open #7 sell stop 0.10 GBPUSD bei 1.62233 sl: 1.64443 tp: 1.57089 ok
2011.11.04 19:42:21 1999.11.04 20:00 Tester: #6 wegen Ablauf gelöscht
2011.11.04 19:42:10 1999.11.04 12:00 RLB_FLAT GBPUSD,H4: open #6 sell stop 0.10 GBPUSD bei 1.63373 sl: 1.64570 tp: 1.62652 ok
2011.11.04 19:42:09 1999.11.04 08:00 Tester: #5 gelöscht wegen Verfall
2011.11.04 19:42:06 1999.11.04 00:00 RLB_FLAT GBPUSD,H4: open #5 sell stop 0.10 GBPUSD bei 1.63622 sl: 1.64702 tp: 1.63411 ok
2011.11.04 19:42:00 1999.11.02 04:00 Tester: #4 wegen Ablauf gelöscht
2011.11.04 19:41:53 1999.11.01 20:00 RLB_FLAT GBPUSD,H4: open #4 sell stop 0.10 GBPUSD bei 1.63365 sl: 1.64917 tp: 1.61097 ok

Der vierte, fünfte und sechste ausstehende Auftrag wurde wegen Ablaufs gelöscht.

Erhöhen Sie ihre Lebensdauer oder setzen Sie 0 (Null), siehe. BestellungÄndern()

 
мmersi:

Die vierte, fünfte und sechste Stundung wurden aufgrund ihres Ablaufdatums gestrichen.

Erhöhen Sie das Verfallsdatum oder setzen Sie es auf 0 (Null), siehe OrderModify(). BestellungÄndern()


Was mich verwirrt, ist, dass es vor dem Ablauf der 6. Order (die um 20:00 Uhr ablief) um 16:00 Uhr eine Kerze nach unten gab. Dies ist auf dem Bild zu sehen.
 
mersi:

1. Die Funktion findet den Auftrag mit dem höchsten Ticker in der Historie, d.h. den zuletzt geschlossenen Auftrag (es sei denn, es liegt ein Ausnahmefall vor, für den Ihre Option mit der maximalen Schlusszeit vorzuziehen ist).

2. Gemäß den Bedingungen wird die erste Order mit dem angegebenen TP/SL geöffnet und nur die zweite Order kann mit dem neuen TP/SL geöffnet werden, was bedeutet, dass die Funktion nur dann Null zurückgeben kann, wenn der erste Handel Null war, aber nicht, wenn es keine geschlossenen Orders in der Historie gibt.

Eine letzte Sache. In Ihrer Variante ist die Verwendung von j und einem weiteren SELECT in der Funktion redundant.

Es ist genug:

if (t<OrderCloseTime()) {
         t=OrderCloseTime();
      Profit=OrderProfit()+OrderSwap()+OrderCommission();
  }
   return(Profit);

1. Sie können sich zu 100 % auf Ihren Makler (oder den Makler des Kunden) verlassen, was die Nummerierung der Tickets angeht? Die Zeit ist immer noch ein stabiler Wert - hier kann er die Zeit nur manuell ändern, indem er den Verlauf anpasst. IMHO ist es besser, die Zeit zu nutzen.

2. Wenn der Kunde die Logik ändern muss, muss Ihre Funktion möglicherweise neu geschrieben werden.

3. Schlagen Sie vor

Profit=OrderProfit()+OrderSwap()+OrderCommission();

innerhalb einer Schleife zu verwenden? Und wozu? Sie können ihn nur einmal für die letzte bereits gefundene Bestellung verwenden.

А... Ihr Kunde wird nicht testen und optimieren. Ich verstehe...

 

GlobalVariableSetOnCondition() - können Sie bitte im Klartext erklären, was diese Funktion bewirkt? Die Beschreibung in der Hilfe ist sehr verwirrend, ich kann einige Punkte nicht verstehen?

Setzt einen neuen Wert der bestehenden globalen Variablen, wenn der aktuelle Wert der Variablen gleich dem Wert des dritten Parameters check_value ist. Wenn die Variable nicht existiert, erzeugt die Funktion einen Fehler ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) und gibt FALSE zurück. Die Funktion gibt bei erfolgreicher Ausführung TRUE zurück, andernfalls FALSE. Um die Fehlerinformationen zu erhalten, muss die Funktion GetLastError() aufgerufen werden. Wenn sich der aktuelle Wert der globalen Variablen von check_value unterscheidet, gibt die Funktion FALSE zurück.
Diese Funktion ermöglicht einen atomaren Zugriff auf die globale Variable, so dass sie zur Erstellung einer Semaphore für die gleichzeitige Kommunikation zwischen mehreren Expert Advisors auf demselben Client-Terminal verwendet werden kann.

 
fore-x:

GlobalVariableSetOnCondition() - können Sie bitte im Klartext erklären, was diese Funktion bewirkt? Die Beschreibung in der Hilfe ist sehr verwirrend, ich kann einige Punkte nicht verstehen?

Setzt einen neuen Wert für eine bestehende globale Variable, wenn der aktuelle Wert der Variable gleich dem dritten Parameter von check_value ist. Wenn die Variable nicht existiert, erzeugt die Funktion einen Fehler ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) und gibt FALSE zurück. Die Funktion gibt bei erfolgreicher Ausführung TRUE zurück, andernfalls FALSE. Um die Fehlerinformationen zu erhalten, muss die Funktion GetLastError() aufgerufen werden. Wenn sich der aktuelle Wert der globalen Variablen von check_value unterscheidet, gibt die Funktion FALSE zurück.
Diese Funktion ermöglicht einen atomaren Zugriff auf die globale Variable, so dass sie zur Erstellung einer Semaphore für die gleichzeitige Kommunikation zwischen mehreren Expert Advisors auf demselben Client-Terminal verwendet werden kann.

GlobalVariableSetOnCondition("Имя переменной", устанавливаемое значение, проверяемое значение);

Angenommen, Sie haben eine globale Variable GL_Var.

Sie hat derzeit einen Wert von 1,0.

Sie müssen prüfen, ob diese Variable den Wert 1,0 hat, und wenn ja, diese Variable auf 2,0 setzen

Das wird so sein:

GlobalVariableSetOnCondition(GL_Var, 2.0, 1.0);

Um die Rückgabewerte dieser Funktion zu behandeln, können Sie sie über if aufrufen

if (!GlobalVariableSetOnCondition(GL_Var, 2.0, 1.0)) {
   // здесь код обработки, если функция вернула false
   // false она вернёт в случае, если переменная GL_Var не была равна 1.0 во время вызова этой функции
   // или если вообще ещё нет глобальной переменной GL_Var
   }

Bevor Sie diese Funktion aufrufen, können Sie prüfen, ob die globale Variable GL_Var existiert, um den Fehler ERR_GLOBAL_VARIABLE_NOT_FOUND zu vermeiden

 

Bitte helfen Sie mir, ein kleines geometrisches Problem zu lösen. Es gibt eine Linie mit den Koordinaten p1 und p2 (in der Abbildung rot dargestellt). Ich muss die Koordinate von p3 finden, die 38,2 % der Koordinate von p2 ist. Ich habe Folgendes getan:

if(p2>p1) p3=p2-(p2-p1)*0,382; wahr für den oberen Teil der Abbildung

if(p1>p2) p3= p2+(p1-p2)*0,382; gilt für den unteren Teil der Abbildung

Gibt es eine Möglichkeit, dies in einer Gleichung ohne "wenn" aufzuschreiben?

 

Dann schreiben Sie es doch so.

p3=p2-(p2-p1)*0,382

 
Roger:

Nun, schreiben Sie es so.

p3=p2-(p2-p1)*0,382


Und tatsächlich! Ich danke Ihnen für Ihre Hilfe.