Discussão do artigo "Trabalhando com séries temporais na biblioteca DoEasy (Parte 58): séries temporais de dados de buffers de indicadores" - página 2

 
Alexander:

Em TestDoEasyPart56, na função void OnInitDoEasy(), bem no final da função, inseri este código para que

obtenha uma coleção de ordens históricas desde a data D'2020.12.11 10:00' até a atual. E não obtive nenhuma delas

A ordem não foi fornecida por esse código.

No local em que imprimo Print(list_positions.Total()); recebo "0".

A função OnInitDoEasy() não se destina a funcionar dentro dela. Você precisa dessa função para inicializar corretamente a biblioteca. Trabalho em OnTick
 
Artyom Trishkin:
A função OnInitDoEasy() não se destina a funcionar dentro dela. Essa função é necessária para inicializar corretamente a biblioteca. Funciona no onTick

Eu a inseri em onTick() e nada mudou:

//| Função de tique de especialista|
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Tratamento do evento NewTick na biblioteca
   engine.OnTick(rates_data);

//--- Se estiver trabalhando no testador
   if(MQLInfoInteger(MQL_TESTER))
     {
      engine.OnTimer(rates_data);   // Operação do cronômetro
      engine.EventsHandling();      // Trabalhando com eventos
     }
   
//--- Se o sinalizador de finalização estiver definido
   if(trailing_on)
     {
      //TrailingPositions(); // Posições finais
     // TrailingOrders(); // Trailing de ordens pendentes
     }
     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);
            //--- Selecionar posições com lucro maior que zero
            list_positions=CSelect::ByOrderProperty(list_positions,ORDER_PROP_PROFIT,0,MORE);
            if(list_positions!=NULL)
              {Print("OK1");
               //--- Classificar a lista por lucro 
               //list_positions.Sort(SORT_BY_ORDER_PROFIT);
               list_positions.Total();
               Print(list_positions.Total());
               //--- Obter o índice da posição com o maior lucro
               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)
                    {
                     //--- Obtenha o ticket da posição com o maior lucro e feche a posição pelo ticket
                     Print("OK");
                     Print(engine.GetListDeals());
                    }
                 }
              }
  }
 
Alexander:

Inserido em onTick(), nada mudou:

Em cada EA dos exemplos, há um bloco de código para selecionar e fechar as posições com o maior lucro. Você pode fazer isso por analogia. Não consigo nem olhar para ele - do meu celular.
 
Artyom Trishkin:

O que o impede de escrever e receber essa medalha?

Não tenho direito a ela. Deixe que você a receba. Você merece ;)

 
Aleksey Mavrin:

Não tenho direito a nada. Deixe que você fique com ele. Você merece ;)

Obrigado. Eu não quero. Deixaremos isso para os outros.

 

É uma pena, mas não existe um lado forte da comunidade de programação do MT5 como o aprimoramento mútuo do código e a criação de ajuda para trabalhos públicos. Aqueles que escrevem ajuda, por exemplo, sempre melhoram sua compreensão do código.

Talvez seja melhor assim! Acho que ainda lerei todos os artigos do ciclo DoEasy. Cheguei ao artigo 34 e posso lhe dizer que ainda é uma manobra espirituosa)). Pohodu lendo acha que é ruim que não haja um diagrama de construção, essa arte de software, mas acho que talvez seja melhor pensar um pouco.


As conclusões dos artigos são muito, especialmente para programadores amadores, que a maioria dos comerciantes novadais. Obrigado, espero que haja mais.

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

Droga, por que todo mundo continua pedindo esse certificado? Existe uma ajuda para o SB, e daí? Eu a utilizo apenas quando esqueço o nome específico de um método, um pouco mais rápido do que abrir a descrição da classe).

No SB, em séries temporais, há um método que altera o tamanho do buffer. Sem ele, o trabalho com séries temporais é limitado, e não há nenhuma palavra sobre isso na ajuda, nem sobre os valores padrão.

Então, por que uma ajuda tão falha se existe um código?

De qualquer forma, para começar a usá-lo com seriedade, você deve examinar o código, começando pelas interfaces e seguindo adiante.

Portanto, não distraia o Artyom com a ajuda, deixe-o fazer o que puder).

 
Aleksey Mavrin:

Droga, por que todo mundo continua pedindo esse certificado? Existe uma ajuda para o SB, e daí? Eu a utilizo apenas quando esqueço o nome específico de um método, um pouco mais rápido do que abrir a descrição da classe).

No SB, em séries temporais, há um método que altera o tamanho do buffer. Sem ele, o trabalho com séries temporais é limitado, e não há nenhuma palavra sobre isso na ajuda, e sobre os valores padrão também.

Então, por que uma ajuda tão falha, se existe um código?

De qualquer forma, para começar a usá-lo com seriedade, você deve examinar o código, começando com as interfaces e seguindo adiante.

Portanto, não distraia o Artyom com a ajuda, deixe-o fazer o que ele pode fazer)

O trabalho ainda é grande e é necessário ter um certificado e um registro no gitHub.