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

 
Valeriy Yastremskiy #:

Der Algorithmus muss präzise sein, und ein Verständnis der Bedingungen seiner Anwendung. Es ist unmöglich, einen anderen Code zu schreiben. Der Code ist die Umsetzung eines Algorithmus von Aktionen, er kann nicht ungenau sein.

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

Du verstehst die Gleichheitszeichen, mehr ist weniger.

Hallo, Valery! Ich stimme dir vollkommen zu. Um einen korrekten Code zu schreiben, braucht man eine genaue Bedingung für die Eröffnung einer Position. Dieser Code funktioniert auch:

//+------------------------------------------------------------------+
//|                                                         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()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Tick function                                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   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);
  }
//+------------------------------------------------------------------+

Die Frage ist nur, ob er so funktioniert, wie Vitaly es beabsichtigt? Ehrlich gesagt, verstehe ich nicht ganz, warum wir alle 20 Sekunden (oder sogar alle 10, 5 oder 1 Sekunde) die Preisdifferenz überprüfen müssen. Was bringt das in Bezug auf die Bestimmung der Richtung der weiteren Kursbewegung?

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin #:

Hallo, Valery! Ich stimme dir vollkommen zu. Um einen korrekten Code zu schreiben, braucht man eine genaue Bedingung für die Eröffnung einer Position. Dieser Code funktioniert auch:

Die Frage ist nur, ob er so funktioniert, wie Vitaly es beabsichtigt? Ehrlich gesagt, verstehe ich nicht ganz, warum wir alle 20 Sekunden (oder sogar alle 10, 5 oder 1 Sekunde) die Preisdifferenz überprüfen müssen. Was soll das bringen, wenn es darum geht, die Richtung der weiteren Kursbewegung zu bestimmen?

Mit freundlichen Grüßen, Vladimir.

MrBrooklin #:

Hallo, Valery! Ich stimme Ihnen vollkommen zu. Um einen korrekten Code zu schreiben, braucht man eine genaue Bedingung für die Eröffnung einer Position. Dieser Code funktioniert auch:

Die Frage ist nur, ob er so funktioniert, wie Vitaly es beabsichtigt? Ehrlich gesagt, verstehe ich nicht ganz, warum wir alle 20 Sekunden (oder sogar alle 10, 5 oder 1 Sekunde) die Preisdifferenz überprüfen müssen. Was soll das bringen, wenn es darum geht, die Richtung der weiteren Kursbewegung zu bestimmen?

Mit freundlichen Grüßen, Vladimir.

Sie beschreiben die Aufgabe falsch! Es geht nicht darum, "einmal alle 20 Sekunden", sondern jede Sekunde mit den Indikatoren zu überprüfen, die schon einige Zeit vergangen sind. Was das "Warum" betrifft, so ist dies keine Frage für diese Diskussion. (Und 20 Sekunden sind nur ein Beispiel).

Es ist wie ein gleitender Durchschnitt, bei dem die erste Kerze mit der zweiten Kerze verglichen wird. Nur muss ich alles innerhalb der aktuellen (Null-)Minuten-Kerze berechnen (oder noch besser - auf einem Linienchart). Immerhin können 20 Sekunden in die erste Kerze einfließen).

 
vitaliy zamkovoy #:
Sie haben die Aufgabe nicht richtig beschrieben! Es ist nicht "einmal alle 20 Sekunden", sondern jede Sekunde, um die Werte zu überprüfen, die vor einiger Zeit vergangen sind. Die Frage nach dem "Warum" gehört nicht in diese Diskussion. (Und 20 Sekunden sind nur ein Beispiel).

Ja, mein Fehler, ich habe nicht ganz verstanden, was Sie tun/prüfen wollen.

Mit freundlichen Grüßen, Vladimir.

 

