Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 63

 
Bitte beraten, 4 hat eine solche Funktion, wie es in MQL5 zu implementieren?

Legt das Flag zum Ausblenden von Indikatoren fest, die vom Expert Advisor aufgerufen werden.

void  HideTestIndicators
(
   bool hide // флаг
);

 
fxsaber:

Dazu muss ein "tap" EA parallel laufen, d.h. eine Hilfskarte ist erforderlich.

Die Situation in diesem Beispiel ist etwas anders: Es gibt einen Chart, auf dem bereits ein EA läuft. Und wir wollen manchmal OrderSend durch den Indikator leiten, ohne neue zu öffnen.

Natürlich ohne DLL, damit das Diagramm übergeben wird.

Ich habe zu diesem Zweck das Bedienfeld für die Auftragsannahme in der Eule eingerichtet, und manchmal gebe ich Aufträge im manuellen Modus auf, aber sie werden so ausgeführt, wie die Eule sie annimmt.

 
Konstantin Nikitin:

Ich habe eine Möglichkeit hinzugefügt, Aufträge in der Eule zu platzieren, und manchmal gebe ich Aufträge im manuellen Modus auf, aber sie gehen den Weg, den die Eule geht.

Ursprünglich war es ein Trick, wenn der Indikator selbst Order-Skript auf OBJ_CHART läuft.

 

Postfix-Operatoren (Operator ++ und Operator --) sind definiert als

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Ich brauche Hilfe, um einen kleinen Fehler zu finden.

whroeder1, 2014.07.07 11:37


  1. Präfix-Operator++
    Postfix-Operator++
    RaRev* RaRev::operator++(void){         // prefix
    
    RaRev RaRev::operator++(int){               // postfix
 
Pavel Verveyko:
Bitte beraten, gibt es eine solche Funktion in 4, und wie es in MQL5 zu implementieren?

Legt das Flag zum Ausblenden der vom Expert Advisor aufgerufenen Indikatoren fest.


So sieht es aus, siehe Hilfe.

MQL5 Referenzhandbuch / Eigene Indikatoren / Indikatorstile in Beispielen / DRAW_NONE
 
Für MQL4-Kenner gibt es einen alten Weg, mit dem TF in MQL5 zu arbeiten, im üblichen Stil

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Testen von 'CopyTicks'

fxsaber, 2016.10.19 07:59

// Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.

#define DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
  class CLASS##NAME                                                                                           \
  {                                                                                                           \
  public:                                                                                                     \
    static T Get( const string Symb, const int TimeFrame, const int iShift )                                  \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
      return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \
    }                                                                                                         \
                                                                                                              \
    T operator []( const int iPos ) const                                                                     \
    {                                                                                                         \
      return(CLASS##NAME::Get(_Symbol, _Period, iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS##NAME NAME;                                                                                           \
                                                                                                              \
  T i##NAME( const string Symb, const int TimeFrame, const int iShift )                                       \
  {                                                                                                           \
    return(CLASS##NAME::Get(Symb, TimeFrame, iShift));                                                        \
  }

DEFINE_TIMESERIE(Volume, TickVolume, long)
DEFINE_TIMESERIE(Time, Time, datetime)
DEFINE_TIMESERIE(Open, Open, double)
DEFINE_TIMESERIE(High, High, double)
DEFINE_TIMESERIE(Low, Low, double)
DEFINE_TIMESERIE(Close, Close, double)

Vielleicht findet jemand den MQL4-Ansatz auch bei der Arbeit mit der Tick-Historie nützlich

// Позволяет работать с тиковой историей в MQL4-стиле
struct TICK_HISTORY
{
  const string Symb;
  
  TICK_HISTORY( const string sSymb = NULL ) : Symb(sSymb)
  {
  }
  
  const MqlTick operator []( const int Pos ) const
  {
    static const MqlTick NullTick = {0};
    static MqlTick Ticks[];
    
    return((::CopyTicks(this.Symb, Ticks, COPY_TICKS_INFO, 0, Pos + 1) > Pos) ? Ticks[::ArraySize(Ticks) - Pos - 1] : NullTick);
  }
};

const TICK_HISTORY Tick;


Anmeldung

if (Tick[0].bid > Tick[100].bid) // сравниваем текущий и исторический тики
  Print("Hello World!");

if (High[0] > Close[100]) // https://www.mql5.com/ru/forum/42122/page24#comment_2904023
  Print("Hello World!");
 
Alexey Volchanskiy:

Dies scheint der Fall zu sein, siehe Hilfe.

MQL5 Referenzhandbuch / Eigene Indikatoren / Indikatorstile in Beispielen / DRAW_NONE

Vielen Dank, ich werde es versuchen, SD sagte IndicatorRelease sollte dies tun

 

Wer hat schon Erfahrungen mit der korrekten Anordnung von Feldern in einer Struktur in Bezug auf die Ausrichtung:

struct A
  {
   uchar  arr[20];
   // тут поля заполнители
   double val;
  };

struct B
  {
   double val;
   // тут поля заполнители
   uchar  arr[20];
  };

Die Ausrichtung in Strukturen soll von oben nach unten erfolgen, aber wir haben ein Array mit einer Speicherzuweisung von 20 Elementen, so dass Weg A der richtige Weg zu sein scheint
 
fxsaber:
Für MQL4-Kenner gibt es eine alte Methode, mit TF in MQL5 zu arbeiten

// Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.
#define  DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
  class CLASS##NAME                                                                                           \
  {                                                                                                           \
  public:                                                                                                     \
    static T Get( const string Symb, const int TimeFrame, const int iShift )                                  \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
      return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \
    }                                                                                                         \
                                                                                                              \
    T operator []( const int iPos ) const                                                                     \
    {                                                                                                         \
      return(CLASS##NAME::Get(_Symbol, _Period, iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS##NAME  NAME;                                                                                           \
                                                                                                              \
  T i##NAME( const string Symb, const int TimeFrame, const int iShift )                                       \
  {                                                                                                           \
    return(CLASS##NAME::Get(Symb,  TimeFrame, iShift));                                                        \
  }

DEFINE_TIMESERIE(Volume, TickVolume, long)
DEFINE_TIMESERIE(Time, Time, datetime)
DEFINE_TIMESERIE(Open, Open, double)
DEFINE_TIMESERIE(High, High, double)
DEFINE_TIMESERIE(Low, Low, double)
DEFINE_TIMESERIE(Close, Close, double)

Anwendung...


Eine gute Möglichkeit, eine ganze Klasse in ein Makro zu stecken. Schade, dass man mit einer solchen Klasse nicht im Debugger arbeiten kann :-((

 
Konstantin:

der darauf gestoßen ist, wie die Felder in der Struktur in Bezug auf die Ausrichtung zu positionieren sind:

Die Ausrichtung in Strukturen sollte von oben nach unten erfolgen, aber wir haben ein Array, dem Speicher für weniger als 20 Elemente zugewiesen wurde, daher ist Weg A irgendwie korrekt

Wenn Sie MMS meinen, gibt es keine Ausrichtung.

Und wenn Sie C++ meinen, dann wäre struct B besser.

Aber in jedem Fall liegt die Ausrichtung von C++ im Ermessen des Programmierers.