Erreurs, bugs, questions - page 1803

 
Slawa:
Cela s'applique également aux indicateurs. Créez une minuterie d'une minute et demandez le nombre de barres de toutes les séries temporelles qui vous intéressent.

En vérifiant le fait que le timing n'est pas retenu.
Il serait bon d'ajouter cela à la documentation...
 
Si vous ne laissez que les symboles MOEX dans le Market Watch sur Metaquotes-Demo, TimeCurrent sera en retard de 15 minutes. Dès qu'un seul symbole FOREX est ajouté, TimeCurrent avance de 15 minutes d'un coup.
 

Chers développeurs ! Encore une fois je demande d'ajouter le temps en ms pour les valeurs de sentiment(SYMBOL_SESSION_...) et tumbler( OnBookEvent()) dès que possible. Donnez une chance de faire la synchronisation de toutes les données disponibles !

 

Metaquotes-Demo, symbole DIG-20170330

SymbolInfoDouble(Symb,::SYMBOL_ASK) = 29006.0
SymbolInfoDouble(Symb,SYMBOL_SESSION_PRICE_LIMIT_MIN) = 29528.0
(ENUM_SYMBOL_TRADE_MODE)SymbolInfoInteger(Symb,SYMBOL_TRADE_MODE) = SYMBOL_TRADE_MODE_FULL (4)

Erreur dans SYMBOL_SESSION_PRICE_LIMIT_MIN : above Asc - no BuyLimit can be set.

 
fxsaber:

Veuillez partager votre vélo : une fonction bool qui vous indique si un symbole est prêt à être négocié ou non.

ENUM_DAY_OF_WEEK GetDayOfWeek( const datetime time )
{
  MqlDateTime sTime = {0};

  TimeToStruct(time, sTime);
  
  return((ENUM_DAY_OF_WEEK)sTime.day_of_week);
}

// true - находимся в торговой сессии
bool SessionTrade( string Symb = NULL )
{  
  datetime TimeNow = TimeTradeServer();
  
  const ENUM_DAY_OF_WEEK DayOfWeek = GetDayOfWeek(TimeNow);
  
  TimeNow %= 24 * 60 * 60;
  
  if ((Symb == NULL) || (Symb == ""))
    Symb = Symbol();  
  
  bool Res = false;
  datetime From, To;    

  for (int i = 0; SymbolInfoSessionTrade(Symb, DayOfWeek, i, From, To) && (!Res); i++)
    Res = ((From <= TimeNow) && (TimeNow < To));
    
  return(Res);
}

// Возвращает true, если символ торгуемый. Иначе - false.
bool SymbolTrade( string Symb = NULL, const int Pause = -1 )
{
  MqlTick Tick;
  
  if ((Symb == NULL) || (Symb == ""))
    Symb = Symbol();
    
  if (Pause >= 0)
    Sleep(Pause); // Если только что произошло добавление символа в Обзор рынка, нужно дождаться поступления данных в Marketwatch.
  
  return(SymbolInfoTick(Symb, Tick) ? ((Tick.bid != 0) && (Tick.ask != 0) && SessionTrade(Symb) &&
         ((ENUM_SYMBOL_TRADE_MODE)SymbolInfoInteger(Symb, SYMBOL_TRADE_MODE) == SYMBOL_TRADE_MODE_FULL)) : false);
}
 
fxsaber:
   
  if (Pause >= 0)
    Sleep(Pause); // Если только что произошло добавление символа в Обзор рынка, нужно дождаться поступления данных в Marketwatch.
   
Et si c'est dans l'indicateur ?
 
Artyom Trishkin:
Et si c'est dans un indicateur ?
D'où les jambes

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Bugs, bugs, questions

fxsaber, 2017.02.14 12:31

Immédiatement après SymbolSelect(true) je demande les prix et ils sont zéro. Avec _LastError == 0, SymbolInfoTick == true.

Comment puis-je savoir que les prix des nouveaux symboles pour Marketwatch ont été livrés à Marketwatch ?

Donc, si SymbolSelect(true) n'a pas été fait, et que nous n'avons pas activé Pause spécifiquement, alors il n'y aura pas de glissement.
 
fxsaber:
D'où les jambes.
Ainsi, si SymbolSelect(true) n'est pas fait et que vous ne définissez pas spécifiquement Pause, il n'y aura pas de glissement.
Honnêtement, je ne comprends pas. Je me demandais : comment savoir si un symbole est prêt dans un indicateur ? Sleep( ) ne fonctionne pas dans les indicateurs.
Si l'indicateur trace certaines données statistiques sur des symboles qui ne sont pas connus à l'avance, lorsque vous sélectionnez le symbole suivant dans le panel, il arrive souvent que vous ne puissiez pas obtenir les données le concernant immédiatement, et le tableau contiendra de fausses informations... Comment puis-je être sûr que les données reçues du symbole sont correctes et en quantité suffisante pour obtenir d'autres calculs corrects ?
 
Artyom Trishkin:
Honnêtement, je ne comprends pas. Je me demandais : comment savoir si un symbole est prêt dans un indicateur ? Sleep() ne fonctionne pas dans les indicateurs.
Si l'indicateur affiche dans le tableau certaines données statistiques sur des symboles qui ne sont pas connus à l'avance, alors lorsque vous sélectionnez le symbole suivant dans le panneau, il arrive souvent que vous ne puissiez pas obtenir immédiatement les données le concernant, et le tableau affiche de fausses informations... Comment puis-je être sûr, pour d'autres calculs, que les données obtenues à partir du symbole sont correctes, et en quantité suffisante pour obtenir d'autres calculs corrects ?
Lesommeil n'est nécessaire que lorsque le symbole n'est pas dans le Market Watch. Pour tous les symboles qui sont dans le Market Watch avant (et pendant) le début de l'indicateur, aucun glissement n'est nécessaire.
 
Les commentaires non liés à ce sujet ont été déplacés vers "Toutes les questions des débutants sur MQL4, aide et discussion sur les algorithmes et les codes".
Raison: