[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 832

 
Vinin:

Qu'est-ce qui va changer la prochaine fois ?
La même chose. Une position est fermée - un ordre en attente est fixé, etc. Il existe une fonction qui renvoie la dernière valeur (par exemple, OrderCloseTime()). À chaque tick, j'obtiens la valeur temporelle de la dernière position fermée (disons, la position #1). Lorsque je ferme la position suivante (position n° 2) avec un nouveau tick, j'obtiens l'heure de fermeture de cette position (n° 2). La valeur de OrderCloseTime() a changé par rapport à la valeur précédente. Et ainsi de suite. Je me fiche de savoir comment ou combien la variable a changé. Ce qui m'importe, c'est le fait même que la variable ait changé. C'est comme une opération logique : si l'OrderCloseTime() de la dernière position fermée est supérieur à l'OrderCloseTime() de l'avant-dernière, alors nous devons faire BLA-BLA-BLA. Aussi - si l'OrderClosePrice() de la dernière position fermée n'est pas égal à l'OrderClosePrice() de l'avant-dernière, alors faites un BLA-BLA-BLA. Ou peut-être n'est-il pas possible de faire une telle comparaison ?
 
Voici la question. Supposons, par exemple, que notre EA montre un signal d'achat lorsque l'indicateur (par exemple, j'ai pris CCI) franchit un certain niveau (la ligne rouge) de bas en haut, et un signal de vente lorsqu'il descend, respectivement. Comment faire pour que l'ordre ne s'ouvre qu'une seule fois pendant la formation de la barre A ? Supposons que l'indicateur croise le niveau (la ligne rouge) vers le bas et vers le haut plusieurs fois pendant la formation de la barre A. Comme je l'ai déjà mentionné, nous devrions faire en sorte que l'ordre ne soit ouvert qu'une seule fois.

Ce dont j'ai besoin, c'est que le signal de vente reçu sur la mesure D (situation 2 sur le graphique) ne ferme pas l'ordre ouvert sur la mesure A , et ne soit pas affecté de quelque manière que ce soit.

C'est-à-dire que les ordres ne sont pas contrôlés par le Conseiller Expert après leur ouverture.


Merci d'avance.

 

Veuillez m'aider à joindre un morceau de code Sequent Demarque à l'EA https://www.mql5.com/ru/code/7372.

ne fonctionne pas comme ça :

num=0 :

for(i=barres ; i>=0 ; i--)
{
si ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4) && num!=0 )) {
num++ ;


Si ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4))
acheter.......

si (num==9)
fermer........

 
Vinin:


1. Comptez le nombre de commandes du premier type

2. Compter le nombre de commandes de type 2

3. Comparez les résultats


Cher Vinin. Merci beaucoup !
 
Forrim:
Voici la question. Supposons que le signal d'achat dans l'EA sera affiché lorsque l'indicateur (par exemple, j'ai pris CCI) traverse un certain niveau (ligne rouge) de bas en haut et le signal de vente, respectivement, lorsqu'il est de haut en bas. Comment faire pour que l'ordre ne s'ouvre qu'une seule fois pendant la formation de la barre A ? Supposons que l'indicateur croise le niveau (la ligne rouge) vers le bas et vers le haut plusieurs fois pendant la formation de la barre A. Comme je l'ai déjà mentionné, nous devrions faire en sorte qu'une commande ne soit ouverte qu'une seule fois.

Cela signifie que si un signal de vente est reçu sur la barre D (situation 2 sur le graphique), l'ordre ouvert sur la barre A ne doit pas être fermé et ne doit pas être affecté de quelque manière que ce soit.

C'est-à-dire que les ordres ne sont pas contrôlés par l'EA après leur ouverture.


Merci d'avance.

En fait, l'ICC fait des bonds si importants qu'il vaut mieux le vérifier après la fermeture du bar et l'ouverture d'un nouveau.

Si nous voulons vérifier si l'heure d'ouverture d'une bougie est différente (si c'est le cas, l'ordre s'ouvre) ou est la même (=> aucun ordre ne s'ouvre), alors à chaque croisement nous devons stocker l'heure d'ouverture dans la variable globale.

 
Forrim:
Voici la question. Supposons, par exemple, que notre EA montre un signal d'achat lorsque l'indicateur (par exemple, j'ai pris CCI) franchit un certain niveau (la ligne rouge) de bas en haut, et un signal de vente lorsqu'il descend, respectivement. Comment faire pour que l'ordre ne s'ouvre qu'une seule fois pendant la formation de la barre A ? Supposons que l'indicateur croise le niveau (la ligne rouge) vers le bas et vers le haut plusieurs fois pendant la formation de la barre A. Comme je l'ai déjà mentionné, nous devrions faire en sorte que l'ordre ne soit ouvert qu'une seule fois.

Ce dont nous avons besoin, c'est que le signal de vente reçu sur la mesure D (situation 2 sur le graphique) ne ferme pas l'ordre ouvert sur la mesure A , et ne soit pas affecté de quelque manière que ce soit.

C'est-à-dire que les ordres ne sont pas contrôlés par le Conseiller Expert après leur ouverture.


Merci d'avance.

Si une position de ce type est déjà ouverte, n'en ouvrez pas d'autres.
 
//--------------------------------------------------------------- 1 --
                                   // Численные значения для М15
extern double StopLoss   =20;      // SL для открываемого ордера
extern double TakeProfit =20;      // ТР для открываемого ордера
extern double Step_Sar=0.02;       // Шаг Sar
extern double Maximum_Sar=0.2;     // Максимум Sar
extern double Lot=0.01;            // Жестко заданное колич. лотов
bool Work=true;                    // Эксперт будет работать.
//--------------------------------------------------------------- 2 --
int start()
  { 
   int   
   Total,                           // Количество ордеров в окне 

   Ticket;                          // Номер ордера
   
   double
   Sar_1 ,                          // Значен. Sar текущее
   Sar_0 ,                          // Значение Sar предыдущей свечки      
   Price,                           // Цена ордера
   SL,                              // SL ордера 
   TP;                              // TP ордера
   
   bool
   Ans  =false,                     // Ответ сервера после закрытия
   Cls_B=false,                     // Критерий для закрытия  Buy
   Cls_S=false,                     // Критерий для закрытия  Sell
   Opn_B=false,                     // Критерий для открытия  Buy
   Opn_S=false;                     // Критерий для открытия  Sell
   
//--------------------------------------------------------------- 3 --   
   // Учёт ордеров   

   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symbol())continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total>1)                           // Не более одного орд
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }

   
     
       
        
    
         
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
         }
         }
   
