Per favore, spiegate cosa potrebbe esserci di sbagliato in questa funzione? - pagina 5

 
Karputov Vladimir:
Faresti meglio a dirci cosa ti ha consigliato il servizio assistenza - hai continuato a parlare con loro lì, vero?
Per qualche ragione non busso a una porta chiusa più di tre volte. Nessuna risposta ai miei tre commenti... E perché gridare nel vuoto?
 
Alexey Viktorov:
Per qualche ragione non busso a una porta chiusa più di tre volte. Non una sola risposta ai miei tre commenti... E perché gridare nel vuoto?

CopyRates() su ogni tick, in esecuzione su M15 supporterà la cache storica per periodo (timeframe) non nativo (H1 e D1).

Ed è anche possibile, invece di copiare le serie tramite CopyRates(), richiedere semplicemente

SIMBOLO_TIME

Tempo dell'ultima citazione

datetime

e usare questo tempo per determinare se è un nuovo giorno o una nuova ora... In questo caso, invece di copiare la serie, si fa semplicemente il polling del terminale e si esegue una semplice analisi temporale. Puoi anche usare unSymbolInfoTick più informativo.

 
Karputov Vladimir:

CopyRates() in ogni tick, in esecuzione su M15 supporterà la cache storica per periodo non nativo (timeframe) (H1 e D1).

Ed è anche possibile, invece di copiare le serie tramite CopyRates(), richiedere semplicemente

SIMBOLO_TIME

Tempo dell'ultima citazione

datetime

e usare questo tempo per determinare se è un nuovo giorno o una nuova ora... In questo caso, invece di copiare la serie, si fa semplicemente il polling del terminale e si esegue una semplice analisi temporale. Potete anche usare il più informativoSymbolInfoTick.

Vladimir, la domanda sul sobbalzo non era casuale. In quell'EA in cui sono stati trovati tali problemi, CopyRates() è chiamato ad ogni tick, quindi la teoria dello story jerking equivale a far sobbalzare il gatto per il suo posto causale... Non per essere scortese...

E anche adesso, quando avete capito che il problema esiste, l'applicazione che ignora in SD continua ostinatamente. Non mi interessa molto, una soluzione è stata trovata e posso abituarmi ad altri problemi e prendere in considerazione la stupidità di alcune funzioni, ma il mio desiderio di informare la CA su eventuali problemi si avvicina rapidamente allo zero.

Sto scrivendo ora da un altro computer, niente codice, ma potete controllare voi stessi... Quante barre giornaliere pensi che ci siano tra il 27.06.2016 00:00:00 e il 27.06.2016 00:00:00?

Pensi che zero??? Ti sbagli, controlla con Bars() Stupidità, ma si può solo tenerne conto se necessario, e quando pensano di aggiustarlo... Bene, sistemeremo il nostro codice...

 
Alexey Viktorov:

Vladimir, la domanda sulla masturbazione non era casuale. In quell'EA, in cui sono stati riscontrati tali problemi, CopyRates() viene chiamato ad ogni tick, quindi la teoria dello story twitching equivale a far sobbalzare il gatto per il posto causale... Non pensare che sia scortese...

E anche adesso, quando si è capito che c'è un problema, l'ignorare l'applicazione nella SD continua ostinatamente. Non mi interessa molto, la soluzione si trova, ci si può abituare ad altri problemi e tenere a mente la stupidità di certe funzioni, ma la voglia di segnalare qualsiasi problema alla CA si avvicina rapidamente allo zero.

Sto scrivendo ora da un altro computer, niente codice, ma potete controllare voi stessi... Quante barre giornaliere pensi che ci siano tra il 27.06.2016 00:00:00 e il 27.06.2016 00:00:00??

Pensi che zero?? sbagliato, controlla con Bars() Stupido, ma puoi solo tenerne conto se necessario, e quando ti viene l'idea di sistemarlo... Bene, sistemeremo il nostro codice...

Non c'è bisogno di inventare - hai fornito un EA SENZACopyRates().
 
Karputov Vladimir:
Non c'è bisogno di inventare le cose - hai fornito un EA SENZA CopyRates().
Ho dato il codice quando non si parlava di scatti. Ripeto, sto scrivendo da un computer dove non ho codice e ho installato MT5, quindi per favore fate voi stessi delle modifiche, non nella funzione di determinazione di una nuova barra, ma prima della sua chiamata nel codice principale OnTick(). e ripetete l'esperimento.
 
