[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 376

 
Existe-t-il un moyen de connaître les commissions pour un ordre de 1 lot sans ouvrir un ordre ?
 
Reshetov:

OrdersTotal() donne le nombre de positions déjà ouvertes, c'est-à-dire que vous pouvez l'utiliser pour vérifier s'il y a déjà une position ouverte ou non.

J'utilise la fonction Terminal() du tutoriel lors de la fermeture des positions, à condition que Mas_Ord_New[0][0]!=0. Mais nous avons une autre tâche ici : nous devons créer un drapeau interdisant de négocier par le signal actuel si un ordre a déjà été ouvert par celui-ci. J'essaie d'utiliser des drapeaux, mais j'ai fait une erreur d'une certaine manière.

  
static bool buy_1=true;
   
if(Stoch_Sig==4 && buy_l==true)
       { 
         sl=Ask-Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
           Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
         if(Ans==true)
            buy_l=false; // снимем флаг, запрещаем торговать по данному сигналу
       }


   
if(Stoch_Sig!=4 && buy_l==false) // поднимем флаг, сигнал сменился - торговать по нему можно опять
       buy_l=true;
 

Parny a besoin d'aide. Qu'est-ce que c'est ?

2012.09.10 18:40:20 '6257743' : ordre d'achat 5.00 EURUSD ouverture à 1.27816 sl : 1.27791 tp : 1.27876 échoué [S/L ou T/P non valide].

Aussi pourquoi le prix et le stop loss sont-ils les mêmes :

Prix 1.25618 Stop Loss 1.25618 Take Profit 1.25698


Take Profit 60 pips

Stop Loss 20

 

Bonjour. J'ai une question sur les indicateurs personnalisés. La description de iCustom dit :

double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)
Calcul de l'indicateur personnalisé spécifié. L'indicateur personnalisé doit être compilé (fichier avec extension EX4) et placé dans leterminal_directory\experts\indicators.
symbole - Nom du symbole, sur les données duquel l'indicateur sera calculé. NULL signifie le symbole actuel.
cadre temporel - Période. Peut être l'une des périodes du graphique. 0 signifie la période du graphique actuel.
nom - Nom de l'indicateur personnalisé.
... - Liste des paramètres (si nécessaire). Les paramètres transmis doivent correspondre à l'ordre de déclaration et au type des variables externes (extern) de l'indicateur personnalisé.
mode - Indice de la ligne de l'indicateur. Peut être compris entre 0 et 7 et doit correspondre à l'index, utilisé par l'une des fonctions SetIndexBuffer.
équipe - Index de la valeur obtenue à partir du tampon de l'indicateur (décalage par rapport à la barre actuelle du nombre de périodes en arrière spécifié).

Question : comment obtenir la valeur de "shift" (lorsqu'on appelle l'indicateur avec un shift, il utilise les valeurs comme sans shift, c'est-à-direiCustom(NULL, 0, "name",pam1,0,1)= iCustom(NULL, 0, "name",pam1,0,100), mais si j'appelle l'indicateur il y a 100 barres, il aura une valeur différente de iCustom(NULL, 0, "name",pam1,0,100). L'indicateur est simple, il utilise 5 valeurs de clôture précédentes, prend leur moyenne.

Je vous serai reconnaissant de votre aide.

 
paladin80:
Vous avez réglé la déviation de la ligne principale sur 0 (zéro). Il devrait être supérieur à zéro.
Reshetov:
Est-ce que vous fixeriez également la déviation à une valeur négative ?


Merci, camarades ! Exactement ! J'étais trop occupé à travailler et je n'avais pas la moindre idée. J'aurais aimé pouvoir simplement cliquer sur le bouton de remerciement, pour ne pas me multiplier. )

A propos, il serait utile de recommander aux débutants de passer des paramètres aux indicateurs via des variables aux noms éloquents. Jusqu'à présent, je l'ai fait, mais cette fois, j'ai raté quelque chose.

 

Bonsoir à tous !

Je voulais poser la même question et j'ai pris la fonction à partir d'ici https://www.mql5.com/ru/forum/131859.

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}

J'obtiens des erreurs--->

Toutes les variables de la fonction sont définies à l'intérieur de celle-ci... qu'est-ce qui ne va pas ?

Je l'ai copié, collé. --->

   if((High[2]==High[1])||(Close[2]==High[1])||(High[2]==Open[1]))
   {
   DeleteOrders()
   }
   
   
 //+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}
 
DanLett:

Il n'y a pas d'erreur :

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
  
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), CLR_NONE);
          }
        }
      }
    }
  }
}
Mais il suffit de spécifier une couleur, par exemple -CLR_NONE.
 

Et on dirait que vous avez cette "suspension dans l'air" :

  if((High[2]==High[1])||(Close[2]==High[1])||(High[2]==Open[1]))
   {
   DeleteOrders()
   }
En fait, une telle condition (High[2]==High[1 ]) ou telle(Close[2]==High[1 ]) ou telle(High[2]==Open[1 ]) est rare. Regardez le graphique, combien de ces coïncidences trouvez-vous ?

En ce qui concerne la logique de la suppression de l'ordre, ... - souffre aussi, en somme.

 

j'ai copié le code d'ici et créé un nouveau projet (EA) j'ai collé le code -> compilé

Bizarrement, cela donne toujours les mêmes erreurs...

 
DanLett:

j'ai copié le code d'ici et créé un nouveau projet (EA) j'ai collé le code -> compilé

Bizarrement, cela donne toujours les mêmes erreurs...

Essayez de tout supprimer sauf cette fonction et compilez. Y aura-t-il des erreurs ? Il suffit de l'enregistrer avant de le supprimer.