新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1324

 
Yurij Kozhevnikov:

谢谢你,我已经想到了这样的实现方式,但由于没有Value1本身,所以不大相同。也就是说,我所创造的例子当然是极其简化的,但它暗示了这并不是该类的主要价值,可以有许多这样的价值,对于每一个这样的结构都可以进行描述。

或者对于这样的实现,是否可以只描述一个单独的类或结构来实现重载,并在这个类中描述创建类型的变量?但是,如果该类的其他变量也参与了赋值操作,那么同样的,它也不会增加。

实际上,我想在vbs中 实现类似于Let/Set/Get方法 的东西。

我不太明白这个问题,但C++/MQL没有一个关键的属性 属性

也许你需要一个模板类https://www.mql5.com/ru/docs/basis/oop/class_templates


UPD: 这里有一篇关于同样事情的Habra的文章https://habr.com/ru/post/121799/ , 但我怀疑它是否 "直接 "适用于MQL

 

非常感谢您!

这有点超出我的知识范围,因为我从来没有学过C++,但它似乎正是我想要的。我会努力想办法的。

 
Yurij Kozhevnikov:

非常感谢您!

这有点超出我的知识范围,因为我从来没有学过C++,但它似乎正是我想要的。我会努力想办法的。

试着在这个主题中简要地提出你的问题:https://www.mql5.com/ru/forum/85652

那里有一些非常酷的程序员,他们做这样的事情......。好吧,也许这能帮助你更快地弄清问题

 

是的,谢谢你。

我,记得我曾用过一个,但忘了它叫 "财产",而且在解释我想要的东西时显得很迟钝。

在文章的评论中提到,你可以使用宏替换,这让我想到,也许通过采用与自己严格的语法协议,你可以更容易地实现一个不那么常见的情况。

 
class TestClass
{
  private:
    double cValue1;
    double cValue2;
    double cValue3;
    int cIndex;
    void _Set(double mValue);
  public:
    TestClass():cIndex(-1){}
    double Value1()
    {return cValue1;}

    TestClass* Value(int param)
    {
      cIndex=param;
      return &this;
    }
    void operator =(double mValue) {_Set(mValue);}
};
//---------------------------------------------
void TestClass::_Set(double mValue){
   switch(cIndex){
      case 1:  cValue1=mValue; break;
      case 2:  cValue2=mValue; break;
      case 3:  cValue3=mValue; break;
   }
   cIndex=-1;
}

void TestFunction()
{
  TestClass test;
  test.Value(1)=0.5;
  Print(test.Value1());
}

void OnStart(void)
  {
   TestFunction();
  }
这样的拐杖可以被描绘出来)
 
Vladimir Simakov:
这是你可以做的拐杖)

谢谢你,这根拐杖显然要简单得多,虽然即使有了这根拐杖,我仍然不能理解所有的东西。

是否不可能将任何一组字符放入宏替换?类似这样的事情。

#define .<один любой набор символов>()=<второй любой набор символов> Set<один любой набор символов>(<второй любой набор символов>)
#define .<один любой набор символов>(par1)=<второй любой набор символов> Set<один любой набор символов>(par1,<второй любой набор символов>)
 
Aleksey Mavrin:

简单地重载DoubleToString,如果它返回字符串"EMPTY_VALUE" 否则就调用::DoubleToString

我不明白这里的情况。

 
Fast235:

我不明白这里的情况。

但除此之外

#define DoubleToString(value,digits)  (value!=EMPTY_VALUE?DoubleToString(value,digits):"EMPTY_VALUE") 
 
Aleksey Mavrin:

但除此之外

在罕见的情况下,制作并删除来源,这样你就不会再看到它了)


如果缓冲区是一个指标缓冲区,你可以用EMPTY_VALUE 来代替它。

PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE)。

但缓冲区的数量是未知的
 

下午。我想把从ATR 指标中读取的止损 信息附加到我的EA中。输入变量如下。

  extern   ENUM_TIMEFRAMES   PeriodForWork_sl        =  PERIOD_H4;           // ТФ РАСЧЁТА ЗНАЧЕНИЙ СТОП ЛОСА ПО АТР
  extern double sl= 14; // ПЕРИОД АТR СТОП ЛОССА

我正在将ATR值添加到一个变量中,用于止损。

sl=iATR( NULL,PeriodForWork_sl,sl,1);// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА

然后我尝试像这样开单。


OrderSend(Symbol(),OP_BUY,lot,Ask,slippages,Bid-sl*Point,Bid+tp*Point,"ДИВЕРГЕНЦИЯ НА БАЙ АО"); // ОТКРЫВАЕМ БАЙ ОРДЕР

但没有任何效果。我打印了止损变量的值,但它说其值为0。我做错了什么,我需要在哪里进行调整以使其发挥作用?

原因: