Questions des débutants MQL5 MT5 MetaTrader 5 - page 1363

 
Mikhail Toptunov #:

Pouvez-vous me dire comment organiser un analogue du calcul de prev_calculé, je n'arrive pas à le comprendre. J'ai du mal à naviguer dans les classes.


BarsCalculated-1?
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CNewBar::PrevCalculated(void)
  {
   int pc=(int)(this.RatesTotal()-this.m_rt);
   return(pc);
  }
//+------------------------------------------------------------------+
//| CNewBar IsNewBar Основная функция класса                         |
//+------------------------------------------------------------------+
bool CNewBar::IsNewBar(void)
  {
   datetime tm=this.Time();
   Print("this.m_time ",this.m_time," tm ",tm," this.m_pc ",this.m_pc," this.m_rt ",this.m_rt);
   if(tm==0)
      return false;
   if(tm!=this.m_time)
     {
      //--- определяем время
      this.m_time=tm;
      //--- определяем кол-во
      this.m_pc=this.PrevCalculated();
      this.m_rt=(int)this.RatesTotal();
      return true;
     }
   this.m_pc=(int)this.m_rt;
   return false;
  }

C'est ainsi que j'ai procédé, si vous pouvez suggérer une méthode plus judicieuse, ce serait formidable !!!

 
Fast235 #:

C'est plus gourmand en ressources pour le système, mais plus efficace que ce que je faisais, je pense, en termes de durabilité.

 
Mikhail Toptunov #:

C'est comme ça que j'ai fait, si vous pouvez suggérer une méthode plus judicieuse, ce serait merveilleux ! !!

Conneries, la logique est cassée. Le texte ci-dessous est plus correct.




class CNewBar : public CObject
  {
private:
   string            m_symbol;
   ENUM_TIMEFRAMES   m_timeframe;
   datetime          m_time;
   int               m_rt;
   int               m_pc;
   datetime          Time(void);
   int               PrevCalculated(void);
   int               RatesTotal(void);
   string            Symbol(void)         { return this.m_symbol;    }
public:
   ENUM_TIMEFRAMES   Timeframe(void)      { return this.m_timeframe; }
   datetime          GetTime(void)        { return this.m_time;      } //  Возвращает время последнего обращения
   int               GetRatesTotal(void)  { return this.m_rt;        }
   int               GetPrevCalculated(void) {return this.m_pc;       }
   bool              IsNewBar(void);                                   //  Основная функция класса
                     CNewBar(const string symbol,const ENUM_TIMEFRAMES timeframe);
                    ~CNewBar(void) {;}
  };
//+------------------------------------------------------------------+
//| Кол-во отработанных                                              |
//+------------------------------------------------------------------+
int CNewBar::PrevCalculated(void)
  {
  int _rt=this.RatesTotal();
  int rt=_rt-(_rt-this.m_rt);
   return(rt < 0 ? 0 : rt);
  }
//+------------------------------------------------------------------+
//| CNewBar IsNewBar Основная функция класса                         |
//+------------------------------------------------------------------+
bool CNewBar::IsNewBar(void)
  {
   datetime tm=this.Time();
   int      rt=this.RatesTotal();
   if(tm==0)
      return false;
   if(tm!=this.m_time)
     {
      //--- определяем время
      this.m_time=tm;
      //--- определяем кол-во
      this.m_pc=this.PrevCalculated();
      this.m_rt=rt;
      return true;
     }
     this.m_pc=rt<0 ? 0 : rt;
   return false;
  }

Mais voici pourquoi les valeurs sont nulles au démarrage, marquées par une barre jaune.

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   for(int i=1; i<2; i++)
     {
      ENUM_TIMEFRAMES n_period=(ENUM_TIMEFRAMES)GetPeriodEnumerator((uchar)i);
      CNewBar *nb = new CNewBar(Symbol(), n_period);
      if(nb==NULL)
         continue;
      if(!list_new_bar.Add(nb))
        {
         delete nb;
         continue;
        }
      Print(nb.IsNewBar(), " ***** ", Symbol(), " ***** ", nb.Timeframe()," RatesTotal ",nb.GetRatesTotal()," Calculated ",nb.GetPrevCalculated());
     }
//--- create timer
   EventSetTimer(1);

//---
   return(INIT_SUCCEEDED);
  }
 
Mikhail Toptunov #:

La logique des conneries est cassée. Le texte suivant est plus correct.

Mais voici pourquoi les valeurs sont nulles au démarrage, marquées par une barre jaune.

Vous êtes juste le nouveau bar ?

 
Fast235 #:

Vous êtes juste le nouveau bar ?

J'ai besoin des paramètres pour mettre en œuvre la stratégie

RatesTotal
PrevCalculated

Et le nouveau bar est comme un bonus avec la possibilité de passer en revue toutes les TF.

J'ai également besoin de calculer le prix de chaque barre.

//+------------------------------------------------------------------+
//| Расчет цены                                                      |
//+------------------------------------------------------------------+
int CNewBar::PriceHL2(void)
  {
   int res=ArrayResize(this.m_pr_hl2,this.m_rt);
   for(int b=this.m_pc; b<this.m_rt; b++)
      m_pr_hl2[b]=MathAbs((iHigh(this.m_symbol,this.m_timeframe,b) + iLow(this.m_symbol,this.m_timeframe,b))/2);
   return(res);
  }

Je ne peux pas extraire le tableau du conseiller expert, bien que les valeurs apparaissent pendant le débogage.



Comment le remplir correctement dans un conseiller expert ? J'en ai besoin pour le calcul.


 
Bonjour à tous, pouvez-vous me dire quelle est la différence entre un robot de trading et un conseiller en trading ?
 
Daniil Osipov #:
Bonjour à tous, pouvez-vous me dire quelle est la différence entre un robot de trading et un conseiller en trading ?

Un jeu de mots.

 
Comment un indicateur peut-il connaître le numéro de sa sous-fenêtre ?
Par exemple, pour écrire ou dessiner quelque chose dans sa sous-fenêtre.
Je n'ai pas trouvé de fonction explicite comme "IndicatorGetInteger".
 
Evgeny Dyuka #:
Comment un indicateur peut-il connaître le numéro de sa sous-fenêtre ?
Par exemple, pour écrire ou dessiner quelque chose dans sa sous-fenêtre.
Je n'ai pas trouvé de fonction explicite comme "IndicatorGetInteger".
ChartWindowFind
Документация по MQL5: Операции с графиками / ChartWindowFind
Документация по MQL5: Операции с графиками / ChartWindowFind
  • www.mql5.com
ChartWindowFind - Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5