Comment ouvrir correctement un ordre au marché ? - page 7

 
prostotrader:

Au fait, il est étrange que vous appeliez Sleep() depuis un indicateur, car c'est interdit :

La fonction Sleep() ne peut pas être appelée par des indicateurs personnalisés, car les indicateurs sont exécutés dans le thread de l'interface et ne doivent pas le ralentir. La fonction intègre une vérification de l'état du drapeau d'arrêt de l'expert toutes les 0,1 seconde.


 
Alexey Kozitsyn:

A propos, il est étrange que vous appeliez Sleep() depuis l'indicateur, car c'est interdit :


Je ne sais pas du tout ce qu'est Sleep().
 
prostotrader:

Alexei !

Un instrument assez liquide :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

Il ne s'agit pas de l'instrument (liquidité), mais du retard, qui peut se produire dans N'IMPORTE QUEL instrument.

Je fais du trading actif avec des EA depuis presque 4 ans maintenant.

Je n'ai aucune pause dans aucun de mes EAs (sauf une pause pour attendre que les données soient téléchargées du serveur dans INDICATORS),

Si vous faites une pause, c'est un signe certain que l'algorithme de votre EA ne fonctionne pas correctement :(

Je fais du trading depuis longtemps aussi, et je n'utilise que des EA. Mais surtout sur MT4. J'ai négocié sur MT5 uniquement avec des conseillers experts utilisant des limites et il n'y a eu aucun problème. Je suis contre les pauses supplémentaires dans les EAs aussi, surtout si c'est un scalper ou un pipsitter, il est facile de manquer une entrée.
 
prostotrader:
Je ne sais pas du tout ce qu'est Sleep().
Alors c'est étrange que vous et moi discutions de pauses maintenant...
 
Alexey Kozitsyn:
Alors c'est étrange que vous et moi discutions de pauses maintenant...
Pas dans le sens de ce que Sleep() fait, mais dans le sens de son application dans mon code.
 
prostotrader:
Pas dans le sens de ce que Sleep() fait, mais dans le sens de l'utiliser dans mon code.
Comment mettre en place une pause dans votre indicateur ?
 
Alexey Kozitsyn:
Comment mettre en place une pause dans votre indicateur ?
//+------------------------------------------------------------------+
// Custom indicator Check timer function                             |
//+------------------------------------------------------------------+
bool CheckTimer(const uint start_value, const uint per_value)
{
  uint end_value = GetTickCount();
  
  if(end_value < start_value)
  {
    if((start_value - end_value) >= per_value) return(true);
  }
  else
  {
    if((end_value - start_value) >= per_value) return(true);
  }
  return(false);
}
//+------------------------------------------------------------------+
//| Custom indicator Get server data function                        |
//+------------------------------------------------------------------+
int LoadServerData(const string a_symbol, ENUM_TIMEFRAMES period)
{
  int fail_cnt = 0;
//---
  while((fail_cnt < 5) && !IsStopped())
  {  
    long first_date = long(SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE));
//---
    if(first_date > 0)
    {
      if(SymbolIsSynchronized(a_symbol))
      {
  //      Print( "LoadServerData: Первая дата на сервере есть. Пробуем получить локальные данные..." );
        return(GetLocalData(a_symbol, period));
      }  
    }
    else
    {
      uint start_tick = GetTickCount();
//---        
      while(!CheckTimer(start_tick, 10))
      {
        fail_cnt--;
        fail_cnt++;
      }
    }    
    fail_cnt++;
  }
// Print( "LoadServerData: Первой даты на сервере нет!" );
  return(0);  
}

Il s'agit d'un vieil exemple.

Comme l'erreur de GetTickCount est plutôt élevée (jusqu'à 16 ms), j'utilise maintenant GetMicrosecondCount().

 
Gennady Mazur:
En principe je le fais, mais dans Forts l'ordre est souvent accepté avec succès...mais au tick suivant il n'y a pas encore de position....
C'est ici que l'ouverture supplémentaire peut glisser .... résoudre partiellement le problème de cette façon, si la commande est acceptée, j'augmente la variable int, et après l'augmentation les conditions d'ouverture sont légèrement différentes, donc une nouvelle ouverture ne se produit pas, mais.... si la commande n'est pas acceptée la variable n'augmente pas, mais voici l'astuce... J'ai mal évalué l'état et des commandes supplémentaires ont commencé à apparaître.
Vous avez déjà répondu à votre propre question. Nous devons suivre l'ordre.
 
prostotrader:

Alexei !

Un instrument assez liquide :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

Il ne s'agit pas de l'instrument (liquidité), mais du retard, qui peut se produire dans N'IMPORTE QUEL instrument.

Je fais du trading actif avec des EA depuis presque 4 ans maintenant.

Je n'ai aucune pause dans aucun de mes EAs (sauf une pause pour attendre que les données soient téléchargées du serveur dans INDICATORS),

Si vous faites une pause, c'est un signe certain que l'algorithme de votre EA ne fonctionne pas correctement :(

Et si vous n'en avez pas ? Peut-être l'algorithme est-il tel que cela n'est pas nécessaire.
 
Gennady Mazur:
Je fais moi aussi du trading depuis assez longtemps et uniquement avec l'aide d'EAs. Mais surtout sur MT4. J'ai négocié sur MT5 uniquement avec des EAs utilisant Limits et il n'y a eu aucun problème. Si je suis un scalper ou un pipsder, je n'aime pas les pauses dans les Expert Advisors, de plus je manque juste une entrée.
Ce n'est pas le cas lorsque vous avez besoin d'une pause.
Raison: