Caractéristiques du langage mql5, subtilités et techniques - page 63

 
S'il vous plaît conseiller, 4 a une telle fonction, comment l'implémenter dans MQL5 ?

Définit le drapeau pour cacher les indicateurs appelés par l'Expert Advisor.

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

 
fxsaber:

Pour cela, il est nécessaire de faire fonctionner en parallèle une EA "à robinet", c'est-à-dire qu'un tableau auxiliaire est nécessaire.

La situation dans l'exemple est quelque peu différente : il y a un graphique et un EA est déjà en cours d'exécution sur celui-ci. Et nous voulons parfois faire passer OrderSend par l'indicateur sans en ouvrir de nouveaux.

Bien sûr, sans DLL, de sorte que le graphique est passé.

J'ai accaparé le panneau de possibilité de prise d'ordre dans le hibou à cette fin et parfois je dépose des ordres en mode manuel, mais ils vont comme le hibou les prend.

 
Konstantin Nikitin:

J'ai ajouté une possibilité de passer des ordres dans le hibou et parfois je passe des ordres en mode manuel mais ils se déroulent comme le hibou.

Initialement, il s'agissait d'une astuce lorsque l'indicateur lui-même exécute un script d'ordre sur OBJ_CHART.

 

Les opérateurs postfixes (opérateur ++ et opérateur --) sont définis comme suit

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Besoin d'aide pour repérer une légère erreur.

whroeder1, 2014.07.07 11:37


  1. Opérateur préfixe++
    Opérateur Postfix++
    RaRev* RaRev::operator++(void){         // prefix
    
    RaRev RaRev::operator++(int){               // postfix
 
Pavel Verveyko:
Veuillez me dire s'il existe une telle fonction dans 4, et comment l'implémenter dans MQL5 ?

Définit le drapeau pour cacher les indicateurs appelés par l'Expert Advisor.


Voilà à quoi ça ressemble, voir l'aide.

Guide de référence MQL5 / Indicateurs personnalisés / Styles d'indicateurs dans les exemples / DRAW_NONE
 
Pour les adeptes de MQL4, il existe une ancienne façon de travailler avec le TF dans MQL5, dans le style habituel

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Test des "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)

Peut-être que quelqu'un trouvera l'approche MQL4 utile pour travailler avec l'historique des tics.

// Позволяет работать с тиковой историей в 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;


Application

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:

Cela semble être le cas, voir l'aide.

Guide de référence MQL5 / Indicateurs personnalisés / Styles d'indicateurs dans les exemples / DRAW_NONE

Merci beaucoup, je vais essayer, SD a dit que IndicatorRelease devrait faire ceci

 

Qui a rencontré, quelle est la manière correcte de disposer les champs dans une structure en termes d'alignement :

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

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

l'alignement dans les structures est censé aller de haut en bas, mais nous avons un tableau qui a une allocation mémoire de 20 éléments, donc la méthode A semble être la bonne.
 
fxsaber:
Pour les adeptes de MQL4, il existe une ancienne façon de travailler avec TF dans MQL5.

// Позволяет, как в 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)

Application...


Belle façon de mettre une classe entière dans un Macro. Dommage que l'on ne puisse pas travailler avec une telle classe dans le débogueur :-((

 
Konstantin:

qui a rencontré comment positionner les champs dans la structure en termes d'alignement :

L'alignement dans les structures est censé aller de haut en bas, mais nous avons un tableau qui se voit allouer de la mémoire en dessous de 20 éléments, donc la manière A est plutôt correcte.

Si vous voulez dire MQL, il n'y a pas d'alignement.

Si vous voulez dire C++, struct B serait mieux.

Mais dans tous les cas, l'alignement du C++ dépend du programmeur.