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

 
lottamer:


:)))) Es gibt keine Bedingung, die NICHT zu ändern wäre! :)))

wenn ((wenn dein Vater+Mutter == tschik-tschik-tschik) == TRUE)

FRAGE: Unter welchen Bedingungen würden Sie und ich nicht gerade ein Küken-Küken-Küken-Gespräch führen? :)))

 
Beowulf:
Können Sie mir Literatur vorschlagen , mit der ich beginnen und meinen eigenen EA erstellen kann? Oder ist das etwas, was Normalsterbliche nicht tun können? )))
Wir (gewöhnliche Sterbliche) können das nicht tun! ;)))
 
lottamer:


1) es ist verständlich

2) gerade überprüft...in Alpari kann man bei der Eröffnung keinen Stop und Take setzen. nur durch nachträgliche Änderung...Kosten für Non-Dealing-Desk

3) Es gibt eine Strategie.


Dann ist es so einfach, wie Sie vorgeschlagen haben. Nach der Änderung setzen Sie ein Kontrollkästchen und prüfen dessen Status vor der Änderung, wenn es einen Auftrag gibt. Bei mehr als einer Bestellung müssen Sie die Aufträge selbst abrechnen. Wie man das macht, steht im Abschnitt Artikel.
 
TarasBY:
Wir (Normalsterbliche) verstehen das nicht! ;)))



Ich werde ein wenig aus meinem Vakuum lesen ))))
 

Wie wird der Stop gesetzt, wenn die Differenz zwischen dem Eröffnungskurs und dem Stop nach dem Rollover geringer ist als der gesetzte Stop?

Meine Aufgabe lautet wie folgt. Wenn ich einen offenen Marktauftrag habe, sollte ich prüfen, ob er mit Rollover geöffnet wurde, und wenn ja, sollte ich das Ticket des vorherigen Auftrags erhalten, der geschlossen wurde. Vielleicht kann mir jemand den Suchalgorithmus nennen? Ich gehe derzeit folgendermaßen vor:

1. Ich wähle den ersten offenen Auftrag aus.
2. Wenn sie von 23:40 bis 00:20 Uhr geöffnet wurde, dann prüfe ich diesen Auftrag weiter (das 40-Minuten-Fenster wird nur für den Fall genommen, obwohl man theoretisch auch von 23:50 bis 23:59 Uhr nehmen könnte)
3. Ich erinnere mich an das Ticket, den Stop- und den Take-Preis
4. Ich überprüfe alle geschlossenen Aufträge in der Historie, bei denen die Kommentare das Wort Swap enthalten und die Währungspaare die gleichen sind
5. Ich vergleiche die Daten zu Stopps und Übernahmen, wenn sie übereinstimmen, handelt es sich um das gewünschte Auftragspaar, wenn nicht, gehe ich zurück zu Schritt 1

 

Die Antwort wurde (persönlich) gefunden, aber ich überlasse den Beitrag der Geschichte! :))))

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

aber hier ist das Interessante daran...

Ich habe ein Skript (das ich online erhalten habe), das einen offenen Auftrag ändert.

Meine Idee war, sie als Ganzes zu nehmen und sie in meinen Expert Advisor als benutzerdefinierte Funktion einzufügen und sie bei Bedarf aufzurufen.

Das Problem ist, dass der Compiler den Fehler "'MB_OK' - Variable nicht definiert G:\Program_Files_2\MT4-demo\experts\33.mq4 (153, 37)" - 3. Zeile vom Ende

Aber wenn Sie das Skript selbst kompilieren, ist alles klar!

Ich habe herausgefunden, was MV_OC ist...aber ich verstehe nicht, warum es im Skript funktioniert, aber im Expert Advisor gewarnt wird?

//+------------------------------------------------------------------+
//|                                               Изменить стопы.mq4 |
//|                                                          Мефодий |
//|                                                    ppc-2@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Мефодий"
#property link      "ppc-2@mail.ru"
#include <WinUser32.mqh>

extern  int  StopLoss = 500; 
extern  int  TakeProfit = 500;

// #property show_confirm
// #property show_inputs

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+

int start()
  {
        bool   result;
        double stop_loss,take_profit,point,bid,ask, lotsize;
        int    cmd, total, error, spread;
        string message;
//----
   total=OrdersTotal();

//----
   for(int i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         point=MarketInfo(OrderSymbol(),MODE_POINT);
         bid= MarketInfo(OrderSymbol(),MODE_BID);
         ask= MarketInfo(OrderSymbol(),MODE_ASK);
         spread=MarketInfo(OrderSymbol(),MODE_SPREAD);     
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
          {
            //---- modify first market order
            while(true)
             {
                if(cmd==OP_BUY){
                        string type = "buy";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()-StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()+TakeProfit*point;
                }
                     
                else{
                        type = "sell";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()+StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()-TakeProfit*point;
                }   
                result=OrderModify(OrderTicket(), OrderOpenPrice(), stop_loss, take_profit, 0, CLR_NONE);
                if(result!=true) { error=GetLastError(); Print("LastError = ",error);}
                else {error=0;}
                if(error==135) RefreshRates();
                else break;
              }
                if(error==0){
                        message=message+"Ордер #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+" успешно модифицирован.\n";
                        }
                        else{
                                if(error == 130){string error_desc = " - Неправильные стопы";} else error_desc = "";
                                if(error != 1)
                        message=message+"Ошибка модификации ордера #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+". "+error_desc+" \n";
                        }

              //---- print modified order (it still selected after modify)
              OrderPrint();
              continue;             
           }
        }
      else { Print( "Error when order select ", GetLastError()); break;}
     }
        int ret=MessageBox(message, NULL, MB_OK);
        //if(ret==IDOK) return(0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Es stellt sich heraus, dass die Zeile #include <WinUser32.mqh> vorhanden sein muss.

und diese Datei befindet sich im Include

 

Lass mich angeben...

brauchen Sie beim Ändern keine Flaggen.

es genügt, unter if-Bedingung (z.B. cross-means)... einen Verweis auf die Funktion BUY und MODIFY in Klammern {} zu verwenden

und auf diese Weise wird die Bedingung auf beide Aktionen übertragen :))

wie diese

{Mein_Kauf ();

My_modify (); }

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

 

lottamer:

wie diese

{Mein_Kauf ();

My_modify (); }

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

Eine solch lose Auslegung des Programmcodes bedarf der Klärung:

    if (условие == true)
    {
        if (Tvoi_buy() == true)  // как вариант
        {Tvoi_Modify();}
    }
:)))
 
TarasBY:

Eine solch lockere Auslegung des Programmcodes bedarf der Klärung:

:)))


Warum?

und kann My_buy (eine nicht-boolesche Variable) auf TRUE-FALSE geprüft werden?

Die Änderung geht sicher - der Auftrag ist offen - wir müssen die Stopp-Bestände setzen...