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

 
vladzeit:

***

1. Abfrage des aktuellen Preises für das aktuelle Instrument.

***

2.1 Wenn der aktuelle Preis Point >= 100 pips ist, eröffnen wir eine Position.

***

Möchten Sie eine Lücke schließen?

 
Vladimir Karputov:

Möchten Sie eine Lücke schließen?

Vladimir, zu meiner Schande bin ich mir nicht sicher, ob ich verstehe, was ein Gapist)

Ich möchte einen einfachen Algorithmus implementieren, bei dem eine Preisänderung um eine bestimmte Anzahl von Pips eine Bedingung für den Einstieg in den Markt ist, um zu kaufen oder zu verkaufen... spielt keine Rolle.

Daher möchte ich lernen, wie man den aktuellen Preis für das Symbol ermittelt, ihn in einer lokalen oder globalen Variablen speichert und ihn bei einem Ereignis von dort abruft und auf Null zurücksetzt.

Ich möchte es hauptsächlich dazu verwenden, Einstiegspunkte in den Markt zu finden.

Ich habe gerade begonnen, mql5 zu lernen, vor allem aufgrund Ihrer Beispiele von Expert Advisors, die Sie schreiben eine Menge, danke).

Ich bin in der Lage, meine eigenen Algorithmen aus Ihren Beispielen zusammenzustellen, aber ich bin verwirrt, weil ich den aktuellen Preis abrufen und in einer Variablen speichern muss.

 
vladzeit:

***

Ich möchte einen einfachen Algorithmus implementieren, bei dem eine Preisänderung um eine bestimmte Anzahl von Pips eine Bedingung für den Einstieg in den Markt ist, um zu kaufen oder zu verkaufen... spielt keine Rolle.

***

Sie müssen sich darüber im Klaren sein, dass, wenn Sie einen Preis für den aktuellen Tick festlegen, sich dieser Preis beim nächsten Tick entweder überhaupt nicht oder nur um eine sehr geringe Anzahl von Punkten ändern kann.

Daher müssen Sie genauer angeben, was Sie tun wollen:

  • z.B. den aktuellen Preis einmal in N-Sekunden abrufen.
  • den aktuellen Preis nur bei der Bildung eines neuen Balkens erhalten.
  • ...
  • und erst dann diesen Preis mit dem zuvor gespeicherten Wert vergleichen.

 
Vladimir Karputov:

Wenn Sie sich einen Preis für den aktuellen Tick merken, kann es sein, dass sich dieser Preis beim nächsten Tick entweder gar nicht oder nur um eine sehr geringe Anzahl von Punkten ändert.

Daher müssen Sie genauer angeben, was Sie tun wollen:

  • z.B. den aktuellen Preis einmal in N-Sekunden abrufen.
  • den aktuellen Preis nur bei der Bildung eines neuen Balkens erhalten.
  • ...
  • und erst dann diesen Preis mit dem zuvor gespeicherten Wert vergleichen.

Hmmm... Ich habe nicht an diese Funktionen gedacht)

  • Um den aktuellen Preis nur in dem Moment zu erhalten, in dem ein neuer Balken geboren wird.
Dieses Beispiel wäre für mich nützlicher.
 
vladzeit:

Hmmm... Das sind Merkmale, an die ich nicht gedacht hatte)

  • Ermittelt den aktuellen Preis nur, wenn ein neuer Balken entsteht.
Dieses Beispiel wird für mich nützlicher sein.

Ich werde heute Abend (spät) versuchen, ein Beispiel zu zeigen.

 

Guten Tag!
Ich versuche, den Indikator zu beschleunigen. Ich versuche, den Indikator zu beschleunigen, weil ich ein Zeit-Array habe, das mit Bar-Indizes verglichen werden sollte, und ich sehe hier eine gewisse Langsamkeit. Ich habe bereits überprüft, wenn ich ein Array mit Indizes vorbereitet habe und es mit Bar-Indizes verglichen habe, erhalte ich 40K Elemente in 7 Sekunden, aber wenn ich ein Zeit-Array habe, dauert es 140 Sekunden. Gibt es irgendwelche Tricks, um den Indikator zu beschleunigen?

   bool FindArr(int Bar)
     {
      int Size=CheckSizeTime;
      for(int i=restBars; i<Size; i++)
        {
         datetime BarTime=iTime(NULL,PERIOD_CURRENT,Bar);
         if(BarTime==ArrCol.BarTimeArray[i])
           {
            restBars++;
            return(true);
           }
        }
      return(false);
     }
