FORTI Si prega di aiutare - pagina 5

 

Qualcuno sta mentendo, o Michael non accetta le obiezioni del supporto tecnico, o il supporto tecnico non vuole riconoscere il problema.

Mikalas 2015.03.26 00:44  RU

Ancora una volta servicedexk non può riprodurre l'errore!


alexvd2015.03.26 15:16

Anche il codice sbagliato nel primo post.

 
MigVRN:

Diventiamo amici :)

Ma non immediatamente - ma quando il carico ha successo.

Il tuo codice mostra che la funzione OnInit è inutile, o gli sviluppatori hanno sbagliato.

 
Mikalas:

Sì, beh, e se davvero non ci fossero dati?

Che cosa allora? Un ciclo, con quante iterazioni?

Non ci sono ricette specifiche qui...

Non mi piacciono affatto gli indicatori... Questa è l'unica ragione:

Nello stesso thread con gli indicatori, le altre operazioni vengono eseguite in modo sequenziale per quel simbolo - l'elaborazione dei tick e la sincronizzazione della storia. Significa che se un'azione infinita viene eseguita in un indicatore, tutti gli altri eventi per quel simbolo non saranno mai eseguiti.

Possono far rallentare la chat e tutto il resto. Pertanto, li uso senza richieste di preventivi per le chat vicine e come fornitore di eventi personalizzati. In generale, lavorate solo con ciò che è arrivato in OnCalculate().

Serj_Che:

Nel tuo codice si vede che la funzione OnInit è inutile, o gli sviluppatori hanno fatto casino.

Questo è il tuo codice - ci ho solo incollato quello che ha dettoalexvd. Non ho capito perché significa chela funzione OnInit è inutile.

 
alexvd:
Nel tuo codice, devi solo cancellare l'errore nella variabile globale is_failed subito dopo ResetLastError(). Altrimenti, una volta che avete preso un errore, riceverete un messaggio su di esso

Bingo! Ci sei quasi). C'è un motivo per cui si dice "fidati ma verifica". Il testo finale è qui sotto.

#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//
bool is_failed = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
  SymbolSelect( "MIX-6.15", true );
  SymbolSelect( "RTS-6.15", true );
  SymbolSelect( "Si-6.15", true );
//---  
  ResetLastError();
//---  
  int total_bars = Bars( "MIX-6.15", PERIOD_M1 );
  if ( total_bars > 0 )
  {
    total_bars = Bars( "RTS-6.15", PERIOD_M1 );
    if ( total_bars > 0 )
    {
      total_bars = Bars( "Si-6.15", PERIOD_M1 );
      {
        if ( total_bars > 0 )
        {
           is_failed = false;
           Print( "Init OK." );
        }
        else
        {
          is_failed = true;
          Print( "Get Bars failed Si-6.15 Last error = ", string(GetLastError() ) );
        }
      }
    }
    else
    {
      is_failed = true;
      Print( "Get Bars failed RTS-6.15 Last error = ", string(GetLastError() ) );
    }
  }
  else
  {
    is_failed = true;
    Print( "Get Bars failed MIX-6.15 Last error = ", string(GetLastError() ) );
  } 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
  ResetLastError();
//---  
 int total_bars = Bars( "MIX-6.15", PERIOD_M1 );
  if ( total_bars > 0 )
  {
    total_bars = Bars( "RTS-6.15", PERIOD_M1 );
    if ( total_bars > 0 )
    {
      total_bars = Bars( "Si-6.15", PERIOD_M1 );
      {
        if ( total_bars > 0 )
        {
          Print( "Init OK." );
          is_failed = false;
        }
        else
        {
          is_failed = true;
          Print( "Get Bars failed Si-6.15 Last error = ", string(GetLastError() ) );
        }
      }
    }
    else
    {
      is_failed = true;
      Print( "Get Bars failed RTS-6.15 Last error = ", string(GetLastError() ) );
    }
  }
  else
  {
    is_failed = true;
    Print( "Get Bars failed MIX-6.15 Last error = ", string(GetLastError() ) );
  } 
