Особенности языка mql5, тонкости и приёмы работы - страница 63

 
подскажите пожалуйста, в 4-ке есть такая функция, а как реализовать это в MQL5?

Выставляет флаг скрытия индикаторов, вызываемых экспертом.

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

 
fxsaber:

Для этого должен параллельно работать советник "прослушка", т.е. требуется вспомогательный чарт.

В примере несколько иная ситуация: один чарт и на нем уже запущен какой-то советник. И хочется без открытия новых иногда пробросить OrderSend через индикатор.

Конечно, без DLL, чтобы Маркет прошел.

Я для этого в сову загнал панельку возможности взятия ордеров и иногда подкидываю ордера в ручном режиме, но они идут так как их берет сова.

 
Konstantin Nikitin:

Я для этого в сову загнал панельку возможности взятия ордеров и иногда подкидываю ордера в ручном режиме, но они идут так как их берет сова.

Изначально шла речь о лайфхаке, когда индикатор сам запускал Order-скрипт на OBJ_CHART.

 

Постфиксные операторы (operator ++ и operator --) задаются так

Forum on trading, automated trading systems and testing trading strategies

Need help to spot some slight error .

whroeder1, 2014.07.07 11:37


  1. Prefix operator++
    Postfix operator++
    RaRev* RaRev::operator++(void){         // prefix
    
    RaRev RaRev::operator++(int){               // postfix
 
Pavel Verveyko:
подскажите пожалуйста, в 4-ке есть такая функция, а как реализовать это в MQL5?

Выставляет флаг скрытия индикаторов, вызываемых экспертом.


Вроде это, см. help

Справочник MQL5 / Пользовательские индикаторы / Стили индикаторов в примерах / DRAW_NONE
 
Для адептов MQL4 есть древний способ работы с ТФ в MQL5 в привычном стиле

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Тестируем '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)

Возможно, кому-то пригодится MQL4-подход и в работе с историей тиков

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


Применение

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!");
 

большое спасибо попробую, в СД сказали IndicatorRelease должен такое действие сделать

 

кто сталкивался, как будет правильнее расположить поля в структуре с точки зрения выравнивания:

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

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

по идее выравнивание в структурах идет сверху вниз, но у нас присутствует массив, под который идет распределение памяти под 20 элементов, вроде как способ А будет правильным
 
fxsaber:
Для адептов MQL4 есть древний способ работы с ТФ в 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)

Применение...


Прикольный способ засунуть аж цельный класс в Макрос. Жаль, что в Отладчике не получится с таким классом поработать :-((

 
Konstantin:

кто сталкивался, как будет правильнее расположить поля в структуре с точки зрения выравнивания:

по идее выравнивание в структурах идет сверху вниз, но у нас присутствует массив, под который идет распределение памяти под 20 элементов, вроде как способ А будет правильным

Если Вы про MQL, то в нём нет выравнивания.

А если про C++, то лучше struct B.

Хотя в любом случае, в C++ выравнивание подвластно программисту.

Причина обращения: