文章 "基于交易模块创建多个 EA 交易" - 页 6

 

谢谢,这是一篇好文章,也是一个好框架。正是我想要的。

我打算用真钱来使用它,它是最新版本吗?

谢谢

 
t' - 存在转换,但无法访问 Model.mqh 280 27
 

下午好!

我试着改正了几个错误,但又有一个错误不断出现......如果说我们的目的是为了让初学者更轻松地学习,那么这样做就越来越难了,我都快疯了......

请帮帮我!

错误

 


我必须修改两处才能正常工作。

在文件 "TableOrders.mqh "的 bool CTableOrders::Add(ulong Ticket,double stop_loss,double take_profit) 第 89 行,变量 m_type 应替换为:

From:
m_type=order_info.Type();

改为

m_type=order_info.OrderType();

第二个变量也在 "TableOrders.mqh "中:

From:

class CTableOrders : CObject

class CTableOrders : public CObject

Regards,
A.HUPP

 
Airton Raposo:

下午好!

我试着改正了几个错误,但又有一个错误不断出现......如果说我们的目的是为了让初学者更轻松地学习,那么现在的情况却越来越难,我都快疯了...

请帮帮我!

Airton 这篇文章对于初学者来说是非常高深的,您必须首先了解面向对象应用程序开发、层次结构、多态性、继承、虚方法的概念,也就是说,您需要了解高级编程知识。然而,在这些示例中发现的错误与类声明有关,其中一些示例中缺少了您必须手工插入的 public 关键字,也许以前版本的 MQL 在编译时不需要这些关键字,但这个版本需要更正。

 

为了编译 simple_model.mq5 文件,我必须添加 "public":

类 CModel:第 12 行的 publicCObject

在编译 MACD_MA_model.mq5 时,我一直遇到这个错误:

MODE_OPEN' - 枚举标识符已定义 stdlib.mqh 13 4

我无法绕过这个涉及底层库的错误。

感谢您的文章,感谢您为建立一个通用测试框架所做的努力。

 
z3r00tt0:

为了编译 simple_model.mq5 文件,我必须添加 "public":

类 CModel: 公有 CObject 在第 12 行

在编译 MACD_MA_model.mq5 时,我一直遇到这个错误:

MODE_OPEN' - 枚举标识符已定义 stdlib.mqh 13 4

我无法绕过这个涉及底层库的错误。

感谢您的文章,感谢您为建立一个通用测试框架所做的努力。

https://www.mql5.com/en/forum/244512

Enumerator compile error
Enumerator compile error
  • 2018.05.14
  • www.mql5.com
Hi, I'm new in mql programming and trying to develop my first EA based on what I found in mql articles...
 

尝试解编译,出现错误

'MACD_MA model.mq5'     MACD_MA model.mq5       1       1
'Trade.mqh'     Trade.mqh       1       1
'Object.mqh'    Object.mqh      1       1
'StdLibErr.mqh' StdLibErr.mqh   1       1
'SymbolInfo.mqh'        SymbolInfo.mqh  1       1
'OrderInfo.mqh' OrderInfo.mqh   1       1
'HistoryOrderInfo.mqh'  HistoryOrderInfo.mqh    1       1
'PositionInfo.mqh'      PositionInfo.mqh        1       1
'DealInfo.mqh'  DealInfo.mqh    1       1
'AccountInfo.mqh'       AccountInfo.mqh 1       1
'model_macd.mqh'        model_macd.mqh  1       1
'Model.mqh'     Model.mqh       1       1
'List.mqh'      List.mqh        1       1
'TableOrders.mqh'       TableOrders.mqh 1       1
'Time.mqh'      Time.mqh        1       1
'mm.mqh'        mm.mqh  1       1
'stdlib.mqh'    stdlib.mqh      1       1
'model_ma.mqh'  model_ma.mqh    1       1
'model_bollinger.mqh'   model_bollinger.mqh     1       1
return value of 'OrderSelect' should be checked TableOrders.mqh 120     4
implicit enum conversion        TableOrders.mqh 50      44
'new_message' - conversion is not accessible because of inheritance access      Time.mqh        185     21
possible use of uninitialized variable 'lot_limit'      mm.mqh  129     10
't' - conversion is not accessible because of inheritance access        Model.mqh       252     27
declaration of 'trade' hides global variable    Model.mqh       282     16
   see previous declaration of 'trade'  MACD_MA model.mq5       18      8
declaration of 'i' hides local variable Model.mqh       310     15
   see previous declaration of 'i'      Model.mqh       307     12
possible loss of data due to type conversion    Model.mqh       428     47
possible loss of data due to type conversion    model_macd.mqh  86      11
possible loss of data due to type conversion    model_macd.mqh  90      14
possible loss of data due to type conversion    model_macd.mqh  91      14
possible loss of data due to type conversion    model_macd.mqh  92      16
expression not boolean  model_macd.mqh  228     11
expression not boolean  model_macd.mqh  254     11
possible loss of data due to type conversion    model_ma.mqh    85      11
possible loss of data due to type conversion    model_ma.mqh    89      8
possible loss of data due to type conversion    model_ma.mqh    90      19
expression not boolean  model_ma.mqh    219     11
expression not boolean  model_ma.mqh    242     11
declaration of 'k_ATR' hides global variable    model_bollinger.mqh     97      110
   see previous declaration of 'k_ATR'  MACD_MA model.mq5       25      16
possible loss of data due to type conversion    model_bollinger.mqh     99      22
possible loss of data due to type conversion    model_bollinger.mqh     104     22
possible loss of data due to type conversion    model_bollinger.mqh     107     22
variable 'rezult' not used      model_bollinger.mqh     170     9
variable 'rezult' not used      model_bollinger.mqh     195     9
expression not boolean  model_bollinger.mqh     238     11
expression not boolean  model_bollinger.mqh     263     11
2 errors, 25 warnings           3       26

有修复代码的计划吗?

 

min_risk = point * tick_value *symbol_info_.LotsStep();

应使用 tick 计数而不是点计数。

tick_count = MathAbs(open_price - stop_loss) / symbol_info_.TickSize();

因为在某些符号中,tick size != point


例如

Futures\Agricultural Commodities\#Coffee_H21:

Digits: 2 Point: 0.01 TickValue: 18.75 TickValueProfit: 18.75 TickValueLoss: 18.75 TickSize: 0.05 ContractSize: 375.0 LotsMin:0.01 LotsMax: 50.0 LotsStep: 0.01 LotsLimit: 0.0
 

迭代列表时不应该删除节点。

例如

class Test : public CObject {
  public:
    int i_;
    Test(int i) {
        i_ = i;
    };
    int get_i() {
        return i_;
    };
};


    CList *list = new CList();
    for (int i = 0; i < 10; i++) {
        Test *t = new Test(i);
        list.Add(t);
    }

    for (int i = 0; i < list.Total(); i++) {
        Test *t = list.GetNodeAtIndex(i);
        if (i == 5) {
            list.DeleteCurrent();
        }
        if (CheckPointer(t) == POINTER_INVALID) {
            continue;
        }
        Print(t.get_i());
    }

删除索引 5 的节点后,迭代索引 6,但下一个元素仍是索引 5。

更好的办法是使用 GetFirstNode / GetNextNode。

    for (Test *t = list.GetFirstNode(); t != NULL;) {
        t_current = t;
        if (t.get_i() == 5) {
            list.DeleteCurrent();
            t = list.GetCurrentNode();
            if (t == t_current) {break;}
            continue;
        }
        Print(t.get_i());
        t = list.GetNextNode();
    }

感谢您的贡献!