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

 
Mikhail Mishanin:

Si nous remplaçons la "valeur du temps" par la différence entre le nouveau temps et le dernier temps calculé ?

C'est-à-dire que nous saurons qu'il y a un nouveau temps :

-Dans le nouveau jour

-d'une nouvelle semaine

-ou avec une différence supérieure au temps spécifié.

Je n'ai aucune idée de comment appliquer ça !


Sur la capture d'écran, le rollover et l'élargissement de l'écart à 22-00, dans la plupart des autres transactions à 00-00, c'est 1 heure après - élargissement de l'écart.

Comment puis-je déterminer par programme la date du retournement, sans limiter le programme à l'heure indiquée dans les paramètres d'entrée ?

---

P.S. Ce code se comporte bien, mais à condition qu'il soit exécuté 500 ticks avant le rollover.

bool CheckSpr(int _sp)
{
   static int ts=0, res=0;
   static long tc=0;
  // Comment( res,"=",tc );
   if(tc>500 && res*3<_sp) return(false); // если уже собрали 500 тиков и есть средний спред - смотрим на расширенный spr*3
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

Je n'ai aucune idée de comment appliquer ça !


Dans la capture d'écran, le roulement et l'élargissement de l'écart à 22-00, dans la plupart des autres transactions à 00-00, c'est 1 heure après - l'élargissement de l'écart.

Comment puis-je déterminer par programme la date du retournement, sans limiter le programme à l'heure indiquée dans les paramètres d'entrée ?

---

P.S. Ce code se comporte bien, mais à la condition qu'il soit exécuté 500 ticks avant le rollover.

La raison de l'élargissement du spread par la négociation est l'ouverture de la session de négociation, c'est-à-dire le "déversement" d'un grand nombre d'ordres à traiter, et l'incertitude de savoir comment (à quel prix) tout va se "régler". La négociation assurera et élargira l'écart. Il vous suffit de retarder l'heure de la fin ou du début de la session de négociation.

 
Mikhail Mishanin:

La raison de l'élargissement du spread par la négociation est l'ouverture de la session de négociation, c'est-à-dire un grand nombre d'ordres placés pour être traités, et donc l'incertitude de savoir comment (à quel prix) tout va se "régler". La négociation assurera et élargira l'écart. Il vous suffit de réserver le temps nécessaire à la fin ou au début de la session de négociation.

Oui, mais ce n'est pas dans les spécifications de l'instrument.

C'est là qu'a lieu le retournement à 22 heures.

Et voici le retournement à 00-00.


 
Vitaly Muzichenko:

Oui, mais ce n'est pas dans les spécifications de l'outil.

TimeCurrent()-TimeGMT()
 

Espérons que la version finale tiendra compte de tous ces éléments.

MqlDateTime dt;
bool CheckSpr(int _sp)
{
  TimeGMT(dt);
  static int ts=0, res=0;
  static long tc=0;
   if(dt.hour==22) return(false);
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

Espérons que la version finale tiendra compte de tous les éléments suivants

deux variables

datetime daLAST=0 ;

datetime daOLD=0 ;


Dans chaque fonction qui peut "échanger", c'est-à-dire qui peut obtenir le temps du tick

daOLD = daLAST ;

daLAST= "heure du tic-tac

Si ( daLAST - daOLD > "time gap") - une nouvelle session a commencé, il y a eu un décalage dans le temps.

{

//sauvegarder, utiliser et annuler ceci comme bon vous semble

}

 
Mikhail Mishanin:

deux variables

datetime daLAST=0 ;

datetime daOLD=0 ;


Dans chaque fonction qui peut "échanger", c'est-à-dire qui peut obtenir le temps du tick

daOLD = daLAST ;

daLAST="tick time"

Si ( daLAST - daOLD > "time gap") - une nouvelle session a commencé, il y a eu un décalage dans le temps.

{

//sauvegarder, utiliser et annuler ceci comme bon vous semble

}

Il y a certaines paires et certains dilemmes où la session asiatique peut ne pas avoir de tick pendant plusieurs minutes, avec un temps de roulement de 21-59 à 22-01, c'est-à-dire plus rapide que l'arrivée du tick en Asie.

 
Vitaly Muzichenko:

Il existe certaines paires et certains dillings sur lesquels, lors de la session asiatique, il peut n'y avoir aucun tick pendant plusieurs minutes, avec un temps de retournement du 21-59 au 22-01, c'est-à-dire plus rapide que l'arrivée du tick en Asie.

Retour à la case départ alors.

quel est l'objectif ? éviter les transactions dont l'écart est exorbitant, n'est-ce pas ?

Alors nous pouvons probablement ignorer le temps et analyser l'écart lui-même.

si Ask - Bid > "seuil" - activer le suivi/accumulation.

siAsk - Bid < "seuil" - le désactiver ou l'accumuler également.

Une telle "vache" semble me servir aussi, je vais collecter quelque chose comme ça, ça va collecter des statistiques...


Et s'il n'y a pas de nouveau tick pendant quelques minutes, il sera plus raisonnable de sauter le(s) premier(s) dans le commerce.

Les statistiques doivent être collectées sur des paires et des alignements spécifiques, car toute "courbure" peut fonctionner aussi bien en "-" qu'en "+".

 
Mikhail Mishanin:

Alors, revenons à la case départ.

quel est l'objectif ? éviter les transactions dont l'écart est exorbitant, n'est-ce pas ?

Dans ce cas, nous pouvons probablement ignorer le temps et analyser l'écart lui-même.

si Ask - Bid > "seuil" - activer le suivi/accumulation.

siAsk - Bid < "seuil" - le désactiver ou l'accumuler également.

Une telle "vache" semble être utile pour moi aussi, je vais collecter quelque chose comme ça, ça va collecter des statistiques....


Et s'il n'y a pas de nouveau tick pendant quelques minutes, il sera plus raisonnable de sauter le(s) premier(s) dans le commerce.

Les statistiques doivent être collectées pour des paires et des dilingues particuliers, car toute "torsion" peut fonctionner comme un "-" ou un "+".

Tout ce que vous avez décrit constitue le code ci-dessus, sauf le jaune - je pense qu'il est redondant et pas tout à fait correct. D'une manière ou d'une autre, je ne me suis jamais rencontré, ce renversement était quelqu'un à un autre moment, toujours en un seul et même temps - à 22-00 GMT, bien que je puisse me tromper.

Mais on voit souvent des durées de reconduction différentes, certaines de 5 minutes, d'autres d'un peu plus d'une minute.

---

Vérifiez le code, vous pouvez peut-être changer quelque chose :

//+------------------------------------------------------------------+
void OnTick(void)
{
   int sp = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);
   static int ts=0;

   if(CheckSpr(sp)) {
      // Здесь код отправки
      Comment( sp,"=",ts++,"=",res );
   } else Comment( "false: ",sp,"=",ts++,"=",res );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MqlDateTime dt;
int res=0;
bool CheckSpr(int _sp)
{
  TimeGMT(dt);
  static int ts=0;
  static long tc=0;
   if(dt.hour==22) return(false);
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

Tout le monde est à la même heure - 10 heures GMT, mais je peux me tromper.

Vous n'avez pas tort.

Raison: