Errori, bug, domande - pagina 3155

 
murziks #:


Puoi dirmi cos'altro può leggere Metatrader al posto del csv?

I file binari possono leggere e scrivere. Variabili, strutture, array. Tutto questo viene scritto su file e riletto.

 

Cari sviluppatori di terminali mobili, per favore, sistemate già la gestione delle e-mail nella scheda "Mail".

Prima dell'ultima build del terminale mobile (Android), quando ci si connette a un account, la scheda "Mail" è piena di e-mail che sono state cancellate molte volte in precedenza.

Non appena mi ricollego all'account, vedo un casino di e-mail precedentemente cancellate e non cancellate nella scheda Mail. Cosa devo fare per liberarmene?

 

Si prega di spiegare cosa cambia nel terminale per il PC "Tools > Settings > Show Trading History", se a qualsiasi valore della casella di controllo è possibile abilitare/disabilitare la visualizzazione della storia di trading attraverso "PCM > Trade History" e "F8 > Show Trading History"?

Cioè, posso disabilitare la visualizzazione della cronologia di trading nelle impostazioni generali del terminale, in modo da non interferire con esso, mentre sarà mostrato su qualsiasi grafico se è abilitato nelle impostazioni del grafico o utilizzando il PCM. Non capisco la logica.

 

Cari sviluppatori del terminale PC. Da molto tempo ormai, quando si lavora con i profili dei grafici (non i modelli, ma solo i profili) c'è una strana logica per cui qualsiasi cambiamento in un profilo provoca automaticamente il suo salvataggio senza un'indicazione manuale.

Errori nella personalizzazione del profilo da parte dell'utente o il fallimento del terminale trasformano uno spazio di lavoro difficile da configurare in una zucca.

Perché non possiamo fare in modo che finché l'utente non salva manualmente il profilo, le modifiche fatte al profilo non verrebbero salvate (lasciare che vengano salvate in un file di profilo temporaneo e non nell'ultimo profilo funzionante)?

Abbiamo aspettato per molti anni i cambiamenti nell'interfaccia integrata a la TradingView, probabilmente non è difficile per voi, ed è molto conveniente per gli utenti.

 

Perché c'è una tale differenza, per esempio un test con la casella di controllo "profitto in pip per accelerare i calcoli" un drawdown del 15%, e senza questa casella di controllo un drawdown del 93%?

Quale risultato è più corretto?

Il numero di scambi è lo stesso

In questo caso, un profitto di 2 sterline nel primo caso e di 20 sterline nel secondo caso con lo stesso lotto.

Così come è visibile se si cambia il lotto è anche una differenza di 10 dollari.

 
Grazie. Non vorrai mica twittare
 
Le criptovalute sono scomparse dai server di MQ. Degrado, tristezza e frustrazione.
 

Errori in Generic/Queueue.

Forum sul trading, sistemi di trading automatico e test di strategia

[POSSIBILE ERRORE] Classe del contenitore CQueue

Loris De Marchi, 2022.02.14 13:00

Ciao a tutti!!!

Ho il sospetto che almeno nei metodi CQueue::Contains(T item) e CQueueue::Remove(T item) ci sia un errore.

La coda è gestita con il classico sistema circolare testa-coda, quindi questo codice deve essere sbagliato:

 //+------------------------------------------------------------------+
//| Removes all values from the CQueue<T>.                           |
//+------------------------------------------------------------------+
template < typename T>
bool CQueue::Contains(T item)
  {
   int count=m_size;
//--- try to find item in array
   while (count--> 0 )
     {
       //--- use default equality function
       if (::Equals(m_array[count],item))
         return ( true );
     }
   return ( false );
  }

Anche la descrizione errata del metodo di cui sopra mi fa pensare che potrebbero essere stati fatti degli errori nella scrittura di questa classe.


Il metodo Remove fallisce chiaramente quando si esegue questo semplice codice, per esempio:

   CQueue< ulong > foo;
   foo.Enqueue( 1 );
   foo.Remove( 1 );
   foo.Enqueue( 2 );
   printf (foo.Contains( 2 ));

Stampa "falso" quando l'elemento è chiaramente nella coda...


Fatemi sapere se questa classe è fissata o se devo usare una delle mie.

Grazie!


 

Salve, sappiamo che gli array in MQL possono essere indicizzati sia in avanti che all'indietro (serie). Ecco perché ho una domanda: qual è il modo migliore per lavorare con gli array in MQL, se è necessaria un'indicizzazione in serie o inversa? La prima variante per ottenere il valore per indice della serie può apparire come segue.

double arrayValue(const double array[], conct int shift) {
  int len = (int)array.Size();
  if (shift < 0 || shift >= len)
    return WRONG_VALUE;
  return array[len - shift - 1];
}

Il secondo modo è usareArraySetAsSeries.

double arrayValue(double &array[], conct int shift) {
  int len = (int)array.Size();
  double ret;
  if (shift < 0 || shift >= len)
    return WRONG_VALUE;
  if (!ArraySetAsSeries(array, true))
    return WRONG_VALUE;
  ret = array[shift];
  ArraySetAsSeries(array, false);
  return ret;
}

Naturalmente, non sto asserendo nulla, ma penso che perché ArraySetAsSeries semplicemente accenda la serie di flag dell'array e quando si accede a un valore per indice si verifica come nel primo esempio.

double arrayValue(const double array[], conct int shift) {
  int len = (int)array.Size();
  if (shift < 0 || shift >= len)
    return WRONG_VALUE;
  return array[len - shift - 1];
}

E questo è più o meno il modo in cui gestisce l'indirizzamento del valore tramite l'indice.

Ha senso includere la serie per gli array nel gestore dell'indicatore OnCalculate ogni volta, o sarebbe meglio affrontare la barra bassa usando la lunghezza degli array rates_total?

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[]) 
{
  Print(price[rates_total-1]); // получение цены на младшем баре без использования серии
  return(rates_total);
}

Questi due metodi sono uguali in velocità o mi sbaglio nel mio ragionamento?

 

Il terminale non restituisce il profitto accumulato delle posizioni chiuse. Puoi dirmi dove potrebbe essere il problema?

double GetClosedPositionsInstrumentProfit(string symbol, datetime from) 
{
   HistorySelect(from, TimeCurrent());

   double profitSum = 0;

      for (int i = HistoryDealsTotal()-1; i >= 0; i--) 
    {   
      ulong ticket = HistoryDealGetTicket(i);
      if (ticket < 0) continue; 
      long magic = HistoryDealGetInteger(ticket, DEAL_MAGIC);
      if (magic != EXPERT_MAGIC) continue; 
      string positionSymbol = HistoryDealGetString(ticket, DEAL_SYMBOL);
      if (symbol != positionSymbol) continue; 
      
      double profit = HistoryDealGetDouble(ticket, DEAL_PROFIT) + HistoryDealGetDouble(ticket, DEAL_SWAP)+ HistoryDealGetDouble(ticket, DEAL_COMMISSION);
      profitSum += profit; 
         
      Print ("Profit " + DoubleToString(profitSum,2));              
    }         
   return profitSum;
}