Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 63

 
Si prega di consigliare, 4 ha una tale funzione, come implementarla in MQL5?

Imposta la bandiera per nascondere gli indicatori chiamati dall'Expert Advisor.

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

 
fxsaber:

Questo richiede un "rubinetto" EA per funzionare in parallelo, cioè è necessario un grafico ausiliario.

La situazione nell'esempio è un po' diversa: c'è un grafico e qualche EA è già in esecuzione su di esso. E vogliamo a volte passare OrderSend attraverso l'indicatore senza aprirne di nuovi.

Naturalmente, senza DLL, in modo che il grafico venga passato.

Ho messo all'angolo il pannello di possibilità di prendere gli ordini nel gufo per questo scopo e a volte faccio cadere gli ordini in modalità manuale, ma vanno come li prende il gufo.

 
Konstantin Nikitin:

Ho aggiunto la possibilità di fare ordini nel gufo e a volte faccio ordini in modalità manuale ma vanno come fa il gufo.

Inizialmente era un trucco quando l'indicatore stesso esegue Order-script su OBJ_CHART.

 

Gli operatori postfix (operatore ++ e operatore --) sono definiti come

Forum sul trading, sistemi di trading automatico e strategie di trading di prova

Ho bisogno di aiuto per individuare qualche piccolo errore.

whroeder1, 2014.07.07 11:37


  1. Prefisso operator++
    Postfix operator++
    RaRev* RaRev::operator++(void){         // prefix
    
    RaRev RaRev::operator++(int){               // postfix
 
Pavel Verveyko:
Per favore consigliate, c'è una tale funzione in 4, e come implementarla in MQL5?

Imposta il flag per nascondere gli indicatori chiamati dall'Expert Advisor.


Questo è quello che sembra, vedi aiuto.

Guida di riferimento MQL5 / Indicatori personalizzati / Stili di indicatori negli esempi / DRAW_NONE
 
Per gli adepti di MQL4 c'è un modo antico di lavorare con il TF in MQL5, nel solito stile

Forum sul trading, sistemi di trading automatico e strategie di trading di prova

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

Forse qualcuno troverà l'approccio MQL4 utile anche per lavorare con la storia dei tick

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


Applicazione

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:

Questo sembra essere il caso, vedi aiuto.

Guida di riferimento MQL5 / Indicatori personalizzati / Stili di indicatori negli esempi / DRAW_NONE

Grazie mille, lo proverò, SD ha detto che IndicatorRelease dovrebbe fare questo

 

Chi ha incontrato, qual è il modo corretto di disporre i campi in una struttura in termini di allineamento:

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

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

l'allineamento nelle strutture dovrebbe andare dall'alto verso il basso, ma abbiamo un array che ha un'allocazione di memoria di 20 elementi, quindi il modo A sembrerebbe essere il modo giusto
 
fxsaber:
Per gli adepti di MQL4 c'è un modo antico di lavorare con TF in 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)

Applicazione...


Bel modo di mettere un'intera classe in una Macro. Peccato che non si possa lavorare con tale classe nel Debugger :-((

 
Konstantin:

che ha incontrato come posizionare i campi nella struttura in termini di allineamento:

L'allineamento nelle strutture dovrebbe andare dall'alto verso il basso, ma abbiamo un array a cui viene assegnata una memoria inferiore a 20 elementi, quindi il modo A è più o meno corretto

Se intendi MQL, non c'è allineamento.

E se intendi C++, la struct B sarebbe meglio.

Ma in ogni caso l'allineamento di C++ dipende dal programmatore.

Motivazione: