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

 
DmitriyN:
Alors, quel est le problème ? Remplacez Close dans n'importe quel indicateur par une différence (High-Low) ou n'importe quel autre indicateur de la liste. Toutefois, dans certains cas, vous pouvez être amené à rendre l'indicateur dans une fenêtre séparée.
Dans quel indicateur, exactement, est-il préférable de changer ? Ne sont-ils pas encore disponibles sous une forme séparée ?
 

J'ai écrit le script suivant :

//+------------------------------------------------------------------------------------------+
//|                                                                         DeleteObject.mq4 |
//+------------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------------+
//|                             script program start function                                |
//+------------------------------------------------------------------------------------------+
//---------------------------------------------------------------------------------------- 1 -
#include <Копия WinUser32.mqh>                                    //подключаемый файл, к-й неожходим для работы функции MessageBox: в этом файле в отличии от файла <WinUser32.mqh> в разделе MessageBox() Flags добавлена строка: #define MB_CANCELTRYCONTINUE      0x00000006  
//---------------------------------------------------------------------------------------- 2 -
int start()
  {
   double Timestart=GetTickCount();                               //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения эксперта 
   if(ObjectsTotal()==0)                                          //если объектов на графике нет
      {                                                           //начало if
       Alert("На графике нет графических объектов");              //то делаем сообщение на экран...
       return;                                                    //...и выходим
      }                                                           //конец if   
   Alert("На графике зафиксировано ",ObjectsTotal()," Объектов");
   Sleep(3000);
   int ret=MessageBox("Удалить ВСЕ графические объекты?","Удаление графических объектов",MB_YESNO|MB_ICONQUESTION);//функция MessageBox: вопрос на экран
   if(ret==6)                                                     //если ответ ДА,...
      {
       ObjectsDeleteAll();                                        //..., то удаляем ВСЕ объекты из ВСЕХ окон текущего графика
       if(!ObjectsDeleteAll())Alert("При удалениии объектов возникла ошибка ",GetLastError());//если удаление не удалось, то сообщение на экран
       Alert("ВСЕ графические объекты успешно удалены");          //сообщение на экран в случае успешного удаления сех объектов
       return;                                                    //и выход из start
      }                                                           //конец if   
//--------------------если ответ НЕТ? то перебираем объекты по списку---------------------- 3 -
   int obj_total=ObjectsTotal();                                  //получаем общее количество графических объектов
   string obj_name;                                               //объявляем переменную  "имя объекта"
   for(int i=obj_total-1;i>=0;i--)                                //цикл по удалению объекта
     {                                                            //начало for
      obj_name=ObjectName(i);                                     //имя текущего удаляемого объекта
      Alert("Удаляется объект: ",obj_name);                       //сообщение на экран     
      ret=MessageBox("Удалить графический объект?","Удаление графического объекта",MB_YESNO|MB_ICONQUESTION);//функция MessageBox: вопрос на экран
      if(ret==7)continue;                                         //если ответ НЕТ, то на следующую итерацию     
      ObjectDelete(obj_name);                                     //если ответ ДА, то удаляем текущий объект с именем obj_name     
      int error=GetLastError();                                   //вычисляем код возможной ошибки, к-я могла появиться при неудачном удалении Графического объекта номер i
      if(error!=0)Alert("При удалении объекта ",obj_name," возникла ошибка ",error);continue;//если функция ObjectDelete(obj_name) вернуа значение ЛОЖЬ (т.е. не удалила текущий объект), то сообщение об ошибке при удалении
      Alert("Объект ",obj_name," успешно удален");                //сообщение об успешном удалении
     }                                                            //конец for
   Comment("\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000," миллисекунд");//печать сообщения вна экран
//---------------------------------------------------------------------------------------- 3 -
   return(0);
  }
//---------------------------------------------------------------------------------------- 4 -

En 2 mots. Ce script est conçu pour supprimer les objets graphiques de la fenêtre du terminal du client. Le script peut être utilisé de deux manières : soit tous les objets sont supprimés, soit le script passe en revue une série d'objets et ne supprime que ceux sélectionnés par l'utilisateur.

Question: pourquoi dans la boucle while, après la suppression de l'objet suivant, la dernière fonction Alert("Object ",obj_name," successfully deleted") n'affiche pas le message correspondant à l'écran et ne s'affiche en aucune façon (bien que l'objet soit supprimé dans la boucle while ).

Note: la ligne avec le fichier include #include<WinUser32.mqh> dans l'en-tête du script, qui diffère du fichier include original #include<WinUser32.mqh>, fourni avec le terminal client, donc c'est aussi ci-dessous

P.S. Afin de ne pas encombrer le forum, merci d'avance pour votre réponse.

Dossiers :
 
yosuf:
Quel indicateur, exactement, est le meilleur à remplacer ? Ne sont-ils pas encore disponibles sous une forme séparée ?

Le MA, par exemple, l'a, mais il y a peu d'options et celles que vous avez mentionnées ne sont pas là :

Par conséquent, vous pouvez prendre presque n'importe quel indicateur et en faire vous-même la polyvalence.

 
7777877:

Question: pourquoi dans la boucle while, après la suppression de l'objet suivant, la dernière fonction Alert("Object ",obj_name," successfully deleted") n'affiche pas de message correspondant à l'écran et ne se montre en aucune façon (bien que l'objet correspondant soit supprimé dans la boucle while )


int error=GetLastError();                                   //вычисляем код возможной ошибки, к-я могла появиться при неудачном удалении Графического объекта номер i
      if(error!=0)Alert("При удалении объекта ",obj_name," возникла ошибка ",error);continue;//если функция ObjectDelete(obj_name) вернуа значение ЛОЖЬ (т.е. не удалила текущий объект), то сообщение об ошибке при удалении
      Alert("Объект ",obj_name," успешно удален");                //сообщение об успешном удалении

En effet, if(error != 0) n'affectera qu'une seule Alerte, après laquelle elle continuera toujours et l'Alerte suivante ne sera jamais invoquée.
 
Bonjour ! Veuillez me dire comment faire un compteur en boucle (par exemple FOR) pour rechercher les commandes dans la journée en cours !
 

Que dire, je ne comprends encore rien, je ne comprends qu'une chose, c'est qu'il s'agit de gagner de l'argent, pourquoi faire des conseillers s'ils perdent, vous pouvez aller sur la plateforme une fois par semaine et gagner 1000 dans un dépôt de 3000.

 
lowech:
Bonjour, Pourriez-vous me dire comment faire pour que le compteur de la boucle (par exemple, FOR) recherche les commandes du jour en cours !

ExistInHistoryToDay().
 
kamolot: A quoi servent les EAs s'ils perdent de l'argent, vous pouvez vous connecter à la plateforme une fois par semaine et gagner 1000 sur un dépôt de 3000 dollars.
Ils n'ont tout simplement pas le courage de passer sur la plate-forme, ne serait-ce qu'une fois par semaine, pour gagner un peu d'argent. Ils sont tous trop fatigués juste pour faire de l'argent.
 
GaryKa:
C'est juste que ces programmateurs labyrinthiques n'ont pas le cœur à venir ne serait-ce qu'une fois par semaine et à mériter leur schtick. Ils sont tous trop fatigués pour gagner de l'argent.

+100500 8-)
 
GaryKa:
C'est juste que ces programmateurs labyrinthiques n'ont pas le cœur à venir ne serait-ce qu'une fois par semaine et à mériter leur schtick. Ils en ont tellement marre qu'ils veulent juste faire de l'argent.

Et le ballon ?