Discusión sobre el artículo "Trabajando con las series temporales en la biblioteca DoEasy (Parte 58): Series temporales de los datos de búferes de indicadores" - página 2

 
Alexander:

En TestDoEasyPart56 en la función void OnInitDoEasy() al final de la función, he insertado este código para que

obtenga una colección de órdenes históricas desde la fecha D'2020.12.11 10:00' hasta la actual. Y no me aparece ninguna

orden no fue dada por este código.

En el lugar donde Print(list_positions.Total()); obtengo "0".

OnInitDoEasy() no está pensada para funcionar dentro de ella. Necesitas esta función para inicializar correctamente la librería. Trabaja en OnTick
 
Artyom Trishkin:
OnInitDoEasy() no está pensada para funcionar dentro de ella. Esta función es necesaria para inicializar correctamente la librería. Funciona en onTick

Lo inserté en onTick() nada cambió:

//| Función tick experto|
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Manejo de eventos NewTick en la librería
   engine.OnTick(rates_data);

//--- Si trabaja en el probador
   if(MQLInfoInteger(MQL_TESTER))
     {
      engine.OnTimer(rates_data);   // Funcionamiento del temporizador
      engine.EventsHandling();      // Trabajar con eventos
     }
   
//--- Si el indicador de finalización está activado
   if(trailing_on)
     {
      //TrailingPositions(); // Posiciones finales
     // TrailingOrders(); // Seguimiento de órdenes pendientes
     }
     CArrayObj* list_positions=engine.GetListHistoryOrders();
           // list_positions=CSelect::ByOrderProperty(list_positions,ORDER_PROP_SYMBOL,Symbol(),EQUAL);
            list_positions=CSelect::ByOrderProperty(list_positions,ORDER_PROP_TIME_CLOSE,D'2020.12.10 10:00',MORE);
            //--- Seleccionar posiciones con beneficio mayor que cero
            list_positions=CSelect::ByOrderProperty(list_positions,ORDER_PROP_PROFIT,0,MORE);
            if(list_positions!=NULL)
              {Print("OK1");
               //--- Ordenar la lista por beneficios 
               //list_positions.Sort(SORT_BY_ORDER_PROFIT);
               list_positions.Total();
               Print(list_positions.Total());
               //--- Obtener el índice de la posición con mayor beneficio
               int index=CSelect::FindOrderMax(list_positions,ORDER_PROP_PROFIT);
               if(index>WRONG_VALUE)
                 {Print("index= ",index);
                  COrder* position=list_positions.At(index);
                  if(position!=NULL)
                    {
                     //--- Obtener el ticket de la posición con mayor beneficio y cerrar la posición por el ticket
                     Print("OK");
                     Print(engine.GetListDeals());
                    }
                 }
              }
  }
 
Alexander:

Insertado en onTick() nada cambió:

En cada EA de los ejemplos hay un bloque de código para seleccionar y cerrar las posiciones con mayor beneficio. Puedes hacerlo por analogía. No puedo ni mirarlo - desde mi móvil.
 
Artyom Trishkin:

¿Qué le impide escribir y recoger usted mismo esta medalla?

No la reclamo. Que te la den. Te la mereces ;)

 
Aleksey Mavrin:

No tengo ningún derecho. Deja que lo tengas. Te lo mereces ;)

Gracias. No lo quiero. Se lo dejaremos a otros.

 

Es una lástima, pero no hay un lado fuerte de la comunidad de programación MT5 como la mejora mutua de código y la creación de ayuda para las obras públicas. Los que escriben ayuda, por ejemplo, siempre mejorar su comprensión del código.

¡Tal vez sea lo mejor! Creo que seguiré leyendo todos los artículos del ciclo DoEasy. He llegado al artículo 34, te diré que sigue siendo un coboeuvre ingenioso)). Pohodu lectura creo que es malo que no hay ningún diagrama de construcción, este arte de software, pero creo que tal vez para el mejor que hay que pensar un poco.


Conclusiones de los artículos son mucho, sobre todo para los programadores aficionados, que la mayoría de los comerciantes novadais. Gracias, espero que habrá más.

Как в MetaTrader 5 быстро разработать и отладить торговую стратегию
Как в MetaTrader 5 быстро разработать и отладить торговую стратегию
  • www.mql5.com
Скальперские автоматические системы по праву считаются вершиной алгоритмического трейдинга, но при этом они же являются и самыми сложными для написания кода. В этой статье мы покажем, как с помощью встроенных средств отладки и визуального тестирования строить стратегии, основанные на анализе поступающих тиков. Для выработки правил входа и...
 

Mierda, ¿por qué todo el mundo sigue pidiendo este certificado? Hay una ayuda para SB, ¿y qué? Yo la uso sólo si se me olvida el nombre concreto de un método, un poco más rápido que abrir la descripción de la clase).

En SB en timeseries hay un método que cambia el tamaño del buffer. Sin él el trabajo con series temporales es limitado, y la ayuda no dice ni una palabra al respecto, sobre los valores por defecto también.

Así que por qué una ayuda tan defectuosa si hay un código.

En cualquier caso, para empezar a usarlo en serio deberías revisar el código, empezando por las interfaces y más adelante.

Así que no distraigas a Artyom con la ayuda, déjale hacer lo que pueda).

 
Aleksey Mavrin:

Mierda, ¿por qué todo el mundo sigue pidiendo este certificado? Hay una ayuda para SB, ¿y qué? Yo la uso sólo si se me olvida el nombre concreto de un método, un poco más rápido que abrir la descripción de la clase).

En SB en timeseries hay un método que cambia el tamaño del buffer. Sin él el trabajo con series temporales es limitado, y no hay ninguna palabra sobre ello en la ayuda, y sobre los valores por defecto también.

Entonces, ¿por qué una ayuda tan defectuoso, si hay un código.

En cualquier caso, para empezar a utilizar en serio usted debe ir a través del código, a partir de interfaces y más allá.

Asi que no distraigas a Artyom con la ayuda, dejalo hacer lo que sabe hacer)

El trabajo es todavía grande y es necesario tener un certificado y registro en gitHub.