if(prev_calculated==0)         
        for(int i=0;i<rates_total;i++)
           {
            if(Arr.FindArr(i))
              {
               ColorSectionBuffer[i]=low[i];
               ColorSectionColors[i]=0;
              }
            else
              {
               ColorSectionBuffer[i]=0;
               ColorSectionColors[i]=EMPTY_VALUE;
              }
           }
 
vladzeit:

Hmmm... Das sind Merkmale, an die ich nicht gedacht hatte)

  • Ermittelt den aktuellen Preis nur, wenn ein neuer Balken entsteht.
Dieses Beispiel wird für mich nützlicher sein.
Wladimir Karputow:

Ich werde heute Abend (spät) versuchen, ein Beispiel zu zeigen.

Hier wurde ein Beispiel für jemanden, der Preise auf jeder Zecke zu bekommen:

//+------------------------------------------------------------------+
//|                                               Display prices.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---
#include <Trade\SymbolInfo.mqh>  
CSymbolInfo    m_symbol;                     // symbol info object
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
      return(INIT_FAILED);
   RefreshRates();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!RefreshRates())
      return;
   Comment("Ask: ",DoubleToString(m_symbol.Ask(),m_symbol.Digits()),"\n",
           "Bid: ",DoubleToString(m_symbol.Bid(),m_symbol.Digits()));
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates(void)
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      Print("RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+

Die Erklärungen kommen morgen, ich schlafe heute schon.

Morgen wird es auch ein Beispiel für eine neue Bar geben.

Dateien:
 
Vladimir Karputov:

Hier ein Beispiel für die Preisermittlung für jeden Tick für jemand anderen:

Ich erkläre es morgen, ich bin heute Abend schon im Bett.

Morgen wird es auch ein Beispiel für eine neue Bar geben.

Wladimir, ich danke dir.Ich habe mich ein wenig mit der FunktionRefreshRates der KlasseCSymbolInfo vertraut gemacht. Ich habe es in Ihren Berichten gesehen und auch in einer Fibel gelesen.

Der Aufruf dieser Funktion inOnTick und die Ausgabe der Kurswerte inComment sind mir auch aus dem Beispiel klar. Die Prozedur inOnInit zur Überprüfung des aktuellen Symbols ist mir auch klar.

Während ich auf das Beispiel mit der neuen Leiste warte, werde ich versuchen, mit Ihrem Beispiel zu üben, ich habe es noch nicht in der Praxis verwendet. Ich werde es versuchen.


 
fxsaber:

Danke, ich habe es korrigiert.

Danke - jetzt scheint es nur noch Verzeichnisse korrekt auszugeben.

Mir ist jedoch aufgefallen, dass Unterverzeichnisse durch ein "\" getrennt werden, während der MQL-Standard zwei "\\" Schrägstriche vorsieht. D.h. der Code wird benötigt, um Dateipfade zu generieren und wegen eines Schrägstrichs ist es unmöglich, dies ohne zusätzliche Nachbearbeitung zu tun, gibt es eine Möglichkeit, zwei Schrägstriche auf einmal zu erhalten?

 
Aleksey Vyazmikin:

Danke - jetzt scheinen nur noch die Verzeichnisse korrekt zu sein.

Mir ist jedoch aufgefallen, dass Unterverzeichnisse durch ein "\" getrennt werden, während der MQL-Standard zwei "\\" Schrägstriche vorsieht. D.h. der Code wird benötigt, um Dateipfade zu generieren und wegen eines Schrägstrichs ist es unmöglich, dies ohne zusätzliche Nachbearbeitung zu tun, gibt es eine Möglichkeit, zwei Schrägstriche auf einmal zu erhalten?

Print("\\");