Un consigliere senza indicatore, è possibile? - pagina 9

 
Nikolai Semko:

Perché si ottiene una nuova barra sulSeriesInfoInteger?
Per quanto mi ricordo - è una funzione asincrona molto lenta (forse qualcosa è cambiato - non ho controllato).
Di regola, tutte le incoerenze e la lentezza sono una conseguenza dell'uso di funzioni asincrone. Evitateli se possibile.
Cercate di usarli in qualche altro modo. Per esempio tramite iTime o iBars.
E non dimenticate che OnChartEvent stesso è asincrono e non può essere chiamato più di 64 volte al secondo, cioè al massimo una volta ogni 15,625 millisecondi.

nuova barra tramite SERIES_LASTBAR_DATE

E non dimenticate che OnChartEvent stesso è asincrono e non può essere chiamato più di 64 volte al secondo, cioè al massimo una volta ogni 15,625 millisecondi.

come si dice in Cina, non importa quanto sia viola, basta che sia redditizio

 
Dmitry Fedoseev:

che ingenuo...

Dimitri, posso avere un riferimento?

 
Fast235:

nuova barra tramite SERIES_LASTBAR_DATE

SERIES_LASTBAR_DATE è solo l'ID usato nel SeriesInfoInteger.

 
Fast235:

Dimitri, posso avere una raccomandazione?

Che cos'è? Ne ho già dato uno e lo ripeto - se non sai come scrivere gli indicatori, non sostenere che non funzionano correttamente o che l'approccio con gli indicatori in generale è cattivo, sbagliato, irrazionale.

 
Nikolai Semko:

SERIES_LASTBAR_DATE è solo l'identificatore usato nel SeriesInfoInteger.


if(id>=CHARTEVENT_CUSTOM) // Цикл событий по символам
     {
      static CNewBar M1;
      const int number=id-CHARTEVENT_CUSTOM; //приведем в нормальный вид номер символа 0-7
      //--- проверим новый ли бар
      if(M1.NewBar(number,PERIOD_M1))
 
//+------------------------------------------------------------------+
//| Class Новый бар                                                  |
//+------------------------------------------------------------------+
class CNewBar
  {
protected:
   datetime          oldTime[TRADE_SYMBOLS];
public:
   bool              NewBar(int number,ENUM_TIMEFRAMES timeframe)
     {
      //--- создаем переменную newtime(тип время), присваиваем в нее из функции SeriesInfoInteger дату открытия последнего бара
      datetime newTime=datetime(SeriesInfoInteger(Symbols[number],timeframe,SERIES_LASTBAR_DATE));
      if(newTime!=oldTime[number] && newTime) // проверка на появление нового бара (новое время не равно старому и в newtime есть значение(true))
        {
         oldTime[number]=newTime; //обновим время прошлого бара
         return(true); // вернем функции NewBar true, появился новый бар
         //if(MQLInfoInteger(MQL_DEBUG))
         //   Print("Новый бар",newTime,"старый бар",oldTime); // в режиме отладки, будет выводится сообщение о значениях времен баров
        }
      //--- иначе,
      return(false); // нового бара еще нет
     };
   //---- конструктор класса
//                     CNewBar() {oldTime=NULL;}; // вызывается при создании Объекта, проинициализация тут не нужна, что-бы сразу прошел новый бар
  };
 
Questa è la NewBar - il che significa che non viene fatto più di un tentativo.
 
Dmitry Fedoseev:
Questa NewBar significa che non c'è più di un tentativo.

non è chiaro cosa si intende per

Come potete vedere, il numero del carattere è correttamente passato alla nuova classe della barra e viene correttamente gestito lì
 
Fast235:


if(id>=CHARTEVENT_CUSTOM) // Цикл событий по символам


Che cos'è questo? Cosa potrebbe mai avere a che fare con un indicatore normale? Ti stai inventando le cose invece di leggere gli articoli e imparare a fare le cose correttamente. Ecco perché è così ingenuo: gli indicatori "non funzionano bene". Così creativo come tutti gli altri.

 
Fast235:

non è chiaro cosa si intende per

E non lo farai. NewBar è una diagnosi.