Wenn aber die Strecke, die Ihrer Konstante entspricht, nicht in einer geraden Anzahl von Sekunden zurückgelegt wird, sondern zum Beispiel in 10,964 Sekunden oder 11,283 Sekunden, was passiert dann? Wird die Bedingung erfüllt sein oder nicht?

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin #:

Wenn aber die Strecke, die Ihrer Konstante entspricht, nicht in einer geraden Anzahl von Sekunden zurückgelegt wird, sondern zum Beispiel in 10,964 Sekunden oder in 11,283 Sekunden, was passiert dann? Wird die Bedingung erfüllt sein oder nicht?

Mit freundlichen Grüßen, Vladimir.

Mit dem Begriff "Vergleich mit einer Konstanten" meine ich nicht Gleichheit, sondern "mehr" "weniger". Im Falle einer positiven Differenz vergleichen wir mit der Konstante mit dem Vorzeichen +, und im Falle einer negativen Differenz vergleichen wir mit der Konstante mit dem Vorzeichen " - ". Wenn wir im ersten Fall die Konstante überschreiten, kaufen wir. Im zweiten Fall, wenn der Wert kleiner ist - Verkauf.
 
vitaliy zamkovoy #:
Mit dem Begriff "Vergleich mit einer Konstanten" meine ich nicht Gleichheit, sondern "mehr" "weniger".

Jetzt ist alles klar.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin #:

Jetzt macht das alles Sinn.

Mit freundlichen Grüßen, Vladimir.

Ich habe die Nachrichten dort aktualisiert. Bitte lesen Sie sie erneut.
 

Ich habe es so satt, diesen ganzen Unsinn zu lesen... Schließlich besteht der Code nur aus VIER Zeilen, und die Diskussionen sind 3 Seiten lang.

  MqlTick mqlTick[], symbTick; // объявили переменные
  SymbolInfoTick(_Symbol, symbTick); // это последний тик
  CopyTicksRange(_Symbol, mqlTick, COPY_TICKS_ALL, symbTick.time_msc, symbTick.time_msc-20000); // Получили все тики за последние 20 секунд
  double delta = NormalizeDouble(mqlTick[ArraySize(mqlTick)-1].bid-mqlTick[0].bid, _Digits); // получили разницу крайних значений массива

20.000 Millisekunden sind 20 Sekunden.

Legen Sie als Nächstes eine Bedingung für die Größe der Delta-Variablen mehr/kleiner, links/rechts oder Nord/yuh....

 
MrBrooklin #:

Jetzt macht das alles Sinn.

Mit freundlichen Grüßen, Vladimir.

MrBrooklin #:

Jetzt macht das alles Sinn.

Mit freundlichen Grüßen, Vladimir.

vitaliy zamkovoy #:
Ich habe die Nachrichten dort aktualisiert. Bitte lesen Sie sie erneut.
Alexey Viktorov ist ein Snob, aber er hat den Trick sofort erkannt. 😆
 
vitaliy zamkovoy #:
Mit dem Begriff "Vergleich mit einer Konstanten" meine ich nicht Gleichheit, sondern "mehr" "weniger". Wenn die Differenz positiv ist, vergleichen wir sie mit einer Konstante mit dem Vorzeichen +, und wenn die Differenz negativ ist, vergleichen wir sie mit einer Konstante mit dem Vorzeichen -. Wenn wir im ersten Fall die Konstante überschreiten, kaufen wir. Im zweiten Fall, wenn der Wert kleiner ist - Verkauf.

Jetzt ist alles klar.

Mit freundlichen Grüßen, Vladimir.

P.S. Das Einzige, was ich empfehlen kann, ist, meine Nachricht hier interessehalber anzuschauen. Und dann zu schauen, wie sich der Kurs nach dieser Nachricht verhalten hat. Er fiel auf 0,98000 zurück, genauer gesagt auf 0,9806, und stieg dann wieder an, wie der rote Pfeil auf dem Screenshot des Kurscharts zeigt. Diese Empfehlung ist nur zu Ihrer Information.

Grund der Beschwerde: