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

 
BBSL:

Wenn es sich um Zecken handelt, können Sie einen Code schreiben, der die Datendatei speichert, aber Sie müssen die Daten aus einer Datei in ekspert laden. Wäre es sinnvoll, den Computer einfach weiterlaufen zu lassen?
Ich denke, ich sollte die zweite Möglichkeit nutzen. Vielen Dank, BBSL.
 
artmedia70:

Was du tust, ist seltsam... Beim Öffnen einer Position weisen Sie einer Variablen die Ticketnummer zu, prüfen aber eine andere...

Und OrderSend() gibt im Falle eines Fehlschlags -1 (minus eins) zurück, und Sie prüfen auf weniger als eins, wenn Sie weniger als null benötigen

Das ist das erste, was Ihnen ins Auge fällt. Aber ich denke, Sie haben da eine Menge interessanter Dinge... :)


Ooh-ha-ha, ja, das ist eine Menge Spaß... Vor allem, wenn man anfängt zu prüfen))

Komm schon, noch einmal... Das geht so,

Ich eröffne die Bestellung:

order_id = OrderSend(Symbol(),OP_SELL,1.0,Bid,3,0,0,"expert comment",255,0,Red);
   if(order_id<0)
     {
      error=GetLastError();
      Print("send_orders, error = ",ErrorDescription(error));
      return;
     }
     } 

Abschließende Bestellung:

if(OrderSelect(0, SELECT_BY_POS)==true){

OrderClose(OrderTicket(),1,Bid,3,Red);

}

Richtig, mit einem einzigen Auftrag?)

 
hedger:
Offensichtlich sollte die zweite Option gewählt werden. Vielen Dank, BBSL.

Gern geschehen, ich hoffe, es hilft Ihnen wirklich))
 
artmedia70:

Was du tust, ist seltsam... Beim Öffnen einer Position weisen Sie einer Variablen die Ticketnummer zu, prüfen aber eine andere...

Und OrderSend() gibt im Falle eines Fehlschlags -1 (minus eins) zurück, und Sie prüfen auf weniger als eins, wenn Sie weniger als null benötigen

Das ist das erste, was Ihnen ins Auge fällt. Aber ich denke, Sie haben da eine Menge interessanter Dinge... :)


Ich verstehe, die Tikit-Nummer sollte so erhalten werden:

nomer_ticketa = OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"expert comment",255,0,Green);
   if(ticket<1)
 
artmedia70:

Was du tust, ist seltsam... Beim Öffnen einer Position weisen Sie einer Variablen die Ticketnummer zu, prüfen aber eine andere...

Und OrderSend() gibt im Falle eines Fehlschlags -1 (minus eins) zurück, und Sie prüfen auf weniger als eins, wenn Sie weniger als null benötigen

Das ist das erste, was Ihnen ins Auge fällt. Aber ich denke, Sie haben da eine Menge interessanter Dinge... :)


Respekt, danke!))
 
BBSL:


Ich verstehe, dass Sie die Tickit-Nummer auf diese Weise erhalten müssen:

Mit nur einem Auftrag mag es funktionieren, aber wenn Sie ihn noch manuell öffnen, ist es nicht dasselbe. Die Ticketnummer sollte in einer Variablen gespeichert werden, und nach der Auswahl der Bestellung sollten wir das Ticket mit der gespeicherten Nummer vergleichen:

 if (OrderTicket()==number_ticket) {
   // ... код для работы с выбранным ордером при совпадении тикетов
   }

Und im Allgemeinen muss die Auftragsauswahl mit der Funktion OrderSelect() in der Schleife erfolgen:

for (i=0; i<OrdersTotal(); i++) {                    // цикл по всем рыночным ордерам терминала
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { // Если выбран любой рыночный ордер с индексом i
      if (OrderSymbol()!=Symbol())     continue;   // Если символ не текущего графика, переходим к выбору следующего ордера
      if (OrderMagicNumber()!=Magic)   continue;   // Если его магик не совпадает с магиком советника - переходим к выбору следующего
//... далее можно проверять другие параметры выбранного ордера, но в этом месте уже есть выбранный ордер текущего графика и номером магика советника
      if (OrderTicket()==number_ticket) {          // проверяем тикет выбранного ордера и, если есть совпадение, выполняем с ним дальнейшие действия
         // ... код, выполняющий дальнейшие действия с найденным нужным ордером ...
         }
      }
   else if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // Иначе, если не удалось выбрать ордер
      Print ("Ошибка при выборе ордера из списка рыночных ордеров = ", GetLastError());  // Выведем сообщение об ошибке и её номер в журнал.
   }

Dies ist nur ein Beispiel zum Verständnis, nicht der fertige Arbeitscode, wenn überhaupt... :)

 
artmedia70:

Wenn Sie nur einen Auftrag haben, mag es funktionieren, aber wenn Sie mehrere manuell öffnen, wird es nicht dasselbe sein. Die Ticketnummer sollte in einer Variablen gespeichert werden, und nach der Auswahl eines Auftrags sollten wir dessen Ticket mit dem gespeicherten vergleichen:

Und im Allgemeinen sollte die Auswahl der Aufträge mit der Funktion OrderSelect() in der Schleife erfolgen:

Dies ist nur ein Beispiel für das Verständnis, nicht ein vollständiger Arbeitscode, wenn überhaupt... :)




Beim Schließen von Aufträgen, wenn es mehr als einen Auftrag gibt, sollten wir diese Schleife verwenden:

int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) {
 //...
 
bolt:

Beim Abschluss von Aufträgen sollte bei mehreren Aufträgen ein Zyklus wie dieser verwendet werden:

Lesen Sie die letzte Zeile meines Beitrags. Wer sagt, dass ich ein Beispiel zum Abschluss geschrieben habe?

Der Rest ist die reine Wahrheit. Schreiben Sie Ihr eigenes Lehrbuch.

 

Können Sie mir sagen, warum OrderOpenPrice nicht funktioniert? Die Aufgabe besteht darin, den Pool nach einem Auftrag zu durchsuchen, der zu einem bestimmten Preis erteilt wurde, und wenn dieser nicht vorhanden ist, den Auftrag zu erteilen und ein Kennzeichen zu setzen, dass er erteilt wurde.


for(int i=1 ; i <= OrdersTotal() ; i++)
   {
   if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES))
      {
      if(OrderOpenPrice() == price) 
        {
        orderset = true;
        }
      }
   }
     
if((orderset==false)
   {
   OrderSend(Symbol(),OP_SELLLIMIT,baselot,price,3,NULL,price-10,"Comment",0001+i,0,White); 
   }
 
Pyro:

Können Sie mir sagen, warum OrderOpenPrice nicht funktioniert? Die Aufgabe besteht darin, den Pool nach einem Auftrag zu durchsuchen, der zu einem bestimmten Preis erteilt wurde, und wenn dieser nicht vorhanden ist, den Auftrag zu erteilen und ein Kennzeichen zu setzen, dass er erteilt wurde.



Wir können keine realen Zahlen vergleichen.
Grund der Beschwerde: