Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 578

 
PolarSeaman:

Je ne l'ai pas trouvé moi-même. "Assurez-vous simplement de mettre à jour les données dans OnTimer() pour que votre code fonctionne. "

Comment dois-je m'y prendre ?

Avez-vous un programme hors ligne ?

 
Pouvez-vous me dire comment obtenir les indicateurs inférieurs à partir d'une autre trame temporelle que celle sur laquelle la chouette plane ?
 
Galim_V:
Pouvez-vous me dire comment obtenir les indicateurs du bas à partir d'une autre période que celle sur laquelle le hibou plane ?

1. Pourquoi avez-vous accroché l'oiseau ? N'est-ce pas dommage ?

2. Avez-vous déjà ouvert l'aide ? Recevoir des données d'indicateurs dans le conseiller expert à partir de n'importe quel cadre temporel n'est pas un problème du tout, car les deux premiers paramètres des fonctions de réception de données d'indicateurs sont utilisés pour spécifier le symbole et la période du graphique à partir duquel vous voulez recevoir des valeurs.

En effet, même lorsque vous tapez le code dans l'éditeur, la liste des variables formelles de la fonction est ouverte, et une infobulle y indique le symbole et le délai. C'est étrange que vous n'y ayez pas prêté attention.

 
Artyom Trishkin:

Avez-vous un programme hors ligne ?

Non.

 
PolarSeaman:

Non.

Alors pourquoi ce rafraîchissement constant sans nécessité ?

Vous avez besoin de temps ? Vous pouvez obtenir l'heure du dernier tick : TimeCurrent(), ou la dernière heure locale : TimeLocal().

Si vous obtenez l'heure du dernier tic-tac le week-end, le minuteur ne vous aidera pas - l'heure sera le dernier tic-tac du vendredi, ou le dernier tic-tac du dernier jour ouvrable. Et TimeLocal() ne vous donnera pas l'heure du serveur - vous devez la recalculer avec un décalage.

Cependant, je ne sais pas exactement ce que vous voulez obtenir à la fin.

 
Artyom Trishkin:

1. Pourquoi avez-vous accroché l'oiseau ? N'est-ce pas dommage ?

2. Avez-vous déjà ouvert l'aide ? Recevoir des données d'indicateurs dans le conseiller expert à partir de n'importe quel cadre temporel n'est pas un problème du tout, car les deux premiers paramètres des fonctions de réception de données d'indicateurs sont utilisés pour spécifier le symbole et la période du graphique à partir duquel vous souhaitez recevoir des valeurs.

En effet, même lorsque vous tapez le code dans l'éditeur, la liste des variables formelles de la fonction est ouverte, et une infobulle y indique le symbole et le délai. C'est étrange que vous n'y ayez pas prêté attention.

2018.07.04 22:17:38.398 2016.11.10 13:00:00 Arap01 EURUSD,H1 : Arrondissement 44.53781512605145 45.0 Il s'agit de données stochastiques en mode "normal". ie :

2=iStochastic(NULL,0,K,D,ralentissement,méthode_moyenne,champ_prix,MODE_MAIN,2) ;

Je demande ici M5 2=iStochastic(NULL,5,K,D,ralentissant,méthode_moyenne,champ_prix,MODE_MAIN,2) ;

J'obtiens 2018.07.04 22:23:05.680 2016.11.10 13:00:00 Arap01 EURUSD,H1 : Arrondi 0.0 0.0



 
Artyom Trishkin:

Cependant, je ne sais pas exactement ce que vous voulez obtenir.

Alerte, je veux, deux secondes avant la fermeture de la barre. Je ne travaillerai pas pendant le week-end.

 
PolarSeaman:

J'ai donc besoin d'une alerte deux secondes avant que la barre ne se ferme sans tick.

Ce n'est pas facile à faire, vous devez utiliser une minuterie plus précise (au moins 500 ms) et faire préalablement une synchronisation de l'heure locale et de l'heure du serveur.
Je vous en ai déjà parlé :

Au moment de l'arrivée du tick, compter la différence TimeCurrent()-TimeLocal()
(ceci est fait une fois pour synchroniser l'heure locale et l'heure du serveur)

- Il s'agit du décalage par rapport au courtier. Si ce décalage change ultérieurement, l'heure doit être recalculée ;
- au démarrage de l'Expert Advisor (ouà l'apparition de la barreD1) nous recalculons à nouveau tous les temps nécessaires, en heure locale, en tenant compte du décalage;
- Nous attendons ce que nous avons "compté" dans le timer, en vérifiant la désynchronisation, la perte de connexion avec le broker, la traduction des mains locales.

vous pouvez attraper +/- 1 seconde
 
Taras Slobodyanik:

Ce n'est pas facile à faire, vous devez utiliser une minuterie plus précise (au moins 500ms) et pré-synchroniser l'heure locale avec l'heure du serveur.
Je vous en ai déjà parlé :

Vous pouvez attraper +/- 1 seconde

Merci. Comment faire le temps en secondes, avant la fermeture de la barre M5. Pour l'instant, il affiche H1.

#property strict
#property indicator_chart_window
//--- input parameters
#define  MILLISEC_TIMER_INTERVAL         500 
int            timeOffset;
datetime       ServerLocalOffset;
datetime       prevTime,myTime,localtime;
bool           newBar = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   EventSetMillisecondTimer(MILLISEC_TIMER_INTERVAL);
   
  datetime srvtime,tmpOffset;
   RefreshRates();
   srvtime = TimeCurrent();
   // Modified
   localtime = TimeLocal()+TimeGMTOffset();
   if(TimeHour(srvtime)>TimeHour(localtime)){
      // Server Time is still ahead of us
      int newOffset = TimeHour(srvtime)-TimeHour(localtime);
      ServerLocalOffset = (newOffset*60*60);
   }else if(TimeHour(srvtime)<TimeHour(localtime)){
      // Server Time is Behind us
      int newOffset = TimeHour(localtime)-TimeHour(srvtime);
      ServerLocalOffset = (newOffset*60*60);
   }else{
      // No modification required
      ServerLocalOffset = srvtime;
   }
   localtime = TimeLocal()-ServerLocalOffset;
   
   tmpOffset = TimeSeconds(srvtime) - TimeSeconds(localtime);
   if(tmpOffset < 30 && tmpOffset >= 0){
      timeOffset = TimeSeconds(srvtime) - TimeSeconds(localtime);
   }
   return(INIT_SUCCEEDED);
  }
  
void OnDeinit(const int reason)
  {
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
datetime sec;
   datetime localtime;
   localtime = TimeLocal()+(TimeGMTOffset()+(60*60));
 sec=Time[0]-localtime-timeOffset;
 if(sec<=2){Alert("время откр. бара ",Time[0]);}
      Comment(TimeToStr(sec,TIME_SECONDS ));
  }
//+------------------------------------------------------------------+
 
Je n'ai toujours pas trouvé comment compter les secondes jusqu'à la fermeture de la barre sur la période en cours. Aide.
Raison: