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

 
Es tut mir leid. Können Sie sich vorstellen, dass der letzte Nachtrag nicht protokolliert wird?
//----
   for ( i=OrdersHistoryTotal();i>0;i--){
    OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY  );
    if( OrderMagicNumber( )==2000 
    &&OrderSymbol()==Symbol()&&
    OrderTakeProfit( )==OrderClosePrice(        )&&wremjapomnim<OrderCloseTime( ) ||
   OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()
   &&OrderTakeProfit( )==OrderClosePrice(       )&&wremjapomnim<OrderCloseTime( )){
   Alert ("нашли MODE_HISTORY");
 for ( i=OrdersTotal();i>0;i--)  {
 Alert ("паследний цикл",i);
  OrderSelect(i-1,SELECT_BY_POS );
  if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
  || OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol())  { 
  Alert ("OrderTicket( )",OrderTicket( )); 
  OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse",  GetLastError( ) ); 
   OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
   Alert ("OrderClose-vse",  GetLastError( ) ); C=0; }}}}                              
   

Insbesondere die ZeileAlert ("OrderTicket( )",OrderTicket( )); Das könnte bedeuten, dass der letzte Zyklus nicht abgeschlossen ist!!!

Hier ist das Protokoll. Früher habe ich oft den Code umgeschrieben, ich stieß oft auf Fehler, ich denke, 4108 und 4050, jetzt gibt es keinen Fehler! Ja, aber es funktioniert sowieso nicht!

 

Ja, nun, ich denke, genau da wird es schwierig.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

Das stimmt, S... Was habe ich in der Schlange falsch gemacht?


 
Donnerwetter, ich weiß nicht, ein Zustand als Zustand.
 
Dimka-novitsek:

Ja, nun, ich denke, genau da wird es schwierig.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

Das stimmt, S... Was habe ich in der Schlange falsch gemacht?


|| wird zuerst ausgeführt, dann &&
 
ilunga:
nur zu diesem Zeitpunkt könnte es sich um einen schwebenden Fernauftrag handeln und das Ergebnis wäre ungewöhnlich ;)

Ich verstehe das nicht, es ist nicht gelöscht, ich wähle hier keine Modegeschichten. OK, nicht nötig, das kommt später.
 

-AAH!!! Also werde ich beide Seiten einklammern!!! DANKESCHÖN!!!!!

Uff!!!

Okay, ich werde duschen gehen. Es ist heiß.

 
Dimka-novitsek:

Ich verstehe das nicht, ich lösche nicht die gelöschten, nicht die Modegeschichten. Ok, nicht nötig, das kommt später.

Angenommen, wir haben 1 ausstehenden Auftrag zu löschen und wir haben die Zeile erreicht (der Einfachheit halber habe ich sie nach Operator unterteilt)

OrderDelete(OrderTicket( ));
Alert ("OrderDelete-vse",  GetLastError( ) );
OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
Alert ("OrderClose-vse",  GetLastError( ) );
 C=0;

Wir haben also diese Reihenfolge:

1) wir löschen sie, und zwar auf diese Weise:

a) wir haben Glück und es wird gelöscht

b) es darf nicht gelöscht werden, weil der Preis zu knapp ist/der Server überlastet ist/das Internet ausgefallen ist/etc. Aber wir machen trotzdem weiter.

2) Wenn etwas schief geht, schreiben wir es auf.

3) Schließen Sie den Auftrag (ausstehend!!! den wir im ersten Punkt gelöscht haben!!!)

Ergebnis... Ich kann es nicht zu 100% vorhersagen, aber es sieht nach einem weiteren Fehler aus.

4) eine Nachricht darüber anzeigen

 
Dimka-novitsek:

Ja, genau das ist das Problem.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

Es ist so richtig se... Was habe ich in der Zeile falsch gemacht?

Sagen wir es mal so... Damit niemand erschossen wird und man nicht herumkommandiert wird... :))

Fangen wir der Reihe nach an. Zuerst suchen wir die letzte geschlossene Position und stellen sicher, dass sie beim Take geschlossen ist:

   int j=-1;
   datetime t;
   // Поищем в цикле последнюю закрытую позицию, которая закрылась по TakeProfit
   for (int i=0; i<OrdersHistoryTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderSymbol()!=Symbol())     continue;
         if (OrderType()>1)               continue;
         if (OrderMagicNumber()==1000 || OrderMagicNumber()==2000) {
            if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
               }
            }
         }
      }
   if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
      if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point) {
         Alert("Позиция с тикетом #",OrderTicket()," закрыта по TakeProfit, закрываем остальные прозиции и удаляем отложенные ордера");
         // Здесь код для закрытия всех открытых позиций (тоже в цикле)
         // Здесь код для удаления всех отложенных ордеров (также в цикле)
         }
      }

Dies:

// Здесь код для закрытия всех открытых позиций (тоже в цикле)
// Здесь код для удаления всех отложенных ордеров (также в цикле)

Das wird Ihre Hausaufgabe sein... :)

 
DANKESCHÖN!!!!!!
 
Cooles Schreiben!!!!