Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 765

 
Alexey Kozitsyn:

Das Mausbewegungsereignis wird definitiv nicht erzeugt. Bei den anderen ist es, glaube ich, das Gleiche.

Und in der EA?
 
Artyom Trishkin:
Und im Stadtrat?

Das ist dasselbe...

 
Alexey Viktorov:

Die Antwort wurde vorher gegeben...

Aber es ist besser, nicht von einer geringen Menge auszugehen, sondern maximal zu versuchen, mit einem Exemplar auszukommen.

Ich werde keinen Beispielcode schreiben. Ein normaler Programmierer braucht nur einen Hinweis. Hier ist ein ungefährer Algorithmus:

  1. Wir bestimmen die ungefähre Anzahl der Takte, bei denen der Kanal gekreuzt wird. Es sollen 15 sein.
  2. Kopieren Sie beide Puffer des Indikators.
  3. Kopieren der Werte von Balken mit CopyRates()
  4. In der Schleife beginnen wir mit dem Vergleich der Werte der oberen Grenze des Kanals und der hohen Balken, während wir gleichzeitig die niedrigen Balken mit der unteren Grenze des Kanals vergleichen. Wird eine dieser Überschneidungen gefunden, wird der Balkenindex in einer Variablen gespeichert, und es wird weiter nach der zweiten Überschneidung gesucht. Wir verlassen die Schleife, wenn beide Variablen der Kreuzungsbalken Werte haben.

Auf diese Weise ist es möglich, zwei Schnittpunkte in einer Kopie und einem Zyklus zu finden, falls erforderlich. Es gibt sogar keine Notwendigkeit in ArraySetAsSeries(), weil bei der Suche nach der Kreuzung ist es möglich und meiner Meinung nach besser, die Zeit der Bar, nicht seine Nummer zu erinnern. Wenn man die Zeit der Bar kennt, ist es nicht schwer, ihre Anzahl zu bestimmen.

Frage: Was ist schneller, ein Zyklus mit Kopieren des Indikatorpuffers um 1 Wert und Kopieren des oberen Balkens um 1 und Vergleichen dieser Werte oder ein einzelnes Kopieren eines bestimmten Betrags und Vergleichen der Werte der beiden Arrays miteinander?

Ich schlage vor, nicht von dem Konzept abzuweichen, das, so wie ich es verstanden habe, darin besteht, eine bestimmte Menge an Taktdaten am Anfang des Codes zu kopieren und dann mit diesen Daten zu arbeiten - oder schlagen Sie eine Ausnahme vor?

Und wie kommen Sie darauf, dass ich ein Programmierer bin?

Ich glaube nicht, dass Sie raten müssen - was schneller sein wird, manchmal ist die Antwort nicht offensichtlich - nur Erfahrung kann eine Antwort auf solche Fragen geben.


 
Vladimir Karputov:

Ich habe das erst gestern geschrieben:

Aufgabe:

bei jedem Tick die "InpCountCopy"-Elemente open, high, low, close und time.

Umsetzung:

  1. Schleife von "0" bis "InpCountCopy-1" - die Schleife erfasst jeweils ein Open, High, Low, Close und eine Zeit.
  2. Zu einem Zeitpunkt erhalten wir "InpCountCopy"-Elemente in die MqlRates-Struktur und durchlaufen dann eine Schleife durch die Struktur.

Merkmale:

Es kann gewählt werden, wie die Prüfung erfolgen soll: in OnTick oder in OnTimer (1 Sekunde).

Danke, ich werde versuchen, den Code zu verstehen.
 

Erklären Sie mir, warum dieser Code ein Ticket findet, das nicht bereits in der Historie enthalten ist

  HistorySelect(0,TimeCurrent()); 
  for(int i=HistoryOrdersTotal()-1; i>=0; i--) {
   string OrdTick=IntegerToString(HistoryOrderGetTicket(i));
   if(OrdTick=="63425010") Print(OrdTick);
  }
2017.07.24 23:58:33.514 RE (EURGBP.m,H1)      63425010


 
Vitaly Muzichenko:

Erklären Sie mir, warum dieser Code ein Ticket findet, das nicht bereits in der Historie enthalten ist


Haben Sie versucht, nach einem abgeschlossenen Geschäft (OUT) zu suchen? Es gab einen Befehl - Sie können ihn sehen.

 
Vitaly Muzichenko:

Erklären Sie mir, warum dieser Code ein Ticket findet, das nicht bereits in der Historie enthalten ist


Das ist richtig:

Sie suchen nach einer Order, und die Order zur Eröffnung der Position = 63425010 hat ihre eigene bereits ausgeführt und ist in der Historie enthalten.

Und ich denke, dass die Ticketreihenfolge und die Ticketposition identisch sind, was Sie in die Irre geführt hat.

Wenn Sie die Position analysieren wollen, verwenden Sie PositionSelect() und analysieren Sie dann die Eigenschaften.

 

Was wird benötigt?

Wir senden einen Auftrag, als Antwort erhalten wir ein Positionsticket, dann wird ein Objekt mit dem Namen "Positionsticket" auf dem Chart gezeichnet (es wird keine Ersetzung angegeben). Wenn wir mehrere Positionen öffnen, gibt es mehrere Objekte mit Ticketnamen im Diagramm, und wenn wir dann eines davon schließen, werden alle Objekte gelöscht, und wir müssen nur das Objekt mit dem geschlossenen Ticket aus der Historie löschen. Die Löschfunktion funktioniert bei OnTrade

 
Vitaly Muzichenko:

Was wird benötigt?

Wir senden einen Auftrag, als Antwort erhalten wir ein Positionsticket, dann wird ein Objekt mit dem Namen "Positionsticket" auf dem Chart gezeichnet (es wird keine Ersetzung angegeben). Wenn wir mehrere Positionen öffnen, gibt es mehrere Objekte mit Ticketnamen im Diagramm, und wenn wir dann eines davon schließen, werden alle Objekte gelöscht, und wir müssen nur das Objekt mit dem geschlossenen Ticket aus der Historie löschen. Die Löschfunktion funktioniert bei OnTrade


Was brauchen Sie also, ein Ticket für einen Auftrag oder ein Ticket für eine Position?

 
prostotrader:

Was brauchen Sie also, ein Auftragsticket oder ein Positionsticket?

Sie müssen Objekte mit einem Ticket löschen, die sich bereits in der Historie befinden, aber nicht diejenigen, die noch auf dem Markt sind

Duplikat:

  HistorySelect(0,TimeCurrent()); 
  for(int i=HistoryOrdersTotal()-1; i>=0; i--) {
   string OrdTick=IntegerToString(HistoryOrderGetTicket(i));
   if(OrdTick=="63425010") Print(OrdTick);
  }
2017.07.24 23:58:33.514 RE (EURGBP.m,H1)      63425010