Quando ha senso mantenere parte del codice del robot in un indicatore? - pagina 23

 
Vinin:

Il valore EMA all'interruzione della comunicazione è preso in modo errato. Viene presa come l'ultima calcolata. Ma questo non è corretto. Di conseguenza, la funzione non funzionerà correttamente non su n barre ma su un numero molto più grande di barre. Se i valori sono salvati, ovviamente

A quanto pare non sono entrati nel codice. Commentato:

// Комментирую для такого случая. Крайний известный M1-бар был в 14:00.
// Произошел разрыв связи на 10 минут после чего происходит вызов start.
void start()
{
  EMA = GetEMA();
  
  return;  
}

double GetEMA()
{
  static int PrevTime = 0;
  
  if (PrevTime == Time[0]) // Выпонится, когда история за крайние 10 минут подгрузится.
                           // Если истории не было, например, сутки, то может произойти ошибка.
                           // Но мы говорим про РЕАЛ, т.е. адекватность человека.
                           // Т.к. если нет связи сутки, советник оставлять нельзя.
    return(EMA);

  int i = iBarShift(Symbol(), Period(), PrevTime) - 1; // Здесь мы получим номер бара в 14:01.

  PrevTime = Time[0]; // запомним текущее время 14:10
  
// Производим расчет текущего EMA с учетом полученных 10 баров.
  while (i >= 0)
  {
    EMA = EMA * Alpha + (1 - Alpha) * GetPrice(i);
    
    i--;
  }
  
  return(EMA);
} 
 
Quando ho detto errore e adeguatezza, non intendevo dire che questo vale solo per il caso "tutto in uno", ma anche per il caso "con indicatore".
 
hrenfx:
Quando ho detto errore e adeguatezza, intendevo l'applicabilità di questo non solo al caso "tutto in uno", ma anche al caso "con indicatore".


La conversazione non funziona, apparentemente qualcuno non vuole sentire una piccola critica.

Possiamo concludere che questo ramo è inutile

 
Vinin:


Non sto facendo una conversazione, apparentemente qualcuno non vuole sentire una piccola critica.

Si potrebbe concludere che questo thread è inutile

Non c'è bisogno di cavillare. Ho anche commentato il tuo codice. Cosa c'è che non va? Pensi che l'esempio di un intervallo di 10 minuti causi un errore? Sono stato molto chiaro. Stai dicendo che c'è un errore, quindi vedi dove si trova. Allora non essere pigro, mostrami dov'è. Lo avete già identificato.

P.S. Sei la seconda persona che prende tempo. E non dire che non capisco. Mostrami chiaramente dov'è l'errore. Se mi sbaglio, lo ammetto. Non mi servirà a niente.

 
hrenfx:

Senti, non c'è bisogno di essere evasivi. Ho anche commentato il tuo codice. Cosa c'è che non va? Credi che l'esempio del divario di 10 minuti che ti ho dato provochi un errore? Sono stato molto specifico da parte mia. Stai dicendo che c'è un errore, quindi vedi dove si trova. Allora non essere pigro, mostrami dov'è. Lo avete già identificato.

P.S. Sei la seconda persona che prende tempo. E non dire che non capisco. Mostrami chiaramente dov'è l'errore. Se mi sbaglio, lo ammetto. Non mi servirà a niente.


Qualcuno non vuole pensare. Non posso farli e non voglio.
 
Vinin:

Solo qualcuno non vuole pensare. Non posso obbligarli e non voglio farlo.


Cazzo, nessuno ha elaborato. Ancora acqua. Diverse persone (conosco molto bene MT4+MQL4) mi dicono che il mio codice funziona con un errore ma non posso dare un esempio-argomento specifico (l'ho chiesto più volte). E questo in un codice di sole 10 righe.

Perché non metti il codice Integer e il mio codice in un thread separato e chiedi ai programmatori di MQL4 cosa c'è di sbagliato nel codice. E come moderatore, assicurati che non ci siano allagamenti. In questo caso, il codice non può nemmeno essere trovato.

Penso che sarà utile per la comunità MQL4.

 
hrenfx:

Non c'è bisogno di cavillare. Ho anche commentato il codice. Cosa c'è che non va?

Il prezzo verrà prima. Poi arriveranno le barre. Quando le barre arrivano, saranno state 'più o meno' lavorate, ma in realtà sono irreperibili perché non erano presenti quando sono state lavorate.

Questa è la seconda volta che lo dico.

 
TheXpert:

Il prezzo verrà prima. Poi arriveranno le sbarre. Quando le barre arrivano, saranno "più o meno" elaborate, ma in realtà non saranno considerate perché non erano disponibili al momento dell'elaborazione.

Sì, il prezzo arriverà per primo, ma la condizione if (PrevTime == Time[0]) sarà innescata per tutto il tempo finché non ci sarà una nuova barra

Capite che se arriva una nuova barra, senza alcuna paginazione per gli ultimi 10 minuti, l'EA con l'indicatore riceverà valori EMA sbagliati prima della paginazione della storia. Di conseguenza, l'EA farà qualsiasi cosa.
 
hrenfx:


Cavolo, nessuno ha elaborato la questione. Ancora acqua. Diverse persone (MT4+MQL4 lo sanno molto bene) mi dicono che il mio codice funziona con errori ma non possono dare un esempio-argomento specifico (l'ho chiesto diverse volte). E questo in un codice di sole 10 righe.

Perché non metti il codice Integer e il mio codice in un thread separato e chiedi ai programmatori di MQL4 cosa c'è di sbagliato nel codice. E tu, come moderatore, assicurati che non ci sia un allagamento. In questo caso, il codice non si trova nemmeno.

Penso che sarà utile per la comunità MQL4.


Ho fornito la logica per un algoritmo funzionante. Non ha funzionato. Mi dispiace di non essere passato.
 
hrenfx:
Sì, il prezzo verrà prima, ma finché non c'è una nuova barra, la condizione if (PrevTime == Time[0]) verrà attivata sempre.
No, il prezzo sarà su una nuova barra. Questo può essere visto chiaramente quando il terminale è acceso. All'inizio la barra sembra un punto.
Motivazione: