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

 
Leonid123456:

für diesen EA zuletzt)). Es hat tatsächlich funktioniert, es war die letzte)). Der Expert Advisor ist zum Testen... Also, Arbeit für mehrere Währungen und manueller Handel (zusammen) ist noch nicht vorgesehen...

Können Sie mir ein paar Tipps für die Zukunft geben, es wäre schön zu wissen, wie man es richtig macht...

Nochmals vielen Dank.

Bei Bedarf sollten Sie eine Market Order von einer Pending Order unterscheiden. Die erste, die Sie nach allen Kriterien (Symbol, Magier, Typ) gefunden haben, ist in der Regel die frischeste. Aber es wäre besser, auch auf den Zeitpunkt der Eröffnung zu achten, damit sie sicher nicht jünger ist.

Im Testgerät können Sie sofort wählen

OrderSelect(OrdersTotal()-1,SELECT_BY_POS))

Wenn das System keine ausstehenden Aufträge hat, funktioniert alles einwandfrei. Wenn jedoch sowohl schwebende Aufträge als auch Marktaufträge vorliegen, wird dies nicht funktionieren, ganz zu schweigen von der eigentlichen Arbeit.

 
Leonid123456:

für diesen EA zuletzt)). Es hat tatsächlich funktioniert, es war die letzte)). Der Expert Advisor ist zum Testen... Also, Arbeit für mehrere Währungen und manueller Handel (zusammen) ist noch nicht vorgesehen...

Können Sie mir ein paar Tipps für die Zukunft geben, es wäre schön zu wissen, wie man es richtig macht...

Nochmals vielen Dank.

Es ist besser, keine unnötigen Dinge zu schreiben. Warum haben Sie verschachtelte Schleifen eingefügt? Schließlich kann alles, was Sie brauchen, in einer einzigen Schleife mit einer Auftragsauswahl erledigt werden.

if(New_Bar)
{
OrderSend(Symbol(),OP_BUYSTOP,Lotpers,Ask+step,100,0,0,NULL,MagicNumber,0,DarkTurquoise);
OrderSend(Symbol(),OP_SELLSTOP,Lotpers,Bid-step,100,0,0,NULL,MagicNumber,0,Yellow);
}

 for(int b=0; b<OrdersTotal(); b++)
  {
   if(OrderSelect(b, SELECT_BY_POS) && OrderSymbol() == _Symbol && OrderMagicNumber() == MagicNumber)
    {
     lastlot = OrderLots();
   // Здесь надо в переменную засунуть тикет выбранного ордера
     if(OrderType() == OP_BUYSTOP||OrderType() == OP_BUY)
      orderprisebuy = OrderOpenPrice();
   
      if(OrderType() == OP_SELLSTOP||OrderType() == OP_SELL)
       orderprisecell = OrderOpenPrice(); 
         
        SL_VirtualCell = orderprisecell+step1*Point;
        SL_VirtualBuy = orderprisebuy-step1*Point;

                          /*  if(Mas_Tip[0] >0|| Mas_Tip[1] >0)
                                               {
if (New_Bar&&/*valsar1<Ask &&  osma0>0&&osma1<0    /*&& Volume[1]>VolumeFiltr)

OrderSend(Symbol(),OP_BUY,NormalizeDouble( lastlot*Marti,2),Ask,100,0,0,NULL,MagicNumber,0,DarkTurquoise);

if (New_Bar&& /*valsar1>Bid && osma0<0&&osma1>0    /* && Volume[1]>VolumeFiltr)

OrderSend(Symbol(),OP_SELL,NormalizeDouble( lastlot*Marti,2),Bid,100,0,0,NULL,MagicNumber,0,Yellow);       
         
}*/

CheckEvents(MagicNumber); // Вот здесь теряется выбранный ордер при переборе ордеров в вызванной функции

/*if ( eventSellClosed_SL >0|| eventBuyClosed_SL >0)
{        as();
                

 }
  /* ///   if ( eventBuyClosed_TP > 0 )
   //     Alert( Symbol(), ": Buy-позиция закрыта по ТейкПрофиту!" );

   */
    if(eventBuyStopOpened > 0)
     {
      OrderSend(Symbol(),OP_SELLSTOP,NormalizeDouble( Lotpers,5),orderprisecell,0,0,0,NULL,MagicNumber,0,clrKhaki); 
 
      if (OrderType() == OP_SELL)
       OrderClose(OrderTicket(),OrderLots(), Ask, 3,clrIvory );  // Здесь может быть чужой OrderTicket() Возможны и другие аналогичные потери
     }//завершение блока if(eventBuyStopOpened > 0)
 ///

  if(eventSellStopOpened > 0)
  {
  OrderSend(Symbol(),OP_BUYSTOP,NormalizeDouble( Lotpers,5),orderprisebuy,0,0,0,NULL,MagicNumber,0,clrPlum);
 
   if (OrderType() == OP_BUY)
    OrderClose(OrderTicket(),OrderLots(), Bid, 3,clrIvory );  
  }//завершение блока if(eventSellStopOpened > 0)
 }//завершение блока if(OrderSelect(b
}//завершение блока for(int b=0


