Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1026

 
Vladimir Karputov:

O ponto não muda - está a tentar apagar uma ordem pendente com um bilhete "0" em cada tick.

E quem diz que tem uma ordem pendente com um "0" em cada tick? Já verificou quantas encomendas pendentes existem? E como é que sabe que ....?

Com que carrapato é "0"??? OrderGetTicket(0) não significa que uma encomenda com bilhete 0 seja seleccionada, mas devolve uma encomenda de bilhetes da lista de encomendas pendentes sob o índice 0.

 
ascerdfg:


É provável que necessite de ser mais específico na sua tarefa.

Por exemplo: se houver uma ordem pendente cuja magia seja "1" - então apague-a.

Neste caso, a implementação será a seguinte:

#include <Trade\Trade.mqh>

CTrade trader;
int OnInit()
  {

   trader.SetExpertMagicNumber(1);

   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
//---
  
  }
void OnTick()
  {
   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(OrderGetTicket(i)>0)     // selects the pending order by index for further access to its properties
         if(OrderGetInteger(ORDER_MAGIC)==1)
            trader.OrderDelete(OrderGetTicket(i));
  }

Percorrer todas as encomendas pendentes

Se uma encomenda pendente tiver sido seleccionada com sucesso (o valor devolvido é o bilhete maior que zero)

Se o valor mágico da ordem pendente seleccionada for "1

Apagar

 
Alexey Viktorov:

Com que bilhete "0"? OrderGetTicket(0) não significa que uma encomenda com bilhete 0 seja seleccionada, mas devolve uma encomenda de bilhetes da lista de encomendas pendentes sob o índice 0.

Sim, é isso mesmo.

 

Pode dizer-me quanto RAM é necessário para executar o testador para 30 caracteres desde 2004 até hoje?

O testador diz que não há suficiente, mas não diz o quanto é necessário.

 
Igor Zakharov:

Pode dizer-me quanto RAM é necessário para executar o testador para 30 caracteres desde 2004 até hoje?

O provador diz que não há o suficiente, mas não diz quanto.

Executar dois caracteres, cinco caracteres ...

 
Vladimir Karputov:

Executar dois caracteres, cinco caracteres ...

Essa não é realmente a questão - quanta memória tenho de comprar para tornar possível tal teste?

aqui está o resultado para um símbolo (do registo no modo de preço de abertura)

264  Mb memory used including 6 Mb of history data, 64  Mb of tick data

aqui está 2:

271 Mb memory used including 12 Mb of history data, 64 Mb of tick data

3:

1038  Mb memory used including 12 Mb of history data, 832 Mb of tick data

E aqui está 4:

1450 Mb memory used including 18 Mb of history data, 1216  Mb of tick data

Foiexponencialmente:) Não consigo seguir a lógica, uma vez que os carrapatos são mais ou menos os mesmos:

EURUSD,H1: 21470549 ticks, 94233 bars generated. 63097850 total ticks for all symbols
EURUSD: generate 21470549 ticks in 0:00:05.375, passed to tester 21470549 ticks
USDCAD: generate 20302871 ticks in 0:00:05.062, passed to tester 20302871 ticks
USDJPY: generate 21324430 ticks in 0:00:05.641, passed to tester 21324430 ticks
1450 Mb memory used including 18 Mb of history data, 1216 Mb of tick data

Já vi muitos relatórios de 20 ou mais caracteres, não acredito que alguém use terabytes de RAM. Talvez haja um segredo?

 

É possível definir o número de amortecedores gráficos no indicador?

E a segunda pergunta, existe a possibilidade de reinicialização forçada do indicador utilizado pelo Conselheiro Especialista para salvar a RAM?

 
Aleksey Vyazmikin:

É possível definir o número de amortecedores gráficos no indicador?

E a segunda pergunta, existe a possibilidade de reinicialização forçada do indicador utilizado pelo Conselheiro Especialista para salvar a RAM?

É possível diminuir o número de indicadores_códigos_códigos_códigoscódigos_códigos_códigos, eu fi-lo. Mas dificilmente é possível aumentá-la. Mas esta diminuição não levará a uma poupança de memória. Afinal de contas, os amortecedores permanecem. Acabam de ser transferidos de INDICATOR_DATA para INDICATOR_CALCULATIONS e nada mais.

 
Alexey Viktorov:

O indicado em #plots do indicador de propriedade pode ser reduzido, eu fiz isso. Mas é pouco provável que seja possível aumentá-la. Mas esta redução não irá salvar a RAM. Os amortecedores permanecem, afinal de contas. Acabam de ser transferidos de INDICATOR_DATA para INDICATOR_CALCULATIONS e nada mais.

Obrigado pela sua resposta. Uma alteração cosmética do número de tampões não é, infelizmente, relevante.

 

No gráfico - funciona, mas no verificador não funciona, e o terminal fica pendurado! Então quero obter os dados que não existem? Pode, por favor, aconselhar como lidar com isso?


//+------------------------------------------------------------------+
//|                                                        Test.mq5  |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

//--- Количество периодов торгуемых символов
#define  NUMBER_OF_PERIODS 3

ENUM_TIMEFRAMES Periods[NUMBER_OF_PERIODS]={PERIOD_M1,PERIOD_M2,PERIOD_M3};
int handles[NUMBER_OF_PERIODS];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArrayInitialize(handles,INVALID_HANDLE);
      for(int p=0; p<NUMBER_OF_PERIODS; p++)
        {
         if(handles[p]==INVALID_HANDLE)
           {
            handles[p]=iCustom(NULL,Periods[p],"Examples\\MACD");
            Print(handles[p]);
            if(handles[p]==INVALID_HANDLE)  Print("Не удалось получить хэндл индикатора для символа !");
           }
        }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
Razão: