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

 
vitaliy zamkovoy actuel et le comparons à une certaine constante pour l'ouverture ultérieure d'un ordre, comment cela peut-il être écrit dans l'Expert Advisor ?

Regardez ce code :

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

//ВХОДНОЙ ПАРАМЕТР
input ushort Constanta=50; //Константа

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(20);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   double open_0=iOpen(_Symbol,PERIOD_CURRENT,0);
   if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
      Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
   if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
      Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
   Sleep(20000);
   if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
      Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
   if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
      Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
   Sleep(20000);
   if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
      Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
   if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
      Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
   Sleep(20000);
  }
//+------------------------------------------------------------------+
Cordialement, Vladimir.
 
MrBrooklin #:

Regardez ce code :

Salutations, Vladimir.
Malheureusement, je ne pourrai pas vérifier les deux prochains jours, mais acceptez mes remerciements !
 
vitaliy zamkovoy #:
Malheureusement, je ne pourrai pas le vérifier pendant les deux prochains jours, mais acceptez mes remerciements !

Merci, mais veuillez noter qu'il ne s'agit pas d'un code prêt à l'emploi, mais seulement de l'orientation de ma pensée. Il se peut qu'il soit erroné. Vous devez le vérifier. Vous pouvez envisager une autre option - supprimer OnTimer et essayer le même code dans OnTick(). En bref, essayez.

Cordialement, Vladimir.

 
vitaliy zamkovoy actuel et que vous le comparez à une constante avec l'ouverture ultérieure d'un ordre, comment l'enregistrez-vous ?

Enregistrez le prix et l'heure actuels. Comparez l'heure avec l'heure actuelle à chaque tic-tac ; si l'écart est supérieur à 20 secondes, retenez le deuxième prix. Calculez la différence entre le premier et le deuxième prix. Comparez le résultat obtenu avec une constante et prenez la décision d'ouvrir un ordre.

 
Valeriy Yastremskiy #:

Mémoriser le prix et l'heure actuels. Comparez l'heure avec l'heure actuelle à chaque tic-tac, si plus de 20 secondes, mémorisez le deuxième prix. Calculez la différence entre le premier prix et le second. Comparez le résultat obtenu avec une constante et prenez la décision d'ouvrir un ordre.

Est-ce que je vous comprends bien : vous devez mémoriser le prix actuel toutes les secondes pour le comparer au prix actuel lorsque chaque valeur de cette série est supprimée pendant 20 secondes ?

La comparaison doit être continue.

 
vitaliy zamkovoy #:

Ai-je bien compris : vous devez mémoriser le prix actuel à chaque seconde, de sorte que lorsque chaque valeur de cette série est supprimée pendant 20 secondes, vous puissiez la comparer avec la valeur actuelle ?

La comparaison doit être continue.

Les ticks ne vont pas de façon égale, la question est dans l'algorithme alors, s'il est nécessaire de vérifier tous les ticks, alors tous les ticks devraient être mémorisés et comparés. Si c'est possible moins souvent selon l'algorithme, alors un chronomètre et après une seconde mémoriser le prix et après 20 secondes également mémoriser et comparer. Ou plutôt, vous devez mémoriser tous les prix ou les prix d'une seconde dans un délai de 20 secondes et les comparer avec un nouveau tick.
Il peut y avoir 1 tick par seconde, il peut y en avoir un toutes les 5 secondes, et il peut y en avoir 100 en une seconde. Vous devez décider comment agir lorsqu'il y a un tick toutes les 5 secondes et lorsqu'il y a 100 ticks par seconde.

 
Valeriy Yastremskiy #:

Les ticks ne sont pas uniformes, la question est dans l'algorithme alors, si vous avez besoin de vérifier tous les ticks, alors tous les ticks devraient être mémorisés et comparés. S'il est possible d'être moins fréquent selon l'algorithme, alors il faut utiliser une minuterie et, après une seconde, mémoriser le prix et, après 20 secondes, le mémoriser et le comparer. Ou plutôt, vous devriez vous souvenir de tous les prix ou des prix en une seconde dans les 20 secondes et les comparer avec un nouveau tick.
Il peut y avoir 1 tick par seconde, il peut y en avoir un en 5 secondes, et il peut y en avoir 100 en une seconde. Vous devez décider comment agir lorsqu'il y a un tick toutes les 5 secondes et lorsqu'il y a 100 ticks par seconde.

Il ne s'agit pas de choisir une option, il s'agit de la difficulté pour moi de l'écrire.... Je suis ici pour la première fois aujourd'hui. Je suis un parfait amateur.

Je veux juste tester mon idée...

 
vitaliy zamkovoy #:

Il ne s'agit pas de choisir une option, il s'agit de la difficulté pour moi de l'écrire..... C'est la première fois que je viens ici aujourd'hui. Je suis un parfait amateur.

Je veux juste tester mon idée.

L'algorithme doit être précis et comprendre les conditions de son application. On ne peut pas écrire du code autrement. Le code est la réalisation d'un algorithme d'actions, il ne peut pas être inexact.

Et là, il vaut mieux l'écrire soi-même d'abord, et peut-être que vous corrigerez les erreurs.

Vous comprenez les signes d'égalité, plus est moins.

 

Tampon circulaire :

Prenez une mémoire tampon - un tableau statique suffisamment grand de structures "prix, heure" (ou deux tableaux distincts).

Nous prenons deux variables - des "pointeurs" (indices) vers la tête et la queue de la mémoire tampon.

À chaque tic-tac, nous ajoutons un élément à la tête et avançons le pointeur.

Nous comparons l'heure avec l'élément de la queue et, si nécessaire, nous déplaçons le pointeur.

Comparez le prix avec l'élément de la queue.

Si un pointeur a atteint la fin du tableau, il est remis à zéro.

 
JRandomTrader tableau statique suffisamment grand de structures "prix, temps" (ou deux tableaux distincts).

Nous prenons deux variables - des "pointeurs" (indices) vers la tête et la queue de la mémoire tampon.

À chaque tick, nous ajoutons un élément à la tête et déplaçons le pointeur.

Comparer le temps avec l'élément dans la queue, si nécessaire - déplacer le pointeur.

Comparez le prix avec l'élément de la queue.

Si un pointeur a atteint la fin du tableau, il est remis à zéro.

👍
Raison: