[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 401

 

Escribió el siguiente guión:

//+------------------------------------------------------------------------------------------+
//|                                                                         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 dos palabras. El script está diseñado para eliminar objetos gráficos de la ventana del terminal del cliente. La secuencia de comandos puede utilizarse de dos maneras: o bien se eliminan todos los objetos, o bien la secuencia de comandos recorre una serie de objetos y elimina sólo los seleccionados por el usuario.

Pregunta: por qué en el bucle while después de eliminar el siguiente objeto la última función Alert("Objeto ",nombre_objeto," eliminado con éxito") no muestra el mensaje correspondiente en la pantalla y no aparece de ninguna manera (aunque el objeto se elimina en el bucle while )

Nota: la línea con el archivo de inclusión #include < WinUser32 .mqh> en la cabecera del script, que difiere del archivo de inclusión original #include <WinUser32.mqh>, suministrado con el terminal del cliente, por lo que también se da a continuación

P.S. Para no ensuciar el foro, gracias de antemano por su respuesta

Archivos adjuntos:
 
yosuf:
¿Qué indicador, exactamente, es el mejor para sustituir? ¿No siguen estando disponibles de forma separada?

El MA, por ejemplo, lo tiene, pero hay pocas opciones y las que mencionas no están:

Por lo tanto, puede tomar casi cualquier indicador y hacer su versatilidad usted mismo.

 
7777877:

Pregunta: ¿por qué en el bucle while, después de que se elimine el siguiente objeto, la última función Alert("Objeto ",nombre_objeto," eliminado con éxito") no muestra un mensaje correspondiente en la pantalla y no se muestra de ninguna manera (aunque el objeto correspondiente se elimina en el bucle while )


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

Esto se debe a que if(error != 0) sólo afectará a una Al erta, después de la cual siempre continuará y nunca se invocará la siguiente Alerta
 
Hola! Por favor, dígame cómo hacer un contador de bucle (por ejemplo, FOR) para buscar los pedidos dentro del día actual!
 

Que puedo decir no entiendo nada todavía, solo entiendo una cosa que se trata de ganar dinero, para que hacer asesores si están perdiendo, puedes entrar en la plataforma una vez a la semana y ganar 1000 en un depósito de 3000

 
lowech:
Hola, ¿podríais decirme cómo hacer que el contador del bucle (por ejemplo, FOR) busque los pedidos dentro del día actual?

ExistirEnLaHistoriaDelDía().
 
kamolot: Para qué sirven los EAs si están perdiendo dinero, puedes entrar en la plataforma una vez a la semana y ganar 1000 con un depósito de 3000.
Simplemente no tienen las agallas para pasar por la plataforma aunque sea una vez a la semana y ganar mil dólares. Todos están muy cansados sólo para ganar dinero.
 
GaryKa:
Es que estos programadores laberínticos no tienen corazón para venir aunque sea una vez a la semana a ganarse el chiste. Están demasiado cansados para ganar dinero.

+100500 8-)
 
GaryKa:
Es que estos programadores laberínticos no tienen corazón para venir aunque sea una vez a la semana a ganarse el chiste. Están tan hartos que sólo quieren ganar dinero.

¿Y el globo?

 

Esta es mi idea:

Abro una orden y luego depende del saldo que haya cerrado.

Si el saldo es inferior a cero, registramos la pérdida, y si es superior a cero, empezamos a trabajar desde el principio.

Si nuestra pérdida es menor que cero, la hemos fijado y asignado a una variable, por ejemplo: Menos

Menos = OrderProfit (- 45 céntimos);

AccountAqviti + Minus + mi valor (mi conciencia)

en el próximo pedido

si la ganancia de esta orden es mayor que AccountAqviti + Minus + mi valor (mi conciencia), entonces cerramos la orden; si no, va más allá de cero, entonces la arreglamos:

(AccountAqviti + OrderProfit) - (AccountAqviti + Minus + mi valor (mi conciencia)) = Menos

si Minus >= 0, entonces Minus = 0;

Razón de la queja: