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

 
Alexander Antoshkin:

Was können Sie...?

Berechne, wie viele Hobbits man braucht, um eine Glühbirne zu wechseln?

An Freiberufler schicken? Schreiben Sie "lesen Sie es dort"?

Wie finde ich die Koordinate des Abschlusses einer Reihe von Aufträgen in der Historie wie im Beispiel (ich plane, an dieser Stelle eine Linie zu ziehen)

Ich habe diese Frage bereits auf 151 Seiten dieses Threads gestellt, aber noch keine Lösung gefunden. https://www.mql5.com/ru/forum/160683/page151



Sie sollten nach einer Reihe von Aufträgen mit demselben Abschlussbalken in der Historie suchen. Die Zeit dieser Bar wird diejenige sein, nach der Sie suchen.
 
Alexander Antoshkin:

Was können Sie...?

Berechne, wie viele Hobbits man braucht, um eine Glühbirne zu wechseln?

An Freiberufler schicken? Schreiben Sie "lesen Sie es dort"?

Wir KÖNNEN eine Menge Dinge tun:)

Für das Hobbit-Problem gibt es keine pauschale Lösung...

Falls Sie es nicht verstanden haben, meine Antwort stammt aus demselben Video, dasVitalie Postolache zitiert hat.

Aber im Ernst:

Wie finde ich die Koordinate eines Geschäfts, das eine Reihe von Aufträgen in der Historie abschließt, wie im Beispiel (ich plane, an dieser Stelle eine Linie zu ziehen)

Ich habe diese Frage bereits auf 151 Seiten dieses Threads gestellt, aber es wurde keine Lösung gefunden. https://www.mql5.com/ru/forum/160683/page151

Ich habe den Zweig über den Link nicht gelesen. Aber es würde so sein:

Ermitteln Sie die Tatsache, dass mehrere Aufträge (einer oder verschiedener Art) innerhalb von X Punkten geschlossen werden (die Spanne von X Punkten ist erforderlich, da in der Realität nicht alle Geschäfte zum gleichen Preis geschlossen werden), ermitteln Sie den durchschnittlichen Schlusskurs und ziehen Sie eine Linie durch diesen.

 
Artyom Trishkin:
Suche in der Historie nach einer Reihe von Aufträgen mit demselben Schlussstrich. Die Zeit dieser Bar wird diejenige sein, nach der Sie suchen.
Dies ist das gleiche Problem wie meine Lösungsmethode: Je nach Ping und Anzahl der Orders kann es vorkommen, dass nicht alle Trades auf der gleichen Kerze geschlossen werden...
 
Alexey Kozitsyn:
Gleiches Problem wie bei meiner Lösungsmethode: Je nach Pings und Anzahl der Orders kann es vorkommen, dass nicht alle Trades auf der gleichen Kerze geschlossen werden...
Für M1 stimme ich zu. Für andere ist es unwahrscheinlich. Es sei denn, vor der Eröffnung der Kerze wird ein Schließungsauftrag erteilt. Es wird zwei Reihen von Aufträgen geben. Nehmen Sie die letzte von zwei nebeneinander liegenden.
 
Artyom Trishkin:
Für M1 stimme ich zu. Für andere ist es unwahrscheinlich. Wenn nur vor der Eröffnung einer Kerze ein Schließungsauftrag eingegangen ist. Es wird zwei Reihen von Aufträgen geben. Nehmen Sie die letzte von zwei nebeneinander liegenden.

Hier wurden nur wenige Daten zur Verfügung gestellt, um eine Entscheidung zu treffen: mehrere Pakete können auf derselben Kerze geschlossen werden (wenn man z.B. die stündlichen oder täglichen Kerzen betrachtet).

 
Vitalie Postolache:


Ich möchte parallele rote Linien, die sich aber schneiden sollen, und ich möchte, dass drei von ihnen grün und der Rest lila sind )))

Ach ja, und diese eine gerade Linie in Form eines Kätzchens!

Erscheint Ihnen das Problem falsch?

 
Alexey Kozitsyn:

Es liegen nicht genügend Daten vor, um eine Entscheidung zu treffen: Mehrere Pakete können an derselben Kerze geschlossen werden (wenn Sie z. B. die Stunden- oder Tageskerzen prüfen).

In jedem Fall gilt: je genauer, desto besser ...

die Aufträge werden gemäß der Trailing-Stop-Bedingung ohne Verlust geschlossen

d.h.