//--------------------------------------------------------------- 6 --
   // Торговые критерии
   Sar_1=iSAR(NULL, 0, 0.02, 0.2, 1);           // Sar_1
   Sar_0=iSAR(NULL, 0, 0.02, 0.2, 0);           // Sar_0
 
   if (Sar_0 > Price && Sar_1 < Price)          // если Sar меняет положение
     {
      Opn_B=true;                               // Критерий откр. Buy             
     }  
   if (Sar_0 < Price && Sar_1 > Price)          // если Sar меняет положение
     {                                          
      Opn_S=true;                               // Критерий откр. Sell                                   
     }   
//--------------------------------------------------------------- 7 --
  
     {
      if (Opn_B==true)         
        {                                       // критерий откр. Buy
         RefreshRates();                        // Обновление данных
         SL=(20+Ask-Bid)*Bid;                 // Вычисление SL откр.
         TP=20*Bid;                           // Вычисление TP откр.
         Alert("Попытка открыть Buy. Ожидание ответа..");
         Ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,SL,TP);//Открытие Buy                         
        }
        if (Fun_Error(GetLastError())==1)      // Обработка ошибок
                                   
         return;                                // Выход из start()
        
        
      if (Opn_S==true)                          // критерий откр. Sell
      
        {                                       // критерий откр. Sell
         RefreshRates();                        // Обновление данных
         SL=(20+Ask-Bid)*Ask;                 // Вычисление SL откр.
         TP=20*Ask;                           // Вычисление TP откр.
         Alert("Попытка открыть Sell. Ожидание ответа..");
         Ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,0,SL,TP);//Открытие Sel
         
         return;                                // Выход из start()
        }
        
      if (Fun_Error(GetLastError())==1)      // Обработка ошибок
                      
         return;                                // Выход из start()
        
     }
//--------------------------------------------------------------- 9 --
   return;                                      // Выход из start()
  }
//-------------------------------------------------------------- 10 --
int Fun_Error(int Error)                        // Ф-ия обработ ошибок
  {
   switch(Error)
     {                                          // Преодолимые ошибки            
      case  4: Alert("Торговый сервер занят. Пробуем ещё раз..");
         Sleep(3000);                           // Простое решение
         return(1);                             // Выход из функции
      case 135:Alert("Цена изменилась. Пробуем ещё раз..");
         RefreshRates();                        // Обновим данные
         return(1);                             // Выход из функции
      case 136:Alert("Нет цен. Ждём новый тик..");
         while(RefreshRates()==false)           // До нового тика
            Sleep(1);                           // Задержка в цикле
         return(1);                             // Выход из функции
      case 137:Alert("Брокер занят. Пробуем ещё раз..");
         Sleep(3000);                           // Простое решение
         return(1);                             // Выход из функции
      case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
         Sleep(500);                            // Простое решение
         return(1);                             // Выход из функции
         // Критические ошибки
      case  2: Alert("Общая ошибка.");
         return(0);                             // Выход из функции
      case  5: Alert("Старая версия терминала.");
         Work=false;                            // Больше не работать
         return(0);                             // Выход из функции
      case 64: Alert("Счет заблокирован.");
         Work=false;                            // Больше не работать
         return(0);                             // Выход из функции
      case 133:Alert("Торговля запрещена.");
         return(0);                             // Выход из функции
      case 134:Alert("Недостаточно денег для совершения операции.");
         return(0);                             // Выход из функции
      default: Alert("Возникла ошибка ",Error); // Другие варианты   
         return(0);                             // Выход из функции
     }
  }
//-------------------------------------------------------------- 11 --

EA élémentaire, doit ouvrir une position lorsque l'indicateur SAR parabolique change par rapport au graphique des prix, fonctionne sur M15, SL et TP sont toujours constants pour la position ouverte.

L'EA compare les positions des indicateurs des chandeliers actuels et précédents.

Il n'y a pas d'erreurs ou de bugs pendant la compilation, dans le test dans les onglets "résultats" "graphique" "rapport" est vide, dans le journal est ceci : "image".

Je suis en train de coder pour le deuxième jour, je n'ai jamais codé auparavant, j'ai lu mes livres de mql et j'ai cherché sur internet pour mon problème. Je suis dans une impasse, aidez-moi si vous le pouvez.


 

T.H.C. essayez ceci




Dossiers :
0000001_1.mq4  3 kb
 
Techno:

T.H.C. Essayez ça.




Merci beaucoup, je ne m'attendais pas à une réponse aussi rapide et à un tel changement dans le code.

Veuillez me conseiller sur les livres de programmation autres que mql de base.

 
T.H.C.:

Merci beaucoup, je ne m'attendais pas à une telle rapidité et à des changements dans le code.

Veuillez me conseiller d'autres livres sur la programmation, en plus du mql de base.

Je n'ai lu que la base, il faut plus de pratique pour avoir une bonne maîtrise du sujet.
Raison: