Обсуждение статьи "Создание мульти-экспертов на основе торговых моделей" - страница 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();

To:

m_type=order_info.OrderType();

Второе также в файле "TableOrders.mqh":

From:

class CTableOrders : CObject

To:

class CTableOrders : public CObject

С уважением,
A. HUPP

 
Airton Raposo:

Добрый день!

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

Помогите, пожалуйста!

Airton эта статья очень продвинутая для новичков, вы должны сначала понять концепцию объектно-ориентированной разработки приложений, иерархии, полиморфизм, наследование, виртуальные методы, то есть вы должны знать продвинутое программирование, ошибки в этих примерах однако связаны с объявлениями классов, в некоторых из них отсутствует ключевое слово public, которое вы должны вставить вручную, возможно предыдущая версия MQL не требовала этих ключевых слов для компиляции, но эта версия требует этого исправления.

 

чтобы скомпилировать файл simple_model.mq5, мне пришлось добавить "public":

class CModel: public CObject в строке 12

При компиляции MACD_MA_model.mq5 я продолжаю получать эту ошибку:

'MODE_OPEN' - идентификатор перечислителя уже определен stdlib.mqh 13 4

Я не могу обойти эту ошибку, которая относится к базовой библиотеке.

Спасибо за вашу статью и попытку создать общий фреймворк для тестирования.

 
z3r00tt0:

Чтобы скомпилировать файл simple_model.mq5, мне пришлось добавить "public":

class CModel: public 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_count = MathAbs(open_price - stop_loss) / symbol_info_.TickSize();

потому что в некоторых символах размер тика != пункт


например:

Futures\Agricultural Commodities\#Coffee_H21:

Цифры: 2 Пункт: 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();
    }

Спасибо за ваш вклад!