[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 275

 

Die Frage ist.

Wie bekommt man eine Zahl ohne Minus, wenn es sich herausstellt, dass Open[1] < Close[1] und wenn Sie subtrahieren Open[1]-Close[1] Ich erhalte den Wert mit einem Minus, wie man es war immer ein positiver Wert, ich brauche, um den Abstand zwischen Open und Close vielleicht gibt es einen anderen Weg zu berechnen?

Ich danke Ihnen.

 
Martingeil >> :

Die Frage ist.

Wie bekommt man eine Zahl ohne Minus, wenn es sich herausstellt, dass Open[1] < Close[1] und wenn Sie subtrahieren Open[1]-Close[1] Ich erhalte den Wert mit einem Minus, wie man es war immer ein positiver Wert, ich brauche, um den Abstand zwischen Open und Close vielleicht gibt es einen anderen Weg zu berechnen?

>> Danke.

https://docs.mql4.com/ru/math/MathAbs

 

;) >> Vielen Dank!

 

Guten Tag!

Beim Schreiben eines EAs für MT4 bestand die Notwendigkeit, programmatisch (d.h. im Code des EAs selbst) zu ermitteln, ob mindestens eine Order dieses EAs geöffnet wurde oder nicht. Können Sie mitteilen, ob es eine solche Funktion gibt? Wenn ja, würde es vielleicht so aussehen

Bool (wurde ein EA-Auftrag mit dieser magischen Zahl eröffnet)

{Antwort= Richtig/Falsch}

?

Experten - bitte helfen Sie uns - wir zerbrechen uns bereits den Kopf

P.S.- die Option mit den Bestellnummern ausprobiert - hat nicht funktioniert

 
waitra >> :

Guten Tag!

Beim Schreiben eines EAs für MT4 bestand die Notwendigkeit, programmatisch (d.h. im Code des EAs selbst) festzustellen, ob mindestens eine Order dieses EAs geöffnet wurde oder nicht. Wissen Sie, ob es eine solche Funktion gibt?

Wird diese Funktion funktionieren?

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

  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) kp++;
          }}}}}
  return( kp);
}

Anwendungsbeispiel: Wir setzen diese Funktion ganz ans Ende unseres Codes und prüfen sie, wenn wir eine Position eröffnen:



if ( NumberOfPositions(NULL,OP_BUY, Magic)< 1) {
// если нет окрытых OP_BUY позиций с заданным магиком, покупаем
ticket=OrderSend(Symbol(),0, Lots,Ask, Slippage,Bid- SL*Point,
                      Ask+ TP*Point, NULL, Magic ,0,Blue);
                                              }

Wenn wir nicht nach Positionen, sondern nach schwebenden Aufträgen suchen, können wir diese Funktion verwenden

Funktion NumberOfOrders().
Diese Funktion gibt die Anzahl der Aufträge zurück. Sie können die Liste der zu prüfenden Aufträge mit Hilfe der Funktionsparameter einschränken:
sy - Name des Instruments. Wenn wir diesen Parameter setzen, wird die Funktion nur die Aufträge des angegebenen Instruments prüfen. NULL bedeutet aktuelles Instrument, und "" (standardmäßig) bedeutet ein beliebiges Instrument.
op - Art des schwebenden Auftrags. Gültige Werte: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP oder -1. Der Standardwert von -1 bedeutet eine beliebige Reihenfolge.
mn - Kennung der Bestellung (MagicNumber). Der Standardwert von -1 bedeutet eine beliebige MagicNumber.

https://www.mql5.com/ru/forum/107476/page12

 

Bitte erläutern Sie, was die Dateien enthalten:

#include <stdlib.mqh>
#include <stderror.mqh>

Wenn möglich, auf eine einfache Art und Weise.

Ich danke Ihnen.

 
Serbov писал(а) >>

Bitte erläutern Sie, was die Dateien enthalten:

Wenn möglich, auf eine einfache Art und Weise.

Ich danke Ihnen.

es handelt sich um sogenannte "bibliotheksdateien". in diesen dateien sind häufig verwendete funktionen gespeichert. sie werden verwendet, um das laden des quelltextes zu vermeiden. wenn die bibliotheksdatei "deklariert" ist, können die funktionen aus der deklarierten datei so verwendet werden, als wären sie im quelltext enthalten.

 
Serbov >> :

Erläutern Sie bitte, was uns die Akten sagen:

Wenn möglich, halten Sie es bitte einfach.

Ich danke Ihnen.

Bei der Verwendung (Aufruf) einer Funktion aus diesen Dateien (bereits anfänglich in mt4 eingebaut) können wir, im Falle eines fehlerhaften Betriebs des EA, im Log die Nummer des Fehlers sehen, den wir im Code gemacht haben.

Zum Beispiel rufen wir die Funktion GetLastError() auf:

ticket= OrderSend(Symbol(),OP_BUY, lots,Ask,3, SL, TP,"Name_Expert", Magic,0, clOpenBuy );
   if( ticket < 0)
 {Print("Ошибка открытия ордера BUY #", GetLastError());  } 

In diesem Fall, wenn wir einen Fehler im Code gemacht oder falsche externe Parameter gesetzt haben, sehen wir die Nummer dieses Fehlers im Protokoll.

Zum Beispiel, 130.

Und die Entschlüsselung der Nummer finden Sie unter -https://book.mql4.com/ru/appendix/errors

Und wir brauchen nicht den ganzen Code durchzugehen, denn wir wissen bereits, wo der Fehler liegt!

 
rid писал(а) >>

Wird diese Funktion funktionieren?


Verwendungsbeispiel: Die Funktion selbst wird ganz am Ende des Codes (außerhalb der START-Funktion) eingefügt und beim Öffnen einer Position überprüft:



Wenn wir nicht nach Positionen, sondern nach schwebenden Aufträgen suchen, können wir

Funktion NumberOfOrders().
Diese Funktion gibt die Anzahl der Aufträge zurück. Sie können die Liste der zu prüfenden Aufträge mit Hilfe der Funktionsparameter einschränken:
sy - Name des Instruments. Wenn Sie diesen Parameter angeben, prüft die Funktion nur die Aufträge für das angegebene Instrument. NULL bedeutet aktuelles Instrument, und "" (standardmäßig) bedeutet ein beliebiges Instrument.
op - Art des schwebenden Auftrags. Gültige Werte: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP oder -1. Der Standardwert -1 steht für eine beliebige Reihenfolge.
mn - Kennung der Bestellung (MagicNumber). Der Standardwert -1 bedeutet eine beliebige MagicNumber.

https://www.mql5.com/ru/forum/107476/page12

Vielen Dank für den Tipp, wir haben es versucht, aber es hat nicht funktioniert, bitte prüfen Sie, ob irgendwo im Code ein Fehler ist:

bool Open_Buy()

{

   bool res=false;    


if( условие_1)        { 

       if ( NumberOfPositions(NULL, Magic)< 1) // если нет открытых позиций с заданным магиком

          { res=true; }}

else  

   {

    if( условие_1) 

       { 

       if ( NumberOfPositions(NULL, Magic)> 1) // если советник уже открывал позиции

       {

          if ( условие_2)              { 

             res=true; }

           } 

}}

return( res);

}

Wenn wir prüfen wollen, ob eine Verkaufs- oder Kaufbedingung vorliegt und wir keinen Auftrag geöffnet oder geschlossen haben, wird in diesem Fall nur die erste Bedingung funktionieren. Und wenn der EA in der Vergangenheit bereits Orders eröffnet hat, dann sollten beim Eröffnen einer Order die erste + zweite Bedingung ausgelöst werden.

Ich sah durch den Link von Ihnen zur Verfügung gestellt, vielleicht die ExistOrders(); ist besser geeignet?

(aber ich konnte es ehrlich gesagt nicht zuordnen, da mir im Moment offenbar die Fähigkeit dazu fehlt).

 

Sie haben die Funktion nicht korrekt aufgerufen.

Ihre Funktion wird folgendermaßen aufgerufen: if (NumberOfPositions(NULL,Magic)> 1)

Sie sollte folgendermaßen aussehen:

if( условие_1)        { 

       if ( NumberOfPositions(NULL,-1, Magic)< 1) 
// если нет открытых позиций с заданным магиком

          { res=true; }}

Fühlen Sie den Unterschied (Sie haben "-1" weggelassen) ! und ERHALTEN Sie Ihren CODE.

Um dies zu kontrollieren, können Sie einen Kommentar auf das Diagramm drucken. Zum Beispiel so (am Anfang der Funktion START).

Comment ("Количество текущих открытых советником позций = ",
                                  NumberOfPositions(NULL,-1,Magic)  );
Magic_2=Magic*3;
Was Ihre zweite Bedingung betrifft, so würde ich ("ohne zu viel nachzudenken") einen anderen Magier und eine separate Funktion Open_Buy_2() einstellen, um Positionen durch die zweite Bedingung zu öffnen!

Der Code der zweiten Bedingung würde wie folgt aussehen

 if ( условие_2)                          { 
  if ( NumberOfPositions(NULL,-1, Magic)== 1)   {
    if ( NumberOfPositions(NULL,-1, Magic_2)< 1) { 
..... ..... 
Grund der Beschwerde: