Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1662

 
Taras Slobodyanik #:

Warum brauchen Sie 3 Methoden?
Es reicht, wenn Sie alles mit einer Methode erledigen

  • die Bestellung überprüft

- geändert
- nicht geändert

Das ist interessant!

Taras, nehmen wir an, wir haben drei Kaufaufträge mit TP und SL, dann haben wir in einem Auftrag den SL geändert.

Frage: Wie finde ich den Auftrag, der geändert wurde?

 
Taras Slobodyanik #:

Warum brauchen Sie 3 Methoden?
Es reicht, wenn Sie alles mit einer Methode erledigen

  • die Bestellung überprüft

- geändert
- nicht geändert

Es gibt bereits zwei, eine steuert die Größe des Arrays über OrdersTotal(), in dem die Tickets der geänderten Bestellungen gespeichert werden, und die andere sucht in diesem Array nach Tickets. Aber jetzt habe ich Code an anderer Stelle geändert, nicht im Zusammenhang mit all dies, und aus irgendeinem Grund fange ich einen Fehler (Array overrun).
 
MakarFX #:

Interessant!

Taras, nehmen wir an, es gibt drei Kaufaufträge mit TP und SL, dann wurde bei einem Auftrag SL geändert.

Frage: Wie finde ich den Auftrag, der geändert wurde?

Offensichtlich wurde die SL (oder TP) aus einem bestimmten Grund geändert, oder?
Wir sollten sie anhand einiger Bedingungen überprüfen.

Bei der nächsten Prüfung wird diese Bedingung dann als "erfüllt" definiert - der Auftrag wurde bereits geändert.


PS: Wenn es sich um eine manuelle Modifikation handelt, d.h. jemand ändert etwas ohne das Wissen von EA, dann müssen wir natürlich eine Array-Struktur sammeln und sie ständig mit den Marktaufträgen vergleichen.

 
Taras Slobodyanik #:

Warum brauchen Sie 3 Methoden?
Es reicht, wenn Sie alles mit einer Methode erledigen

  • die Bestellung überprüft

- geändert
- nicht geändert

Die Reihenfolge ist nicht 1, sondern, sagen wir, es sind 10 Stück. Ich schreibe das Ticket von jedem geänderten Ticket in ein Array. Bislang ist dies jedoch ein Problem.
 
MakarFX #:

Entfernt

MakarFX, danke! Jetzt gibt es keine zusätzliche erste Nicht-Signal-Order, aber jetzt aus irgendeinem Grund die erste Signal-Order (normal) ist die Eingabe 2 Kerzen früher))) Ich habe einen Screenshot aus dem Tester zu meiner Nachricht beigefügt, aber auch trotz dieser ersten Bestellung - das Wichtigste ist getan, vielen Dank noch einmal) Mit Magier bekam es, dann werde ich eine externe Variable zu machen und wenn ich die espert zu einem bestimmten Währungspaar Chart anhängen, werde ich die Zahl für jedes Paar einzeln zu ändern.

 
Nerd Trader #:
Die Bestellung ist nicht 1, sondern es gibt 10 Bestellungen. Ich werde das Ticket jedes geänderten Tickets in das Array schreiben. Bislang ist dies jedoch ein Problem.

es spielt keine Rolle, wie viele Aufträge es gibt - solange die TP/SL nicht geändert werden müssen, entsprechend den Bedingungen = der Auftrag wurde bereits geändert.

 
SanAlex #:

Der ist gut für den Spaß im Tester.

und dieses ist für Sie, als Geschenk - um Geld zu verdienen.

\\\\\\\\\\\\\\\\\\\\\\\\\\

Ich habe es zu Testzwecken ausgeführt - wir werden sehen, wie es heute Abend funktioniert.

\\\\\\\\\\\\\\\\\\\\\\\\\\\

überprüft, wie sich das Muster auf allen Karten ändert - alles hat funktioniert! -wie der Gesamtgewinn das Ziel erreicht hat.


SanAlex, sehr interessant, ich werde mir diesen EA auf jeden Fall im Detail ansehen, danke!

 

Jungs, guten Tag auf den Code beraten, hier ist ein Diagramm auf der rechten Seite der beiden Trades minus kaufen - wird durch einen Verkauf, verkaufen kaufen, nach dem Algorithmus sollte in den Kauf, aber warum - dann diese beiden fi-tions, die aussehen und produzieren ein Minus-Trade die jüngste in der Geschichte - zeigen sowohl in der plus! Wie zu schreiben und wo der Fehler - diese TC flip, Mittelwertbildung - diese gleichen f-i richtig funktionieren, kurz gesagt, nach dem Minus-Verkauf - haben zu kaufen, aber es nicht öffnen, weil Mit anderen Worten, es sollte Kauf öffnen, wenn meine Bestellung ist zu verlieren, aber kaufen nicht öffnen, weil f-i denken, wenn das Geschäft ist der Verlust der meisten Rand, diese f-iia Bericht TRUE, sonst ist es falsch, aber sie beide Bericht TRUE. Bitte helfen Sie mir bei der Entscheidung.



// проверка предыдущего минусового селл
bool Calc_Loss_SELL()
  {
   bool ord;
   bool TotalLot=false;
   HistorySelect(TimeCurrent()-HistoryDaysLoadI*86400,TimeCurrent());
   for(int i=HistoryDealsTotal()-1; i>=0; i--)
     {
      ulong ticket=HistoryDealGetTicket(i);
      ord=HistoryDealSelect(ticket);
      if(ord && HistoryDealGetString(ticket,DEAL_SYMBOL) == _Symbol
         && HistoryDealGetInteger(ticket,DEAL_MAGIC) == MagicC
         && HistoryDealGetInteger(ticket,DEAL_ENTRY) == DEAL_ENTRY_OUT
         && HistoryDealGetInteger(ticket,DEAL_TYPE) ==  DEAL_TYPE_BUY)
        {
         if(HistoryDealGetDouble(ticket,DEAL_PROFIT) < 0)
           {
            TotalLot=true;
            if (УСРЕДНЯЛКА) Print(" усреднение в селл разрешено ",TotalLot);
            else  Print(" ПЕРЕВОРОТ В БАЙ разрешен ",TotalLot);
            break;
           }
         else
           {
            break;
           }
        }
     }
   return (TotalLot);
  }


// проверка предыдущего минусового бай
bool Calc_Loss_BUY()
  {
   bool ord;
   bool TotalLot=false;
   HistorySelect(TimeCurrent()-HistoryDaysLoadI*86400,TimeCurrent());
   for(int i=HistoryDealsTotal()-1; i>=0; i--)
     {
      ulong ticket=HistoryDealGetTicket(i);
      ord=HistoryDealSelect(ticket);
      if(ord && HistoryDealGetString(ticket,DEAL_SYMBOL) == _Symbol
         && HistoryDealGetInteger(ticket,DEAL_MAGIC) == MagicC
         && HistoryDealGetInteger(ticket,DEAL_ENTRY) == DEAL_ENTRY_OUT
         && HistoryDealGetInteger(ticket,DEAL_TYPE) == DEAL_TYPE_SELL)
        {
         if(HistoryDealGetDouble(ticket,DEAL_PROFIT) < 0)
           {
            TotalLot=true;
            if (УСРЕДНЯЛКА) Print(" усреднение в бай разрешено ",TotalLot);
            else  Print(" ПЕРЕВОРОТ В СЕЛЛ разрешен ", TotalLot);
            break;          
           }
         else
           {
            break;
           }
        }
     }
   return (TotalLot);
  }


    //----------------------------------------------
      // проверка условий ПЕРЕВОРОТА В СЕЛЛ
      // нет поз рыночных и предыдущая сделка В БАЙ была минусовая и не было минусового селла
       Print(" Calc_Loss_BUY(): ",Calc_Loss_BUY(), " Calc_Loss_SELL(): ",Calc_Loss_SELL());
      
      if(!PositionSelect(Symbol()) && Calc_Loss_BUY() && !Calc_Loss_SELL())
        {
         m_trade.Sell(CalcLot(),_Symbol,LastTick.bid,LastTick.ask+double(SLE)*_Point,LastTick.bid-double(TPE)*_Point - _Spread*_Point);
         Print(" ПЕРЕВОРОТ БАЯ В СЕЛЛ, Calc_Loss_BUY(): ",Calc_Loss_BUY());
        }

 
      // проверка условий ПЕРЕВОРОТА в SELL
      // нет поз рыночных и предыдущий селл был минусовой И НЕ БЫЛО МИНУСОВОГО БАЙ
      
      if(!PositionSelect(Symbol()) && Calc_Loss_SELL() && !Calc_Loss_BUY())
        {
         m_trade.Buy(CalcLot(),_Symbol,LastTick.ask,LastTick.bid-double(SLE)*_Point,LastTick.ask+double(TPE)*_Point + _Spread*_Point);
         Print(" ПЕРЕВОРОТ СЕЛЛА В БАЙ, Calc_Loss_SELL(): ",Calc_Loss_SELL());
        }

Ich kann es nicht öffnen kaufen, aber es sollte es nach einem ubutical verkaufen!!!!!!!!! öffnen.


Im Wesentlichen kommt das Problem auf die Bestimmung von Gewinn oder Verlust geschlossen wurde Marginal Position, die ein Kauf oder Verkauf Handel wurde und schauen Sie weiter auf seine Art!

HILFE! PLUS!

 

Guten Tag!

Es gibt zwei Funktionen: eine Funktion zum Berechnen des gesamten Rasters der Aufträge und eine Funktion zum Schließen der Aufträge

//+------------------------------------------------------------------+
double CalculiteProfit()
{
    double oProfit = 0;
    for(int i = OrdersTotal()-1; i>=0; i--)
    {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
        if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
        {
          if (OrderType() == OP_BUY || OrderType() == OP_SELL)
          {
            oProfit += OrderProfit();
          }
        }
      }
    }
    return(oProfit);
}
//+------------------------------------------------------------------+
 double FindLastBuyPrice()
{
   int oldticket, ticket = 0;
   double oldopenprice = 0;
   
   for(int cnt = OrdersTotal()-1; cnt>=0; cnt--)
   {
    if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
     {
        if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
        {
          oldticket = OrderTicket();
          if (oldticket > ticket)
          {
            ticket = oldticket;
            oldopenprice = OrderOpenPrice();
          } 
        }
     }
   }
   return(oldopenprice);
 }
//+------------------------------------------------------------------+

Es gibt auch Bedingungen für den Abschluss von Aufträgen

 double op = CalculiteProfit(); 
     if (op >= Profit)
     {
       ClosseAll();
     }

Gewinn - in den Einstellungen in Depotwährung

Die Idee des Ganzen: Nachdem die Berechnung des Ordergitters gleich Null plusGewinn in der Einzahlungswährung ist , wird das gesamte Ordergitter geschlossen

Bitte helfen Sie mir, den Code so zu ändern, dass es Punkte anstelle von Gewinn gibt. Ich danke Ihnen.

 
Taras Slobodyanik #:

Offensichtlich wurde die sl (oder tp) aus einem bestimmten Grund geändert, nicht wahr?
Aber unter bestimmten Bedingungen.

Bei der nächsten Überprüfung wird diese Bedingung also als "erfüllt" definiert - der Auftrag wurde geändert.


Wenn es sich um manuelle Änderungen handelt, d.h. jemand ändert etwas ohne Wissen von EA, dann müssen wir natürlich eine Array-Struktur sammeln und diese ständig mit Marktaufträgen vergleichen.

Ich hatte es schon vergessen... und am Anfang tat ich es auch (gut, dass ich mich verpflichtet habe), aber die Art der Bedingung schien unzuverlässig, ich wollte etwas Offensichtlicheres, um eine geänderte Reihenfolge anzuzeigen.