Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 180

 
Igor Makanu:

Sì, sono della stessa opinione, ma non solo la storia e il numero di buffer degli indicatori - cioè di nuovo sull'allocazione della memoria, se MT4 ha ingoiato tutta la memoria, allora sta rallentando - apparentemente inizia a liberare aree di memoria

Sicuramente, gli sviluppatori possono rispondere, ma stiamo parlando di MetaTrader 4, e qui ...

 
Alexander Fedosov:

Perché fare dei calcoli nel codice?

Non fare calcoli - l'argomento non era intelligente, ed ero interessato a controllare cosa fa l'ottimizzatore, così ho redatto il codice

Potete aggiungerlo al vostro codice in questo modo:

int handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   handle=FileOpen("tst.txt",FILE_READ|FILE_WRITE|FILE_TXT);
   FileSeek(handle,0,SEEK_END);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(handle!=INVALID_HANDLE)
     {
      FileWriteString(handle,DoubleToString(Value1),DoubleToString(Value2)+"\n");
      FileClose(handle);
     }
  }
//+------------------------------------------------------------------+
void OnTick()
  {
  }

cioè basta scrivere i parametri di ottimizzazione nel file, se si blocca, nel file è possibile leggere l'ultimo passaggio quali erano i parametri e il tempo del file sarà il tempo di "ultimo respiro" del tester

 
Artyom Trishkin:

Gli sviluppatori saranno in grado di rispondere in modo univoco, ma stiamo parlando di MetaTrader 4, e non ...

E qui... non cambierà nulla. Usiamo quello che abbiamo.

 

Salve, potete dirmi se il sistema di trading apre una posizione solo all'apertura di una nuova barra oraria in determinate condizioni? Ho bisogno di assicurarmi che se chiudo la posizione usando uno stop loss sulla barra corrente, il trade non si aprirà di nuovo. L'ho implementato in questo modo:

if (OrdersTotal()==0 && ticket!=-1) // nessun lotto aperto ma il ticket esiste

{

se (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // ora di chiusura dell'ordine

datetime tob=iTime(NULL,PERIOD_H1,0); // Tempo di apertura della barra corrente

if (tob>tct) // non permette di aprire un nuovo ordine se il trade ha chiuso sulla stessa barra in cui è stato aperto

{

FUNZIONE PER APRIRE UNA POSIZIONE

}


Nel tester delle strategie, le posizioni riaperte non vengono più aperte, ma quando si fa trading dal vivo, una posizione viene aperta. Puoi dirmi cosa c'è che non va?))

 
kmerlin:

Salve, potete dirmi se il sistema di trading apre una posizione solo all'apertura di una nuova barra oraria in determinate condizioni? Ho bisogno di assicurarmi che se chiudo la posizione usando uno stop loss sulla barra corrente, il trade non si aprirà di nuovo. L'ho implementato in questo modo:

if (OrdersTotal()==0 && ticket!=-1) // nessun lotto aperto ma il ticket esiste

{

se (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // ora di chiusura dell'ordine

datetime tob=iTime(NULL,PERIOD_H1,0); // Tempo di apertura della barra corrente

if (tob>tct) // non permette di aprire un nuovo ordine se il trade è stato chiuso sulla stessa candela che ha aperto

{

FUNZIONE PER APRIRE UNA POSIZIONE

}


Nel tester delle strategie, le posizioni riaperte non vengono più aperte, ma quando si fa trading dal vivo, una posizione viene aperta. Puoi dirmi cosa c'è che non va?)

Lo è?

 
Alexander Fedosov:

Lo è?


non proprio. Cosa c'è che non va nella mia variante? La condizione principale è non essere in grado di rientrare sulla candela oraria corrente! È una condizione abbastanza semplice, cosa c'è che non va e perché non funziona?

 
kmerlin:

non proprio. Cosa c'è di sbagliato nella mia variante? la condizione principale è che non è possibile rientrare sulla candela corrente! È una condizione abbastanza semplice, cosa c'è che non va e perché non funziona?

if (OrdersTotal()==0 && ticket!=-1) // Открытых лотов нет но тикет существует

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // Время закрытия ордера

datetime tob=iTime(NULL,PERIOD_H1,0); // Время открытия бара текущего

if (tob>tct) // Не дает открыть повторный ордер если сделка закрылась на той же свече что и открылась

{

ФУНКЦИЯ ОТКРЫТИЯ ПОЗИЦИИ

}

E quale biglietto ha scelto in OrderSelect?

 
Alexander Fedosov:

Quale biglietto ha selezionato in OrderSelect?

Il biglietto viene inviato per ultimo... Quando un ordine è aperto, non si possono aprire nuovi ordini nel sistema e non si possono piazzare ordini in sospeso. Quindi l'ultimo biglietto è l'ultimo ordine di stop o di profitto.
 
kmerlin:
Il biglietto viene passato all'ultimo ordine. Quando un ordine è aperto, l'apertura di nuovi ordini è impossibile all'interno del sistema, e nemmeno gli ordini in sospeso possono avere luogo. Quindi, l'ultimo biglietto è l'ultimo ordine allo stop o al profitto.

Come si passa il biglietto dell'ultimo ordine?

E OrdersTotal() passa il numero totale di ordini aperti e in sospeso.

Ecco la nuova barra del timeframe corrente.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewBar()
  {
   static datetime prevtime=0;
   if(prevtime==Time[0])
      return(false);
   else
     {
      prevtime=Time[0];
      return(true);
     }
  }
 
Alexander Fedosov:

Come si passa il biglietto dell'ultimo ordine?

E OrdersTotal() passa il numero totale di ordini aperti e in sospeso.

Ecco la nuova barra del timeframe corrente.

Il biglietto è dichiarato come variabile globale. Si passa un biglietto per comprare o vendere. Nel mio sistema non si possono aprire più ordini, si può aprire solo un ordine e non ci possono essere nemmeno quelli in sospeso. Pertanto, l'ultimo ticket, come lo capisco, è un ordine chiuso a profitto o stop.

Ok, la mia testa sta ronzando... domani ripenserò al tuo consiglio