Alexey Viktorov:
Ho dato il codice quando non si parlava di scatti. Ripeto, sto scrivendo dal mio PC dove non ho codice e MT5 è stato installato, per questo ti chiedo di fare tu stesso delle modifiche non nella funzione che definisce una nuova barra ma prima della sua chiamata nel codice principale OnTick() e riprovare l'esperimento.

Se c'è un codice, c'è un giudizio. Se non c'è un codice, allora tutto va in modalità fondi di caffè. Se sei al computer, componi un codice con le mie raccomandazioni

Forum sul trading, sistemi di trading automatico e tester di strategie

Ho solo una configurazione e devo scambiare Expert Advisor.

Karputov Vladimir, 2016.06.27 13:36

***

Oppure potete usare CopyRates() invece di copiare le serie, potete semplicemente richiedere

SIMBOLO_TIME

Tempo dell'ultima citazione

datetime

e usare questo tempo per determinare se è un nuovo giorno o una nuova ora... In questo caso, invece di copiare la serie, si fa semplicemente il polling del terminale e si esegue una semplice analisi temporale. Puoi anche usare unSymbolInfoTick più informativo.


e controllare da soli.

 

È più o meno così

datetime oldDay, oldHour;
MqlDateTime mqlDateTime;
MqlRates    mqlRates;
/*******************Expert initialization function*******************/
int OnInit()
{
   return(INIT_SUCCEEDED);
}/*******************************************************************/

/************************Expert tick function************************/
void OnTick()
{
  bool newDay, newHour;
   TimeToStruct(TimeCurrent(), mqlDateTime);
   CopyRates(_Symbol, PERIOD_H1, 0, 1 mqlRates);
    if((int)mqlDateTime.hour == 0)
     {
      newDay = IsNewBar(_Symbol, PERIOD_D1, oldDay);
   if(newDay)
    Print("***** newDay ", newDay, " mqlDateTime.hour ", mqlDateTime.hour); // Судя по распечатке newDay = true
       newHour = IsNewBar(_Symbol, PERIOD_H1, oldHour); // А это совсем другая переменная
    if(newHour)
     Print("***** newHour ", newHour); // Судя по распечатке newHour = true
        if(newDay && newHour) // A ЭТО УСЛОВИЕ НЕ ВЫПОЛНЕНО НЕСМОТРЯ НА ПРЕДЫДУЩИЕ РАСПЕЧАТКИ.
         {
          Print("Ордер должен откыться. ");
         }
     }
}/*******************************************************************/

/*****************Определение появления нового бара******************/
bool IsNewBar(string symbol, ENUM_TIMEFRAMES timeframe, datetime &m_tOld)
 {
  datetime tNew = (datetime)SeriesInfoInteger(symbol, timeframe, SERIES_LASTBAR_DATE);
   if(tNew > m_tOld)
    {
     m_tOld = tNew;
     return(true);
    }
   return(false);
 }
/********************************************************************/

/******************Expert deinitialization function******************/
void OnDeinit(const int reason)
{
 Comment("");
}/*******************************************************************/
 
Alexey Viktorov:

È più o meno così

Dove sono i controlli di risposta di CopyRates()?
 
Karputov Vladimir:

Se c'è un codice, c'è un giudizio. Se non c'è un codice, allora tutto va in modalità fondi di caffè. Se sei al computer, componi un codice con le mie raccomandazioni


e controllate voi stessi.

Sì, beh... Presunzione di innocenza in azione...

Ne ho bisogno? Ci sono dei bug nel programma MQ. Posso aggirarli da solo o con i vostri consigli, ma gli errori e le assurdità del software MQ saranno sempre errori e assurdità.

Non sarò al computer fino a venerdì prossimo. E il gatto che sobbalza è già stato testato. E non fa differenza se lo si tira con la mano destra o con la sinistra... Gli errori sono errori, la stupidità è stupidità.

 
Karputov Vladimir:
Dove sono i controlli di risposta di CopyRates()?
Capisco che il vostro interesse a confermare l'errore è zero. Ecco perché non puoi fare nulla da solo... E non devo, non ho intenzione di dimostrartelo. Cosa ci guadagno? Niente...