mql5语言的特点、微妙之处以及技巧 - 页 63

 
请教一下,4有这样的功能,如何在MQL5中实现它?

设置标志以隐藏 专家顾问所调用的指标

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

 
fxsaber:

这需要一个 "分接 "EA并联运行,即需要一个辅助图表。

例子中的情况有些不同:有一个图表,一些EA已经在上面运行。而我们希望有时通过指标传递OrderSend而不打开新的指标。

当然,在没有DLL的情况下,这样的图表是可以通过的。

为此,我在猫头鹰的接单可能性面板上找到了角落,有时我在手动模式下投放订单,但它们会随着猫头鹰的接单而去。

 
康斯坦丁-尼基丁

我已经增加了在猫头鹰中下单的可能性,有时我在手动模式下单,但它们会按照猫头鹰的方式进行。

最初,当指标本身在OBJ_CHART 上运行Order-script时,这是一个技巧。

 

后缀运算符(运算符++和运算符--)被定义为

关于交易、自动交易系统和测试交易策略的论坛

需要帮助来发现一些轻微的错误。

whroeder1, 2014.07.07 11:37


  1. 前缀运算符++
    后缀运算符++
    RaRev* RaRev::operator++(void){         // prefix
    
    RaRev RaRev::operator++(int){               // postfix
 
帕维尔-韦尔维科
请指示,在4中有这样的功能,但如何在MQL5中实现它?

设置标志以隐藏专家顾问所调用的指标。


这就是它的样子,请看帮助。

MQL5参考指南 / 自定义指标 / 示例中的指标样式 / DRAW_NONE
 
对于MQL4的专家来说,有一种古老的方法可以在MQL5中使用TF,以通常的方式工作

关于交易、自动交易系统和测试交易策略的论坛

测试 "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的方法在处理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;


应用

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!");
 
阿列克谢-沃尔昌斯基

似乎是这样的,请看帮助。

MQL5参考指南 / 自定义指标 / 示例中的指标样式 / DRAW_NONE

非常感谢,我将尝试,SD说IndicatorRelease应该这样做

 

谁遇到过,在结构中排列字段的正确方式是什么,在排列方面。

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

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

结构中的对齐方式应该是从上到下,但我们有一个内存分配为20个元素的数组,所以方式A似乎是正确的方式。
 
fxsaber:
对于MQL4的专家来说,在MQL5中,有一种古老的方法来处理TF的问题

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

应用...


把整个班级放到一个宏里的好方法。太糟糕了,你不能在调试器中使用这样的类 :-()

 
康斯坦丁

遇到过如何在结构中定位字段的人,在对齐方面。

结构中的对齐方式应该是从上到下,但我们有一个数组,分配的内存不足20个元素,所以方式A是有点正确的

如果你指的是MQL,则没有对准。

如果你指的是C++,结构B会更好。

但在任何情况下,C++的对齐方式都取决于程序员。