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

 
Valeriy Yastremskiy #:

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

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

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

Bonjour, Valery ! Je suis tout à fait d'accord avec toi. Pour écrire un code correct, il faut une condition exacte d'ouverture de position. Ce code fonctionne aussi :

//+------------------------------------------------------------------+
//|                                                         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()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Tick function                                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   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);
  }
//+------------------------------------------------------------------+

mais toute la question est de savoir s'il doit fonctionner comme Vitaly l'a prévu ? Franchement, je ne comprends pas très bien pourquoi toutes les 20 secondes (ou même toutes les 10, 5 ou 1 seconde), il faut vérifier la différence de prix. Qu'est-ce que cela nous apportera pour déterminer la direction de l'évolution future des prix ?

Cordialement, Vladimir.

 
MrBrooklin #:

Bonjour, Valery ! Je suis tout à fait d'accord avec vous. Pour écrire un code correct, il faut une condition exacte d'ouverture de position. Ce code fonctionne également :

mais toute la question est de savoir s'il doit fonctionner comme Vitaly l'a prévu ? Franchement, je ne comprends pas très bien pourquoi toutes les 20 secondes (ou même toutes les 10, 5 ou 1 seconde), nous devons vérifier la différence de prix. Qu'est-ce que cela apportera en termes de détermination de la direction de l'évolution future des prix ?

Cordialement, Vladimir.

MrBrooklin #:

Bonjour, Valery ! Je suis tout à fait d'accord avec vous. Pour écrire un code correct, il faut une condition exacte pour l'ouverture d'une position. Ce code fonctionne aussi :

mais toute la question est de savoir s'il doit fonctionner comme Vitaly l'a prévu ? Franchement, je ne comprends pas très bien pourquoi toutes les 20 secondes (ou même toutes les 10, 5 ou 1 seconde), nous devons vérifier la différence de prix. Qu'est-ce que cela apportera en termes de détermination de la direction de l'évolution future des prix ?

Cordialement, Vladimir.

Vous décrivez mal la tâche ! Il ne s'agit pas de vérifier "une fois toutes les 20 secondes", mais de vérifier chaque seconde à l'aide des indicateurs qui sont passés il y a un certain temps. Quant à la question "pourquoi", elle n'a pas sa place dans cette discussion. (Et les 20 secondes ne sont qu'un exemple).

C'est comme une moyenne mobile, où la première bougie est comparée à la deuxième bougie. Seulement, je dois tout calculer à l'intérieur de la bougie de la minute courante (zéro) (ou mieux encore, sur un graphique linéaire). Après tout, 20 secondes peuvent s'écouler jusqu'à la première bougie).

 
vitaliy zamkovoy #:
Vous ne décrivez pas la tâche correctement ! Il ne s'agit pas de vérifier "une fois toutes les 20 secondes", mais de vérifier toutes les secondes les valeurs qui se sont écoulées il y a un certain temps. Quant à la question "pourquoi", elle n'a pas sa place dans cette discussion. (Et les 20 secondes ne sont qu'un exemple).

Oui, c'est ma faute, je n'ai pas bien compris ce que vous voulez faire/vérifier.

Cordialement, Vladimir.

 

Mais si la distance égale à votre constante est parcourue non pas en un nombre pair de secondes, mais par exemple en 10,964 secondes ou 11,283 secondes, que se passe-t-il alors ? La condition sera-t-elle remplie ou non ?

Cordialement, Vladimir.

 
MrBrooklin #:

Mais si la distance égale à votre constante est parcourue non pas en un nombre pair de secondes, mais par exemple en 10,964 secondes ou en 11,283 secondes, que se passe-t-il ? La condition sera-t-elle remplie ou non ?

Cordialement, Vladimir.

Dans l'expression "comparaison avec une constante", je ne parle pas d'égalité, mais de "plus" ou de "moins". En cas de différence positive, nous comparons avec la constante avec le signe +, et en cas de différence négative, nous comparons avec la constante avec le signe " - ". Si, dans le premier cas, nous dépassons la constante, nous achetons. Dans le second cas, si la valeur est inférieure, on vend.
 
vitaliy zamkovoy #:
Par "comparaison avec une constante", je n'entends pas l'égalité, mais "plus" "moins".

Maintenant, tout est clair.

Cordialement, Vladimir.

 
MrBrooklin #:

Tout s'explique maintenant.

Cordialement, Vladimir.

J'ai mis à jour les messages ici. Veuillez les relire.
 

J'en ai assez de lire toutes ces absurdités... Après tout, le code ne fait que QUATRE lignes, et les discussions font 3 pages.

  MqlTick mqlTick[], symbTick; // объявили переменные
  SymbolInfoTick(_Symbol, symbTick); // это последний тик
  CopyTicksRange(_Symbol, mqlTick, COPY_TICKS_ALL, symbTick.time_msc, symbTick.time_msc-20000); // Получили все тики за последние 20 секунд
  double delta = NormalizeDouble(mqlTick[ArraySize(mqlTick)-1].bid-mqlTick[0].bid, _Digits); // получили разницу крайних значений массива

20000 millisecondes, c'est 20 secondes.

Ensuite, mettez une condition sur la taille de la variable delta plus/plus petit, gauche/droite ou nord/yuh....

 
MrBrooklin #:

Tout s'explique maintenant.

Cordialement, Vladimir.

MrBrooklin #:

Maintenant, tout s'explique.

Cordialement, Vladimir.

vitaliy zamkovoy #:
J'ai mis à jour les messages ici. Veuillez les relire.
Alexey Viktorov est un snob, mais il a tout de suite compris l'astuce. 😆
 
vitaliy zamkovoy #:
Dans le terme "comparaison avec une constante", je ne parle pas d'égalité, mais de "plus" ou de "moins". Si la différence est positive, nous la comparons à une constante avec un signe +, et si la différence est négative, nous la comparons à une constante avec un signe -. Si, dans le premier cas, nous dépassons la constante, nous achetons. Dans le second cas, si la valeur est inférieure, on vend.

Maintenant, tout est clair.

Cordialement, Vladimir.

P.S. La seule chose que je peux vous recommander est de regarder mon message ici par intérêt, puis de regarder comment le prix s'est comporté après ce message. Il est revenu à 0,98000, ou plus précisément à 0,9806, puis est reparti à la hausse, comme le montre la flèche rouge sur la capture d'écran du graphique des cours. Cette recommandation est juste pour votre réflexion.