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

 

Auf diese Weise gelöst:

int nday;

 if(OrdersTotal()==0)

 {

  double lot=(AccountBalance()/ MinLot)*0.01;

  if(center>Ask && pokupaem>0 && prodaem<1 && prodaem1<1 && SelBuyDaily==Vhodim1 && proverka==1)

  {

   x=OrderSend(Symbol(),OP_BUY,lot,Ask,3,0,0,Komment,Magic,0,Blue);

   nday=DayOfYear();

  }

  if(OrderSelect(x,SELECT_BY_TICKET)==true)

 {

  if((OrdersTotal()>0 && OrderCloseTime()==0 && OrderType()==OP_BUY) && (nday<DayOfYear() || OrderOpenTime()<iTime(NULL,0,0)))

  {

   if(pokupaem>0 && prodaem<1 && Ask+atr<OrderOpenPrice() && proverka==1)

   {

    x=OrderSend(Symbol(),OP_BUY,OrderLots()*Ml,Ask,3,0,0,Komment,Magic,0,Blue);

    nday=DayOfYear();

   }

  }

 }

 

Zum ersten Mal habe ich versucht, eine Positionseröffnung in die Schleife zu schreiben, da ich nicht ausschließe, auch auf anderen Paaren zu eröffnen.

Aber aus irgendeinem Grund öffnet sich nichts in der Schleife! Brauche ich wirklich eine spezielle Schlaufe, um sie zu öffnen? Stimmt, ich habe es nur im Testgerät überprüft!

Ich habe eine normale geschrieben:

    optal = OrdersTotal();
    for(op = optal-1; op >= 0; op--) 
    { 
      if(OrderSelect(op,SELECT_BY_POS,MODE_TRADES))
      { 
        if(OrderSymbol() != Symbol()) continue;
        if(OrderMagicNumber() != magic) continue; 
// и т.д.

Was ist bei der Eröffnung von Aufträgen und Positionen falsch? Vielen Dank für Ihre Hilfe!

 
borilunad:

Zum ersten Mal habe ich versucht, eine Positionseröffnung in die Schleife zu schreiben, da ich nicht ausschließe, auch auf anderen Paaren zu eröffnen.

Aber aus irgendeinem Grund öffnet sich nichts in der Schleife! Brauche ich wirklich eine spezielle Schlaufe, um sie zu öffnen? Stimmt, ich habe es nur im Testgerät überprüft!

Ich habe eine normale geschrieben:

Was ist bei der Eröffnung von Aufträgen und Positionen falsch? Vielen Dank für die Hilfe!



Solange es keine Bestellungen gibt, wird der Zyklus nicht in Gang gesetzt. Was ist der Sinn des Zyklus im Allgemeinen?
 
borilunad:

Zum ersten Mal habe ich versucht, eine Positionseröffnung in die Schleife zu schreiben, da ich nicht ausschließe, auch auf anderen Paaren zu eröffnen.

Aber aus irgendeinem Grund öffnet sich nichts in der Schleife! Brauche ich wirklich eine spezielle Schleife, um Positionen zu öffnen?

Ich habe eine normale geschrieben:

Was ist bei der Eröffnung von Aufträgen und Positionen falsch? Vielen Dank für die Hilfe!

Die Schleife wird schneller ausgeführt, als der Handelsfaden freigegeben wird. Deshalb sollten wir eine Verzögerungsschleife hinzufügen , während(!IsTradeContextBusy()) Schlaf(100);
 
valeryk:


Die Schleife beginnt erst, wenn es keine Aufträge gibt! Was ist der Zweck der Schleife im Allgemeinen?


Ich danke Ihnen! Das habe ich auch gedacht! Wenn ich also z. B. beim ersten Paar öffnen möchte, reicht es, wenn ich keine Schleife einfüge, sondern if(OrdersTotal == 0). Und wenn ich eine weitere Bestellung desselben oder eines anderen Paares aufgeben möchte, brauche ich nur eine Schleife, und es wird funktionieren! Ich werde es jetzt versuchen!

Ich schätze, ich werde in der Eröffnung eine Menge Dinge ändern müssen, aber im Prinzip verstehe ich, wie ich es machen sollte! Ich danke Ihnen!

 

Eine verderbliche Logik, um genau zu sein. Ich habe zuerst nicht genau hingesehen.... Warum brauchen wir OrdersTotal() beim Öffnen von Aufträgen?

Nun, wenn wir mehrere Aufträge in der Schleife öffnen müssen, muss die Schleife entsprechend der Anzahl der notwendigen Aufträge organisiert werden. Und wenn wir diese Zahl ständig unterstützen müssen, müssen wir andere Regeln anwenden.

Wir müssen zum Beispiel 7 Aufträge eröffnen.

for(int i = 0; i < 7; i++)
{
while(!IsTradeContextBusy()) Sleep(100); // Ожидание освобождения торгового потока

int ticket = OrderSend(Symbol(), ..............); // Открытие ордера
if(ticket > 0) Print("Открылся ордер № ", i, " ticket - ", ticket); // Проверка пропусков при открытии.
}
Aber das ist eine kurze Variante. Eine gute Idee wäre es, eine Fehlerbehandlung beim Öffnen von Aufträgen hinzuzufügen
 
AlexeyVik:

Eine verderbliche Logik, um genau zu sein. Ich habe anfangs nicht genau hingesehen.... Warum brauchen wir OrdersTotal() beim Öffnen von Aufträgen?

Nun, wenn wir mehrere Aufträge in der Schleife öffnen müssen, muss die Schleife entsprechend der Anzahl der notwendigen Aufträge organisiert werden. Und wenn wir diese Zahl ständig unterstützen müssen, müssen wir andere Regeln anwenden.

Zum Beispiel müssen wir 7 Aufträge eröffnen

Aber das ist eine kurze Variante. Eine gute Idee wäre es, eine Fehlerbehandlung beim Öffnen von Aufträgen hinzuzufügen
!

Ich danke Ihnen! Aber ich brauche eine Schleife, damit die Eulen keine anderen Paare sehen! Mit Fehlern werde ich mich später befassen! Ich war sogar froh, als der Fehler 130 im Protokoll erschien, denn das bedeutet, dass es funktioniert! Fehler werden in meinen externen Funktionen behandelt! Nochmals vielen Dank!
 
borilunad:

Ich danke Ihnen! Aber ich brauche eine Schleife, damit die Eulen keine anderen Paare sehen! Um die Fehler kümmere ich mich später! Ich war sogar froh, als der Fehler 130 im Protokoll auftauchte, es funktioniert also! Fehler werden in meinen externen Funktionen behandelt! Nochmals vielen Dank!
Das ist die Bösartigkeit der Logik. Die Eule kann andere Paare nicht übersehen. Es kann und sollte gezwungen werden, die bereits OFFENEN ORDERS anderer Symbole nicht zu bearbeiten. Und in der Funktion OrderSend(............) sollten Sie ein bestimmtes Symbol() oder ein Textformat eingeben, zum Beispiel "EURUSD"... was immer Sie dort eingeben, wird geöffnet. Oder versuchen Sie zu öffnen...
 
AlexeyVik:

Eine verderbliche Logik, um genau zu sein. Ich habe zuerst nicht genau hingesehen.... Warum brauchen wir OrdersTotal() beim Öffnen von Aufträgen?

Nun, wenn wir mehrere Aufträge in der Schleife öffnen müssen, muss die Schleife entsprechend der Anzahl der notwendigen Aufträge organisiert werden. Und wenn wir diese Zahl ständig unterstützen müssen, müssen wir andere Regeln anwenden.

Zum Beispiel müssen wir 7 Aufträge eröffnen

Aber das ist eine kurze Variante. Eine gute Idee wäre es, eine Fehlerbehandlung beim Öffnen von Aufträgen hinzuzufügen

Dies ist eine gute Möglichkeit zu prüfen, ob wir bis zu acht Aufträge in einem Tick öffnen können. Sie wurden uns versprochen, aber niemand hat sie bisher überprüft.
 
Vinin:

Ein guter Weg, um die Fähigkeit zu testen, bis zu acht Aufträge in einem einzigen Tick zu öffnen. Sie wurden uns versprochen, aber niemand hat sie bisher überprüft.

Ich versteh das nicht...