Discussione sull’articolo "Creare Expert Advisor multipli sulla base dei modelli di trading" - pagina 6

 

Grazie, questo è un ottimo articolo e un buon quadro di riferimento. Esattamente quello che stavo cercando.

Ho intenzione di utilizzarlo con denaro reale, è l'ultima versione?

Grazie

 
't' - la conversione esiste, ma è inaccessibile Model.mqh 280 27
 

Buon pomeriggio!

Ho cercato di correggere diversi errori, ma ne continua a spuntare uno... se l'obiettivo era quello di rendere la vita più facile ai principianti, sta diventando difficile in questo modo e sto perdendo la testa...

Aiuto per favore!

Errore

 

Ottimo articolo!
Ho dovuto cambiare due cose per farlo funzionare.

Nel file "TableOrders.mqh" nella funzione bool CTableOrders::Add(ulong Ticket,double stop_loss,double take_profit) riga 89, la variabile m_type deve essere sostituita da:

Da:
m_type=order_info.Type();

A:

m_type=order_info.OrderType();

Il secondo anche in "TableOrders.mqh":

Da:

class CTableOrders : CObject

A:

class CTableOrders : public CObject

Saluti,
A. HUPP

 
Airton Raposo:

Buon pomeriggio!

Ho cercato di correggere diversi errori, ma ne continua a spuntare uno... se lo scopo era quello di rendere la vita più facile ai principianti, sta diventando difficile in questo modo e sto perdendo la testa...

Aiuto per favore!

Airton questo articolo è molto avanzato per i principianti, bisogna prima capire il concetto di sviluppo di applicazioni Object Oriented, gerarchie, polimorfismo, ereditarietà, metodi virtuali, cioè bisogna conoscere la programmazione avanzata, gli errori riscontrati in questi esempi però sono relativi alle dichiarazioni delle classi, che in alcune di esse mancano della parola chiave public che bisogna inserire a mano, forse la versione precedente di MQL non aveva bisogno di queste parole chiave per compilare, ma questa versione richiede questa correzione.

 

per compilare il file simple_model.mq5 ho dovuto aggiungere "public":

classe CModel: public CObject alla riga 12

Durante la compilazione di MACD_MA_model.mq5 continuo a ricevere questo errore:

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

Non riesco ad evitare questo errore che si riferisce alla libreria sottostante.

Grazie per il vostro articolo e per lo sforzo di costruire un quadro generale per i test.

 
z3r00tt0:

per compilare il file simple_model.mq5 ho dovuto aggiungere "public":

classe CModel: public CObject alla riga 12

Durante la compilazione di MACD_MA_model.mq5 continuo a ricevere questo errore:

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

Non riesco ad evitare questo errore che si riferisce alla libreria sottostante.

Grazie per il vostro articolo e per lo sforzo di costruire un quadro generale per i test.

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

Ho provato a decompilare, ma ho riscontrato degli errori

'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

Avete in programma di correggere il codice?

 

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

si dovrebbe usare il conteggio dei tick invece del conteggio dei punti.

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

perché in alcuni simboli, la dimensione dei tick = punto


ad esempio:

Futures\Agricultural Commodities\#Coffee_H21:

Cifre: 2 Punto: 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
 

Non si dovrebbe cancellare il nodo durante l'iterazione dell'elenco.

Per esempio:

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

Dopo aver eliminato il nodo all'indice 5, si itera all'indice 6, ma l'elemento successivo è ancora all'indice 5.

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

Grazie per il vostro contributo!