//---
   if ( is_failed )
   {
     Print( "Sorry! Get Bars failed." );
   }
   else Print( "Bingo! We done.");
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
MigVRN:

Non ci sono ricette specifiche qui...

Non mi piacciono affatto gli indicatori... Questa è l'unica ragione:

Nello stesso thread con gli indicatori vengono eseguite in modo sequenziale altre azioni riguardanti il simbolo - l'elaborazione dei tick e la sincronizzazione della storia. Significa che se un'azione infinita viene eseguita nell'indicatore, tutti gli altri eventi per questo simbolo non saranno mai eseguiti.

Possono far rallentare la chat e tutto il resto. Pertanto, li uso senza richieste di preventivi dalle chat vicine e come fornitore di eventi personalizzati. In generale, lavorate solo con ciò che è arrivato in OnCalculate().

Questo è il tuo codice - ho messo solo quello che ha menzionatoalexvd. Non capisco perché ne consegue chela funzione OnInit è inutile.

Che codice è il mio? Non ho pubblicato alcun codice qui.

Gli indicatori non rallenteranno tutto il resto. Il punto è che tutto è fuori sincrono in MT5, gli indicatori lavorano nei loro fili e gli EAs nei loro. Il vetro è da solo.

Anche a me non piacciono gli indicatori, ma devo usarli di tanto in tanto.

 
Dima_S:

Bingo! Ci sei quasi). Si dice "fidati ma verifica" per un motivo. Il testo finale è qui sotto.

Perché ripetete in OnCalculate ciò che era in OnInit? È un tale incantesimo?).
 
Serj_Che:

Qual è il mio codice? Non ho pubblicato nessun codice qui.

OH... Scusa, mi sono confuso con Dima_S.

Serj_Che:

Non rallenterò tutto il resto a causa degli indicatori. Il fatto è che tutto è fuori sincrono in MT5, gli indicatori lavorano nel loro filo e gli EAs nel loro. Il vetro è da solo.

Anche a me non piacciono gli indicatori, ma devo usarli di tanto in tanto.

Gli indicatori funzionano nei loro fili... Ma la chat funziona in questo flusso. Se qualcosa va storto in un indicatore (un ciclo eterno inOnCalculate()) l'Expert Advisor che lavora nel suo "proprio" flusso - non vedrà nulla dalla chat...

 
MigVRN:

OOO... Scusa, mi sono confuso con Dima_S.

Gli indicatori corrono nel loro filo... Solo la chat funziona nello stesso thread. E se qualcosa va storto in un indicatore (un ciclo eterno inOnCalculate()) l'Expert Advisor che gira nel "suo" thread non vedrà nulla di quella chat...

Dubito, sono ancora più propenso a pensare che non sia così, l'Expert Advisor dovrebbe funzionare da solo. Io non ho avuto problemi di questo tipo, ma se vuoi, puoi controllare questo estremo.

 
Serj_Che:

Ne dubito, sono ancora più propenso a pensare che non lo sia, l'EA dovrebbe funzionare da solo. Non ci sono stati violini di questo tipo nello specifico, ma si può verificare un tale estremo se si vuole.

Vi illustrerò il codice di controllo. Lo controllerò tra 2-3 ore. Ma il fatto che se l'indicatore 1 della chat "rallenta", allora gli altri rallentano con lui - è un fatto che ho sperimentato ripetutamente.
 
MigVRN:
Abbozzo un po' di codice di prova. In circa 2-3 ore. Ma se 1 indicatore della chat "rallenta" allora gli altri rallentano con lui - è un fatto che ho affrontato più di una volta.

OK, interessante!

Gli indicatori lavorano nel proprio thread, gli EA nel proprio thread. A meno che, ovviamente, non si tratti di una pietra a nucleo unico.