Características del lenguaje mql5, sutilezas y técnicas - página 63

 
Por favor, aconsejar, 4 tiene una función de este tipo, ¿cómo implementarlo en MQL5?

Establece la bandera para ocultar los indicadores llamados por el Asesor Experto.

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

 
fxsaber:

Para ello, es necesario que un EA de "grifo" funcione en paralelo, es decir, que se necesita una carta auxiliar.

La situación en el ejemplo es algo diferente: hay un gráfico y algún EA ya se está ejecutando en él. Y queremos pasar a veces OrderSend por el indicador sin abrir nuevos.

Por supuesto, sin DLL, para que se pase el gráfico.

He arrinconado el panel de posibilidades de toma de órdenes en el búho para este fin y a veces suelto órdenes en modo manual, pero van como las toma el búho.

 
Konstantin Nikitin:

He añadido la posibilidad de hacer pedidos en el búho y a veces hago pedidos en modo manual pero van como el búho.

Inicialmente era un truco cuando el propio indicador ejecuta Order-script en OBJ_CHART.

 

Los operadores postfijos (operador ++ y operador --) se definen como

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Necesito ayuda para detectar un pequeño error.

whroeder1, 2014.07.07 11:37


  1. Operador prefijo++
    Operador postfix++
    RaRev* RaRev::operator++(void){         // prefix
    
    RaRev RaRev::operator++(int){               // postfix
 
Pavel Verveyko:
Por favor, aconséjeme, hay una función de este tipo en el 4, pero ¿cómo implementarla en MQL5?

Establece la bandera para ocultar los indicadores llamados por el Asesor Experto.


Esto es lo que parece, ver ayuda.

Guía de referencia MQL5 / Indicadores personalizados / Estilos de indicadores en los ejemplos / DRAW_NONE
 
Para los adeptos a MQL4 existe una forma antigua de trabajar con el TF en MQL5, al estilo habitual

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Probando '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)

Tal vez alguien encuentre útil el enfoque MQL4 para trabajar también con el historial de ticks

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


Aplicación

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:

Este parece ser el caso, ver ayuda.

Guía de referencia MQL5 / Indicadores personalizados / Estilos de indicadores en los ejemplos / DRAW_NONE

Muchas gracias, lo probaré, SD dijo que IndicatorRelease debería hacer esto

 

Quién ha encontrado, cuál es la forma correcta de organizar los campos en una estructura en términos de alineación:

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

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

la alineación en las estructuras se supone que va de arriba a abajo, pero tenemos un array que tiene una asignación de memoria de 20 elementos, por lo que la forma A parece ser la correcta
 
fxsaber:
Para los adeptos a MQL4 hay una forma antigua de trabajar con TF en 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)

Aplicación...


Buena manera de poner a toda una clase en una macro. Lástima que no se pueda trabajar con dicha clase en el depurador :-((

 
Konstantin:

que ha encontrado la forma de colocar los campos en la estructura en términos de alineación:

La alineación en las estructuras se supone que va de arriba a abajo, pero tenemos un array al que se le asigna una memoria inferior a 20 elementos, por lo que la forma A es más o menos correcta

Si te refieres a MQL, no hay alineación.

Y si te refieres a C++, la estructura B sería mejor.

Pero en cualquier caso la alineación de C++ depende del programador.