Ich habe es nicht geschafft, an die Stelle zu kommen, an der Sie mehrzeilige Kommentare haben. Ich hatte den Eindruck, dass hier ein Kompilierungsfehler vorliegt... Achten Sie auf meine Kommentare im Code.

 
Zhunko:
Was soll das bringen?
vielen Dank für Ihre Hilfe!
 
AlexeyVik:

Schreiben Sie keine unnötigen Dinge. Warum haben Sie verschachtelte Schleifen eingefügt? Denn alles, was Sie brauchen, können Sie in einer Schleife mit einer Auftragsauswahl erledigen.


Ich habe es nicht geschafft, die Stelle zu verstehen, an der Sie mehrzeilige Kommentare haben. Ich hatte den Eindruck, dass hier ein Kompilierungsfehler vorliegt... Achten Sie auf meine Kommentare im Code.

Es liegen keine Fehler vor, aber es wird vorgeschlagen, die FunktionenOrderSend,OrderClose undOrderDelete zu überprüfen.

Rückgabewert von "OrderSend" sollte geprüft werden .

Vielen Dank für Ihre Kommentare.

 

Suche nach dem Minimum des "ZigZag"-Indikators im Array mit"ArrayMinimum".

Kann ich die Suche so einstellen, dass Nullwerte ignoriert werden, oder muss ich eine Schleife verwenden, um sie zu finden?

 
Ich kann nicht herausfinden, wie man kodiert. Ich möchte, dass der EA eine bestimmte Zeit lang wartet, wenn die letzte Pose unrentabel war. Haben Sie eine Ahnung?
 
Forexman77:

Suche nach dem Minimum des "ZigZag"-Indikators im Array mit"ArrayMinimum".

Kann ich die Suche so einstellen, dass Nullwerte ignoriert werden, oder muss ich eine Schleife verwenden, um sie zu finden?

Höchstwahrscheinlich werden Sie eine Schleife verwenden müssen
 
Vinin:
Wahrscheinlich müssen Sie eine Schleife verwenden
Ich danke Ihnen!
 

Wie findet man die tiefste Korrektur zwischen dem Maximum und dem Minimum? Das Maximum und Minimum sind uns bekannt, es ist kein Problem, sie mit iHighest und

Wenn wir iHighest und iLowest verwenden, finden wir manchmal nahe Extrema, was nicht immer der Fall ist, wie in der Abbildung gezeigt. Im Allgemeinen müssen wir die ABC-Bildung identifizieren.

Ich habe versucht, ZigZag dafür anzuwenden, aber es bringt keine exakten Treffer.

е.

 

Forexman77:

Wie findet man die tiefste Korrektur zwischen dem Maximum und dem Minimum? Das Maximum und Minimum sind uns bekannt, es ist kein Problem, sie mit iHighest und

Wenn wir iHighest und iLowest verwenden, finden wir manchmal nahe Extrema, was nicht immer der Fall ist, wie in der Abbildung gezeigt. Im Allgemeinen müssen wir die ABC-Bildung identifizieren.

Ich habe versucht, ZigZag dafür anzuwenden, aber es bringt keine exakten Treffer.

Alles wird einfach sein, wenn zu bestimmen, auf welche Tiefe sollte suchen. Anstelle von iLowest können Sie CopyLow und ArrayMinimum() verwenden