Discussion de l'article "Création d’Expert Advisors Multiples sur la base de Modèles de Trading" - page 6

 

Merci, c'est un excellent article et un bon cadre. Exactement ce que je cherchais.

J'ai l'intention de l'utiliser avec de l'argent réel, est-ce la dernière version ?

Merci d'avance.

 
't' - la conversion existe, mais est inaccessible Modèle.mqh 280 27
 

Bonjour !

J'ai essayé de corriger plusieurs erreurs, mais il y en a encore une qui revient... si le but était de faciliter la vie des débutants, ça devient difficile comme ça et je ne sais plus où j'en suis...

Aidez-moi s'il vous plaît !

Erreur

 

Excellent article !
J'ai dû changer deux choses pour que cela fonctionne.

Dans le fichier "TableOrders.mqh" sur cette fonction bool CTableOrders::Add(ulong Ticket,double stop_loss,double take_profit) ligne 89, la variable m_type doit être remplacée par :

From :
m_type=order_info.Type() ;

Pour :

m_type=order_info.OrderType() ;

La seconde également sur le "TableOrders.mqh" :

From :

class CTableOrders : CObject

To :

class CTableOrders : public CObject

Salutations,
A. HUPP

 
Airton Raposo:

Bonjour !

J'ai essayé de corriger plusieurs erreurs, mais il y en a encore une qui revient... si le but était de faciliter la vie des débutants, ça devient difficile comme ça et je ne sais plus où j'en suis...

Aidez-moi s'il vous plaît !

Airton cet article est très avancé pour les débutants, vous devez d'abord comprendre le concept de développement d'applications orientées objet, les hiérarchies, le polymorphisme, l'héritage, les méthodes virtuelles, c'est-à-dire que vous devez connaître la programmation avancée, les erreurs trouvées dans ces exemples sont cependant liées aux déclarations de classes, qui dans certaines d'entre elles manquent le mot-clé public que vous devez insérer à la main, peut-être que la version précédente de MQL n'avait pas besoin de ces mots-clés pour compiler, mais que cette version nécessite cette correction.

 

Pour compiler le fichier simple_model.mq5, j'ai dû ajouter "public" :

class CModel : public CObject à la ligne 12

Lors de la compilation de MACD_MA_model.mq5, je continue à obtenir cette erreur :

'MODE_OPEN' - enumerator identifier already defined stdlib.mqh 13 4

Je n'arrive pas à contourner cette erreur qui fait référence à la bibliothèque sous-jacente.

Je vous remercie pour votre article et pour l'effort que vous faites pour construire un cadre général pour les tests.

 
z3r00tt0:

Pour compiler le fichier simple_model.mq5, j'ai dû ajouter "public" :

class CModel : public CObject à la ligne 12

Lors de la compilation de MACD_MA_model.mq5, j'obtiens toujours cette erreur :

'MODE_OPEN' - enumerator identifier already defined stdlib.mqh 13 4

Je n'arrive pas à contourner cette erreur qui fait référence à la bibliothèque sous-jacente.

Je vous remercie pour votre article et l'effort que vous faites pour construire un cadre général pour les tests.

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...
 

J'ai essayé de décompiler, j'ai eu des erreurs

'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

Est-il prévu de corriger le code ?

 

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

Vous devriez utiliser le nombre de ticks au lieu du nombre de points.

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

car pour certains symboles, tick size != point


par exemple :

Futures\Agricultural Commodities\#Coffee_H21 :

Chiffres : 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
 

Il ne faut pas supprimer de nœud lors de l'itération de la liste.

Par exemple, après avoir supprimé le nœud à l'index 5, vous itérez l'index 6 :

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());
    }

Après avoir supprimé le nœud à l'index 5, vous itérez à l'index 6, mais l'élément suivant est toujours à l'index 5.

Il est préférable d'utiliser 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();
    }

Merci pour votre contribution !