Discusión sobre el artículo "Crear Multi-Expert Advisors basados en los modelos de trading" - página 6

 

Gracias, este es un gran artículo y un buen marco. Exactamente lo que estaba buscando.

Tengo la intención de utilizarlo con dinero real, ¿es la última versión?

Gracias

 
't' - la conversión existe, pero es inaccesible Model.mqh 280 27
 

Buenas tardes.

He intentado corregir varios errores, pero sigue apareciendo uno más... si el objetivo era facilitar la vida a los principiantes, esto se está poniendo difícil y me estoy volviendo loco...

¡Ayuda por favor!

Error

 

Gran artículo!
Tuve que cambiar dos cosas para que funcione.

En el archivo "TableOrders.mqh" en esta función bool CTableOrders::Add(ulong Ticket,double stop_loss,double take_profit) línea 89, la variable m_type debe ser reemplazado por:

De:
m_type=order_info.Type();

Por:

m_type=order_info.OrderType();

La segunda también en la "TablaOrdenes.mqh":

De:

class CTableOrders : CObject

To:

class CTableOrders : public CObject

Saludos,
A. HUPP

 
Airton Raposo:

Buenas tardes.

He intentado corregir varios errores, pero sigue apareciendo uno más... si el objetivo era facilitar la vida a los principiantes, esto se está poniendo difícil y me estoy volviendo loco...

¡Ayuda por favor!

Airton este articulo es muy avanzado para principiantes, primero debes entender el concepto de desarrollo de aplicaciones Orientadas a Objetos, jerarquias, polimorfismo, herencia, metodos virtuales, es decir, necesitas saber programacion avanzada, los errores encontrados en estos ejemplos sin embargo estan relacionados con las declaraciones de clases, a las cuales en algunas de ellas les falta la palabra clave public que debes insertar a mano, tal vez la version anterior de MQL no necesitaba estas palabras clave para compilar, pero esta version requiere esta correccion.

 

para compilar el archivo simple_model.mq5 tuve que añadir "public

class CModel: public CObject en la línea 12

al compilar MACD_MA_model.mq5 me sigue apareciendo este error

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

no puedo evitar este error que se refiere a la biblioteca subyacente.

Gracias por su artículo y por el esfuerzo de crear un marco general para las pruebas.

 
z3r00tt0:

para compilar el archivo simple_model.mq5 tuve que añadir "public":

class CModel: public CObject en la línea 12

al compilar MACD_MA_model.mq5 me sigue apareciendo este error:

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

no puedo evitar este error que se refiere a la biblioteca subyacente.

Gracias por su artículo y el esfuerzo para construir un marco general para las pruebas.

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

Intenté descompilar, me dio errores

'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

¿Algún plan para arreglar el código?

 

min_risk = punto * valor_tic * symbol_info_.LotsStep();

debe utilizar el recuento de ticks en lugar del recuento de puntos.

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

porque en algunos símbolos, tick size != punto


por ejemplo:

Futuros\Materias primas agrícolas\#Coffee_H21:

Dígitos: 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
 

No debes borrar nodos cuando iteras la lista.

Por ejemplo:

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

Después de borrar el nodo en el índice 5, iteras el índice 6, pero el siguiente elemento sigue siendo el índice 5.

Es una mejor idea usar 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();
    }

¡Gracias por tu contribución!