Version bêta du livre en ligne sur la programmation MQL4 - par Sergey Kovalev (SK.) - page 7

 

Je me demande également pourquoi le texte utilise des fonctions sans parenthèses OrderType() OrderOpenPrice()

 
Climber:
// Критерии закрытия ордеров

if
(_OrdersTotal == 1) //Выполнять следующее если открыт 1 ордер
{
OrderSelect(0, SELECT_BY_POS);
Tip = OrderType;
OPrice = OrderOpenPrice;

if (Tip = 0) // Расчитать цену закрытия в зависимости от типа ордера (В=0,S=1)
{
Cprice = OPrice + (TakeProfit*Point) + Spread;
if (Bid >= Cprice)
{
Cls_B = True;
}
}
if (Tip = 1)                 
{
Cprice = OPrice - (TakeProfit*Point) - Spread;
if (Ask <= Cprice)
{
Cls_S = True;
}
}
Dans votre code, ce n'est pas l'absence de parenthèses qui pose problème, mais d'autres erreurs, comme l'absence d'un autre signe égal dans la condition (marquée en rouge).
 
Ça n'a pas aidé ==. Toujours la même parenthèse est écrite dans les erreurs. Le critère de clôture ne peut-il pas être écrit dans le code, si le take profit est fixé ? Ou bien cela peut ne pas fonctionner, par exemple, si le prix est soudainement proche du TP et que, en un tick, il change de plusieurs points, sautant par-dessus le TP ?
 
Climber:
Ou pourrait-il échouer, par exemple, si le prix s'approche soudainement du TP et change soudainement de plusieurs pips en un tick, sautant par-dessus le TP ?


C'est théoriquement possible. En d'autres termes, l'ordre sera toujours clôturé, mais il peut l'être non pas au prix TP, mais au premier prix qui apparaît.
Je pense que vous serez intéressé par la lecture du tutoriel MQL4 - Opérations commerciales - Paramètres des ordres et règles des opérations commerciales. Il traite d'un exemple similaire avec le slippage.

 
Une autre caractéristique originale au stade de l'apprentissage de la programmation - tout le temps pour mettre une virgule j'appuie sur la lettre b, là où il y a une virgule dans la disposition anglaise))). Il se trouve que vous écrivez en russe, mais que lorsque vous mettez une virgule, vous oubliez que la disposition russe.
 
Climber:
Une autre caractéristique originale au stade de l'apprentissage de la programmation - tout le temps pour mettre une virgule j'appuie sur la lettre b, là où il y a une virgule dans la disposition anglaise))). Il se trouve que vous écrivez en russe, mais que lorsque vous mettez une virgule, vous oubliez que la disposition russe.

C'est pourquoi beaucoup de gens écrivent des logiciels en anglais, sans utiliser le russe, c'est plus rapide et plus facile, la mise en page ne change pas si souvent, et ensuite le programme est adapté en russe pour quelqu'un d'autre, si des commentaires sont nécessaires, juste dans cette période de travail, c'est plus pratique de russifier, pour une raison quelconque :) La mise en page anglaise est la base pour les personnes qui s'adonnent à ce genre d'écriture, le russe est utilisé à une échelle très minimale, si vous estimez le % d'utilisation de la mise en page anglaise, c'est 99% du temps. J'avais l'habitude de vouloir écrire des programmes en russe, mais après m'être amusé avec 1C, ce désir s'est évaporé.
 
Rosh:
Le problème est découvert, nous allons le régler.

Maintenant, je peux voir les dessins sur https://book.mql4.com/ru/metaeditor/compose
 

Je me demande comment vous avez fait pour faire disparaître mes messages. Ce n'est pas une discussion équitable, les gars. Si vous n'avez rien à dire, dites-le. Je comprends.

 

J'espère seulement que ceux à qui j'ai écrit ont lu et répondu

 
J'ai trouvé les fonctions dont j'ai besoin sur le forum. La première renvoie le numéro de barre de l'extremum de ZigZag par son numéro de barre et la seconde renvoie l'extremum de ZigZag par son numéro de barre. Le premier m'aidera à déterminer si un nouvel extremum du ZigZag a émergé (si le numéro de la barre du ZigZag zéro = 0) et à procéder à partir de là à la vérification des autres critères. Le second sera également utile. Mais il est trop tôt pour le second. J'aimerais m'occuper de la première.

J'ai implémenté cette fonction dans l'éditeur et créé un indicateur. Je n'ai rien ajouté ou retranché. Mais pendant la compilation, j'ai eu tellement d'erreurs. Ils sont horribles. J'ai ensuite essayé de créer un conseiller expert en utilisant uniquement cette fonction. J'ai obtenu le même résultat.((
//+----------------------------------------------------------------------------+
//|  Возвращает номер бара экстремума ЗигЗага по его номеру.                   |
//|  Параметры:                                                                |
//|    sym - наименование инструмента  ("" - текущий символ)                   |
//|    tf  - таймфрейм                 ( 0 - текущий ТФ)                       |
//|    ne  - номер экстремума          ( 0 - текущий)                          |
//|    dp  - ExtDepth                                                          |
//|    dv  - ExtDeviation                                                      |
//|    bc  - ExtBackstep                                                       |
//+----------------------------------------------------------------------------+
int GetExtremumZZBar(string sym="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sym=="") sym=Symbol();
  double zz;
  int    i, k=iBars(sym, tf), ke=0;
 
  for (i=1; i<k; i++) {
    zz=iCustom(sym, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
Qu'est-ce qui ne va pas ici ? Pourquoi crie-t-il à l'erreur ?