Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1026

 
Vladimir Karputov:

Il punto non cambia - stai cercando di cancellare un ordine pendente con un ticket "0" su ogni tick.

E chi dice che avete un ordine pendente con un tick "0" su ogni tick? Avete controllato quanti ordini pendenti ci sono? E come fai a saperlo ....?

Con quale segno di spunta è "0"? OrderGetTicket(0) non significa che un ordine con ticket 0 è selezionato, ma restituisce un ordine con ticket dalla lista degli ordini pendenti con indice 0.

 
ascerdfg:


Probabilmente devi essere più specifico nel tuo compito.

Per esempio: se c'è un ordine pendente la cui magia è "1" - allora cancellalo.

In questo caso, l'implementazione sarà la seguente:

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

Eseguire il loop di tutti gli ordini in sospeso

Se un ordine in sospeso è stato selezionato con successo (il valore restituito è il biglietto maggiore di zero)

Se il valore magico dell'ordine pendente selezionato è "1"

Cancellare

 
Alexey Viktorov:

Con quale biglietto "0"? OrderGetTicket(0) non significa che un ordine con ticket 0 è selezionato, ma restituisce un ordine con ticket dalla lista degli ordini pendenti con indice 0.

Sì, proprio così.

 

Potete dirmi quanta RAM è necessaria per far funzionare il tester per 30 caratteri dal 2004 a oggi?

Il tester dice che non ce n'è abbastanza, ma non dice quanto è necessario.

 
Igor Zakharov:

Potete dirmi quanta RAM è necessaria per far funzionare il tester per 30 caratteri dal 2004 a oggi?

Il tester dice che non ce n'è abbastanza, ma non dice quanto.

Eseguire due caratteri, cinque caratteri ...

 
Vladimir Karputov:

Eseguire due caratteri, cinque caratteri ...

Non è proprio questa la domanda - quanta memoria devo comprare per rendere possibile un tale test?

Ecco il risultato per un simbolo (dal log in modalità prezzo di apertura)

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

Eccone 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

Ed eccone 4:

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

È andatoin modo esponenziale:) Non riesco a rintracciare la logica, dato che i ticchettii sono più o meno gli stessi:

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

Ho visto molti rapporti di 20 o più caratteri, non credo che qualcuno usi terabyte di RAM. Forse c'è un segreto?

 

È possibile impostare il numero di buffer grafici nell'indicatore?

E la seconda domanda, c'è una possibilità di reinizializzazione forzata dell'indicatore usato dall'Expert Advisor per risparmiare RAM?

 
Aleksey Vyazmikin:

È possibile impostare il numero di buffer grafici nell'indicatore?

E la seconda domanda, c'è una possibilità di reinizializzazione forzata dell'indicatore usato dall'Expert Advisor per risparmiare RAM?

È possibile diminuire il numero di indicator_plots dichiarato in #property indicator_plots, l'ho fatto. Ma è difficilmente possibile aumentarlo. Ma questa diminuzione non porterà al risparmio di memoria. Dopo tutto, i buffer rimangono. Sono solo trasferiti da INDICATOR_DATA a INDICATOR_CALCULATIONS e niente di più.

 
Alexey Viktorov:

Il dichiarato in #property indicator_plots può essere ridotto, l'ho fatto. Ma è improbabile che sia possibile aumentarlo. Ma questa riduzione non salverà la RAM. I buffer rimangono, dopo tutto. Sono solo trasferiti da INDICATOR_DATA a INDICATOR_CALCULATIONS e niente di più.

Grazie per la vostra risposta. Una modifica estetica del numero di buffer non è rilevante, purtroppo.

 

Voglio ottenere gli handle dell'indicatore MACD da tre timeframe nel blocco OnInit(). Sul grafico - funziona, ma nel tester non funziona, e il terminale si blocca! Quindi voglio ottenere i dati che non esistono? Potete per favore consigliarmi come affrontarlo?


//+------------------------------------------------------------------+
//|                                                        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()
  {
//---

  }
//+------------------------------------------------------------------+
Motivazione: