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

 
vitaliy zamkovoy aktuellen Preis abziehen und ihn mit einer bestimmten Konstante für die anschließende Eröffnung einer Order vergleichen, wie kann dies im Expert Advisor geschrieben werden?

Sehen Sie sich diesen Code an:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

//ВХОДНОЙ ПАРАМЕТР
input ushort Constanta=50; //Константа

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(20);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   double open_0=iOpen(_Symbol,PERIOD_CURRENT,0);
   if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
      Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
   if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
      Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
   Sleep(20000);
   if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
      Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
   if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
      Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
   Sleep(20000);
   if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
      Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
   if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
      Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
   Sleep(20000);
  }
//+------------------------------------------------------------------+
Mit freundlichen Grüßen, Vladimir.
 
MrBrooklin #:

Sehen Sie sich diesen Code an:

Mit freundlichen Grüßen, Vladimir.
Leider kann ich es in den nächsten zwei Tagen nicht überprüfen, aber bitte nehmen Sie meinen Dank an!
 
vitaliy zamkovoy #:
Leider werde ich in den nächsten zwei Tagen nicht in der Lage sein, es zu überprüfen, aber ich danke Ihnen!

Danke, aber bitte beachten Sie, dass dies kein fertiger Code ist, sondern nur die Richtung meiner Gedanken. Er kann falsch sein. Sie müssen es überprüfen. Sie können eine andere Option in Betracht ziehen - entfernen Sie OnTimer und versuchen Sie den gleichen Code in OnTick(). Kurz gesagt, versuchen Sie es.

Mit freundlichen Grüßen, Vladimir.

 
vitaliy zamkovoy aktuellen Preis nehmen und ihn mit einer Konstante mit der anschließenden Eröffnung eines Auftrags vergleichen - wie halten Sie das fest?

Erfassen Sie den aktuellen Kurs und die Uhrzeit. Vergleichen Sie die Zeit mit der aktuellen Zeit bei jedem Tick, wenn es mehr als 20 Sekunden sind, merken Sie sich den zweiten Preis. Berechnen Sie die Differenz zwischen dem ersten Preis und dem zweiten Preis. Vergleichen Sie das erhaltene Ergebnis mit einer Konstante und entscheiden Sie, ob Sie eine Order eröffnen wollen.

 
Valeriy Yastremskiy #:

Speichern Sie den aktuellen Preis und die Uhrzeit. Vergleichen Sie die Zeit mit der aktuellen Zeit bei jedem Tick, wenn mehr als 20 Sekunden, merken Sie sich den zweiten Preis. Berechnen Sie die Differenz zwischen dem ersten und dem zweiten Kurs. Vergleichen Sie das erhaltene Ergebnis mit einer Konstante und entscheiden Sie, ob Sie eine Order eröffnen wollen.

Verstehe ich Sie richtig: Sie müssen sich den aktuellen Preis jede Sekunde merken, um ihn mit dem aktuellen Preis zu vergleichen, wenn jeder Wert dieser Serie 20 Sekunden lang entfernt wird?

Der Vergleich sollte kontinuierlich erfolgen.

 
vitaliy zamkovoy #:

Verstehe ich Sie richtig: Sie müssen sich jede Sekunde den aktuellen Preis merken, damit Sie, wenn jeder Wert dieser Reihe 20 Sekunden lang gelöscht wird, ihn mit dem aktuellen vergleichen können?

Der Vergleich sollte kontinuierlich erfolgen.

Wenn die Ticks nicht gleichmäßig verlaufen, dann liegt die Frage im Algorithmus: Wenn es notwendig ist, alle Ticks zu überprüfen, dann sollten alle Ticks gespeichert und verglichen werden. Wenn es nach dem Algorithmus weniger oft möglich ist, dann einen Timer und nach einer Sekunde den Preis merken und nach 20 Sekunden auch merken und vergleichen. Oder man sollte sich alle Preise oder Preise in einer Sekunde innerhalb von 20 Sekunden merken und mit einem neuen Tick vergleichen.
Es kann 1 Tick pro Sekunde geben, es kann einen in 5 Sekunden geben, und es kann 100 in einer Sekunde geben. Sie müssen entscheiden, wie Sie vorgehen wollen, wenn es einen Tick pro 5 Sekunden gibt und wenn es 100 Ticks pro Sekunde gibt.

 
Valeriy Yastremskiy #:

Ticks sind nicht einheitlich, die Frage ist in den Algorithmus dann, wenn Sie alle Ticks überprüfen müssen, dann sollten alle Ticks gespeichert und verglichen werden. Wenn es möglich ist, weniger häufig nach dem Algorithmus zu sein, dann einen Timer und nach einer Sekunde den Preis merken und nach 20 Sekunden auch merken und vergleichen. Oder man sollte sich alle Preise oder Preise in einer Sekunde innerhalb von 20 Sekunden merken und mit einem neuen Tick vergleichen.
Es kann 1 Tick pro Sekunde geben, es kann einen in 5 Sekunden geben, und es kann 100 in einer Sekunde geben. Sie müssen entscheiden, wie Sie vorgehen wollen, wenn es einen Tick pro 5 Sekunden gibt und wenn es 100 Ticks pro Sekunde gibt.

Es geht nicht darum, eine Option zu wählen, sondern darum, wie schwierig es für mich ist, sie aufzuschreiben.... Ich bin heute zum ersten Mal hier. Ich bin ein totaler Amateur.

Ich möchte nur meine Idee ausprobieren...

 
vitaliy zamkovoy #:

Es geht nicht darum, eine Option zu wählen, sondern darum, wie schwer es mir fällt, sie aufzuschreiben..... Ich bin heute zum ersten Mal hier. Totaler Amateur.

Ich möchte nur meine Idee ausprobieren.

Der Algorithmus muss präzise sein und die Bedingungen für seine Anwendung verstehen. Man kann den Code nicht anders schreiben. Der Code ist die Verwirklichung eines Handlungsalgorithmus, er darf nicht ungenau sein.

Und hier ist es besser, ihn zuerst selbst zu schreiben, und vielleicht werden Sie Fehler korrigieren.

Du verstehst die Vorzeichen von Gleichungen, mehr ist weniger.

 

Ringpuffer:

Man nehme einen Puffer - eine ausreichend große statische Anordnung von "Preis, Zeit"-Strukturen (oder zwei getrennte Anordnungen).

Wir nehmen zwei Variablen - "Zeiger" (Indizes) auf den Kopf und das Ende des Puffers.

Bei jedem Tick fügen wir dem Kopf ein Element hinzu und schieben den Zeiger vor.

Wir vergleichen die Zeit mit dem Element im Ende des Puffers und verschieben gegebenenfalls den Zeiger.

Vergleichen Sie den Preis mit dem Element im Ende des Puffers.

Wenn ein Zeiger das Ende des Arrays erreicht hat, setzen wir diesen Zeiger auf Null zurück.

 
JRandomTrader statische Anordnung von "Preis, Zeit"-Strukturen (oder zwei getrennte Anordnungen).

Nehmen Sie zwei Variablen - "Zeiger" (Indizes) auf den Kopf und das Ende des Puffers.

Bei jedem Tick fügen wir ein Element zum Kopf hinzu und verschieben den Zeiger.

Vergleichen Sie die Zeit mit dem Element im Schwanz, wenn nötig - bewegen Sie den Zeiger.

Vergleichen Sie den Preis mit dem Element im Schwanz.

Wenn ein Zeiger das Ende des Arrays erreicht hat - diesen Zeiger auf Null zurücksetzen.

👍