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

 
Desead:

Verdammt, das ist mein Problem. Ich frage mich, wie ich es umgehen kann, wenn ich nur das ganze Gitter löschen muss, wenn ich den Roboter entlade... Mir fällt nichts ein, was ich damit tun könnte :(

Ein Skript kann über die Bibliothek in deinit() geladen werden, um ein Diagramm zu erstellen:

 // 7.9. Функция загружает на указанный график скрипт по его имени.
 void ServiceLoadScript(int    hwndChart,    // Системный дескриптор окна графика, куда загружается скрипт.
                        string szNameScript, // Имя загружаемого скрипта.
                        int    bOK);         // Подтверждение запуска скрипта, при наличии диалогового окна свойств скрипта. Скрипт может не иметь окна свойств!
                                             // При использовании функции для загрузки скрипта из скрипта на текущем графике параметр не работает из-за
                                             // невозможности одновременной работы двух скриптов на одном графике.
                                             // TRUE - автонажатие на кнопку "OK" разрешено, FALSE - автонажатие на кнопку "OK" запрещено.

mit der Funktion Alle Aufträge löschen.

P.S. Mit dem einen oder anderen Aufwand und Energie kann man JEDEN exotischen Wunsch eines Händlers erfüllen, aber ob man diesen "Exoten" manchmal braucht ... :)))

 

Warum kann die Bedingung für die Prüfung offener Aufträge nicht so geschrieben werden?

wenn AufträgeSumme() > 0

alles ist klar und verständlich... wäre es...

Ich versuche schon seit einer Stunde herauszufinden, WIE ich diese Bedingung schreiben soll...

 
lottamer:

Warum kann die Bedingung für die Prüfung offener Aufträge nicht so geschrieben werden?

wenn AufträgeSumme() > 0

alles ist klar und verständlich... wäre es...

Ich versuche schon seit einer Stunde herauszufinden, WIE ich diese Bedingung schreiben soll...


Warum nicht? Sie können es, aber es wird ausgelöst, wenn es offene oder schwebende Aufträge für ein Symbol gibt.
 
rigonich:

Warum nicht? Sie können es, aber es wird ausgelöst, wenn es offene oder ausstehende Aufträge für ein Instrument gibt.


Ich wünschte, es würde funktionieren - ich habe eine Stelle und ein Werkzeug.

Aber es funktioniert nicht!

Er sagt, dass es einen Fehler im Code gibt.

hierzu

---------------------------

int start()

{

//----

wenn AufträgeSumme()>0

PlaySound ("alert.wav");

//----

zurück(0);

}

-----------------------------

gibt 8 Fehler zu!!!

 

//---------------------------

int start()

  {

//----

   if (OrdersTotal()>0)

PlaySound ("alert.wav");

//----

  }

 return(0);

 
//-----------------------------

Wie wäre es damit?
 
BeerGod:

Wie wäre es damit?


:)))))))))))))))))))

großartig! Dankeschön

 
Desead:


Deinit wird also aufgerufen, wenn ich einen Roboter aus einem Diagramm lösche - anders kann ich diese Bedingung nicht nachverfolgen..... ist es wahrscheinlich einfacher, ein separates Skript zu schreiben, das alle verbleibenden Anhänger löscht, es gibt keine andere Möglichkeit.

Übrigens, ein weiterer Gedanke zu diesem Thema:

Ich glaube, ich habe das Problem der Löschung von ausstehenden Aufträgen gelöst. Ich bestimme die Anzahl der "notwendigen" (zu entfernenden) Aufträge in einer separaten Funktion, rufe diese Funktion auf und dann while mit der Bedingung (Total>0), dann den Zyklus des Entfernens for(int i=Total-1;i<=0l; i--), wieder die Berechnung der"notwendigen" und des Zählers der Entfernungsversuche mit Verlassen vonwhile, wenn das gegebene Niveau erreicht ist. Auf diese Weise wird alles gelöscht.

Hier kann es zu einer Endlosschleife kommen, wenn einer der Aufträge aus irgendeinem Grund nach dem Zeitpunkt der Zählung verschwindet


Warum ist das nicht möglich? Legen Sie z.B. eine globale Variable auf Terminalebene an, weisen Sie ihr einen Wert zu und überprüfen Sie den Start und ändern Sie den Wert dieser Variable über service -->global variables, bevor sie ausgeschaltet wird.
 
BeerGod:

Und so?


Und darf ich fragen, was sie damit bezwecken?

for(int i=0; i<OrdersTotal(); i++)

Es sieht so aus, als ob sie versuchen, die offenen Positionen mit der Brute-Force-Methode zu zählen...

 

Guten Tag!!! Ich kann keine schöne Lösung für diese Situation finden. Hier ist eine typische Auftragslage. Aber wenn ich meinem Roboter in den Parametern Null gebe, d.h. keine Stopps und Takeprofits, wird nichts funktionieren.

 if(!srabotka){
           OrderSend (Symbol( ), OP_BUY, lot ,NormalizeDouble(Ask, Digits), 5, NormalizeDouble( Ask- (stop*Point),Digits),   NormalizeDouble( Ask+( 45*Point),Digits), NULL, 450, 0, CLR_NONE);
           int Error=GetLastError();if (Error==0){  
           Sleep(2000); RefreshRates(); 
           OrderSend (Symbol( ), OP_SELL,  lot ,NormalizeDouble(Bid, Digits), 5, NormalizeDouble( Bid+ (stop*Point),Digits), NormalizeDouble( Bid-( 45*Point),Digits), NULL, 450, 0, CLR_NONE); 
           Error=GetLastError();
           if (Error==0){  profit = NormalizeDouble( Ask+( 45*Point),Digits); //tsena=Ask; perenos = false;  
           srabotka= true; }}}
           
           if (Error!=0){ string errorcomment = "Ошибка открытия  ордера OP_BUY"  + " " + Symbol() +  " " + ErrorDescript(Error); 
            Print (errorcomment);}
 

Wir können auch ein if setzen und zum zweiten Mal einen Auftrag mit Nullen eingeben, aber das ist ein bisschen umständlich.

 
lottamer:


Und darf ich fragen, was sie damit bezwecken wollen?

for(int i=0; i<OrdersTotal(); i++)

es fühlt sich an, als würde es versuchen, offene Positionen zu zählen...


Nun, es wählt die Aufträge nach bestimmten Parametern aus.

z.B. https://www. mql5.com/ru/forum/131859/page3#434221

Funktion NumberOfPositions().

Diese Funktion gibt die Anzahl der momentan offenen Positionen zurück. Eine genauere Auswahl der gezählten Positionen wird durch externe Parameter festgelegt:

  • sy - Bezeichnung des Marktinstruments. Wenn dieser Parameter gesetzt ist, berücksichtigt die Funktion nur Positionen des angegebenen Instruments. Der Standardwert "" bedeutet ein beliebiges Marktinstrument. NULL bedeutet das aktuelle Instrument.
  • op - Handelsoperation, Positionsart. Gültige Werte: OP_BUY, OP_SELL oder -1. Der Standardwert -1 bedeutet eine beliebige Position.
  • mn - Positionsbezeichner, MagicNumber. Der Standardwert -1 bedeutet einen beliebigen Bezeichner.
  • //+----------------------------------------------------------------------------+
    //|  Автор    : Ким Игорь В. 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);
    }