if(b+s>0)
{
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
tip = OrderType();
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OTP = NormalizeDouble(OrderTakeProfit(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
SL=OSL;
if(tip==OP_BUY)
{
SL=NormalizeDouble(Bid-TrailingStop*Point,Digits);
if(SL>OSL && SL>NLb)
{
if(!OrderModify(OrderTicket(),OOP,SL,0,0,White)) Print("Fehler Auftrag ändern ",GetLastError());
}
}
if(tip==OP_SELL )
{
SL=NormalizeDouble(Ask+TrailingStop*Point,Digits);
if((SL<OSL || OSL==0) && SL<NLs)
{
if(!OrderModify(OrderTicket(),OOP,SL,0,0,White)) Print("Fehler Auftrag ändern ",GetLastError());
}

 
Alexey Kozitsyn:
Schreiben Sie Ihren eigenen MA-Indikator, der einen zusätzlichen Puffer enthält, in den die Werte eingetragen werden, wenn ein neuer Balken gebildet wird.

Ich möchte einen Algorithmus zur Lösung des Problems erörtern, auch für verschiedene Methoden dergleitenden Mittelwertbildung.

 
Alexey Kozitsyn:

Wir KÖNNEN viele Dinge tun:)

Ermitteln Sie die Tatsache, dass mehrere Aufträge (desselben oder verschiedener Typen) innerhalb von X Punkten geschlossen werden (die Spanne von X Punkten ist erforderlich, da in der Realität nicht alle Geschäfte zum selben Preis geschlossen werden), bestimmen Sie den durchschnittlichen Schlusskurs und ziehen Sie eine Linie durch ihn.

int TotalPos=-1;

void start()
{
  if(OrdersTotal()!=TotalPos) { // не мучаем каждый тик
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      History();
     }
  }}} TotalPos=OrdersTotal(); // запомним количество
//--
} 
 
 void History() {
  string Ticket=(string)OrderTicket();
  color col=Red;
  if(OrderType()==0)col=Blue;
  datetime a=OrderOpenTime();
  double b=OrderOpenPrice();
  datetime c=OrderCloseTime();
  double d=OrderClosePrice();
  double prSep=OrderProfit()+OrderCommission()+OrderSwap();
  double prAll=0;
  int    cn=0;
  string hTicket;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      datetime ct=OrderCloseTime();
      // 60 секунд разницы между закрытием первой и последней в сетке
      if(c<=ct+60 && c>=ct-60) {
        prAll+=OrderProfit()+OrderCommission()+OrderSwap();
        hTicket=(string)OrderTicket();
        cn++;
      }
   }}}
   ObjectCreate(Ticket+'Open',OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+'Open',OBJPROP_COLOR,col);
   ObjectSet(Ticket+'Open',OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+'Line',OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+'Line',OBJPROP_COLOR,col);
   ObjectSet(Ticket+'Line',OBJPROP_WIDTH,1);
   ObjectSet(Ticket+'Line',OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+'Line',OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+'Close',OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+'Close',OBJPROP_COLOR,Green);
   ObjectSet(Ticket+'Close',OBJPROP_ARROWCODE,3);
  
   Ticket=cn>1?hTicket:Ticket;
   ObjectCreate(Ticket+'Profit',OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+'Profit',OBJPROP_ANCHOR,0);
   ObjectSetText(Ticket+'Profit',DoubleToString(prAll,2),10,'Arial',White);
   ObjectSet(Ticket+'Profit',OBJPROP_PRICE1,d);
   ObjectSet(Ticket+'Profit',OBJPROP_TIME1,c+Period()*60*2);

dies sollte dem Skript hinzugefügt werden ...

In Anbetracht der Tatsache, dass eine Reihe von Verkaufsaufträgen geschlossen wird

ObjectCreate(Ticket+'Debt B',OBJ_HLINE,0,0,d);
ObjectSet(Ticket+'Debt B',OBJPROP_COLOR,LimeGreen);
ObjectSet(Ticket+'Debt B',OBJPROP_WIDTH,1);

wenn eine Reihe von Kaufaufträgen geschlossen wird

ObjectCreate(Ticket+'Debt M',OBJ_HLINE,0,0,d);
ObjectSet(Ticket+'Debt M',OBJPROP_COLOR,Red);
ObjectSet(Ticket+'Debt M',OBJPROP_WIDTH,1);

Können Sie helfen?
 
-Aleks-:

Ich möchte einen Algorithmus erörtern, mit dem sich dieses Problem lösen lässt, auch für verschiedene Methoden dergleitenden Mittelwertbildung.

Schauen Sie sich die Datei MovingAverages.mqh im Ordner Include des Terminals an.
Grund der Beschwerde: