Características da linguagem mql5, subtilezas e técnicas - página 63

 
Por favor, informe, 4 tem tal função, como implementá-la na MQL5?

Define a bandeira para esconder indicadores chamados pelo Expert Advisor.

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

 
fxsaber:

Isto requer um EA "tap" para correr em paralelo, ou seja, é necessário um gráfico auxiliar.

A situação no exemplo é um pouco diferente: há um gráfico e alguns EA já estão correndo nele. E às vezes queremos passar a OrderSend através do indicador sem abrir novos indicadores.

É claro, sem DLL, para que o gráfico seja passado.

Eu encurralei o painel de possibilidade de receber pedidos na coruja para este fim e às vezes eu deixo os pedidos em modo manual, mas eles vão conforme a coruja os leva.

 
Konstantin Nikitin:

Acrescentei a possibilidade de fazer pedidos na coruja e às vezes faço pedidos em modo manual, mas eles vão da mesma forma que a coruja faz.

Inicialmente era um truque quando o próprio indicador executa Order-script no OBJ_CHART.

 

Os operadores Postfix (operador ++ e operador --) são definidos como

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Precisa de ajuda para detectar um pequeno erro .

whroeder1, 2014.07.07 11:37


  1. Prefixo operador++
    Operador Postfix++
    RaRev* RaRev::operator++(void){         // prefix
    
    RaRev RaRev::operator++(int){               // postfix
 
Pavel Verveyko:
Por favor, informe, existe tal função no 4, e como implementá-la na MQL5?

Define a bandeira para ocultar os indicadores chamados pelo Expert Advisor.


Isto é o que parece, vê ajuda.

Guia de Referência MQL5 / Indicadores Personalizados / Estilos de Indicadores em Exemplos / DRAW_NONE
 
Para os adeptos da MQL4 existe uma forma antiga de trabalhar com a TF na MQL5, no estilo habitual

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

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

Talvez alguém considere a abordagem MQL4 útil no trabalho com a história do tick também

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


Aplicação

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 o caso, veja ajuda.

Guia de Referência MQL5 / Indicadores Personalizados / Estilos de Indicadores em Exemplos / DRAW_NONE

Muito obrigado, eu vou tentar, SD disse que IndicatorRelease deveria fazer isso.

 

Quem já encontrou, qual é a forma correcta de organizar os campos numa estrutura em termos de alinhamento:

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

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

alinhamento em estruturas é suposto ir de cima para baixo, mas temos uma matriz que tem uma alocação de memória de 20 elementos, por isso o modo A parece ser o caminho certo
 
fxsaber:
Para os adeptos da MQL4 existe uma forma antiga de trabalhar com a TF na 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)

Aplicação...


Bela maneira de pôr uma turma inteira numa Macro. Pena que você não possa trabalhar com tal classe no Debugger :-((

 
Konstantin:

que encontrou como posicionar os campos na estrutura em termos de alinhamento:

O alinhamento nas estruturas é suposto ir de cima para baixo, mas nós temos uma matriz que é alocada memória abaixo de 20 elementos, então a forma A é meio correta

Se você quer dizer MQL, não há alinhamento.

E se queres dizer C++, a estrutura B seria melhor.

Mas em qualquer caso, o alinhamento do C++ é com o programador.

Razão: