[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 401

 

Escreveu o seguinte roteiro:

//+------------------------------------------------------------------------------------------+
//|                                                                         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 -

Em 2 palavras. O script é projetado para excluir objetos gráficos da janela do terminal do cliente. O script pode ser usado de uma de duas maneiras: ou todos os objetos são excluídos ou o script passa por uma série de objetos e exclui somente aqueles selecionados pelo usuário.

Pergunta: por que no loop while após o próximo objeto é excluído o último Alerta("Objeto ",obj_name," excluído com sucesso") função não mostra a mensagem correspondente na tela e não aparece de forma alguma (embora o objeto seja excluído no loop while )

Nota: a linha com o arquivo include #include < WinUser32.mqh> no cabeçalho do script, que difere do arquivo include original #include <WinUser32.mqh>, fornecido com o terminal do cliente, portanto também é dado abaixo

P.S. A fim de não desperdiçar o fórum, obrigado antecipadamente por sua resposta.

Arquivos anexados:
 
yosuf:
Qual indicador, exatamente, é o melhor para substituir? Eles ainda não estão disponíveis em uma forma separada?

O MA, por exemplo, tem isso, mas há poucas opções e as que você mencionou não estão lá:

Portanto, você pode pegar quase qualquer indicador e fazer você mesmo sua versatilidade.

 
7777877:

Pergunta: por que no loop while, após o próximo objeto ser excluído, a última função Alerta("Objeto ",obj_name," excluído com sucesso") não exibe uma mensagem correspondente na tela e não se mostra de forma alguma (embora o objeto correspondente seja excluído no loop while )


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

Isto porque se(erro != 0) só afetará um Alerta, depois do qual continuará sempre e o próximo Alerta nunca será invocado
 
Olá! Por favor, me diga como fazer um contador de laço (por exemplo, FOR) para procurar por pedidos dentro do dia atual!
 

O que posso dizer que ainda não entendo nada, entendo apenas uma coisa que se trata de ganhar dinheiro, por que fazer consultores se eles estão perdendo, você pode entrar na plataforma uma vez por semana e ganhar 1000 em um depósito de 3000

 
lowech:
Olá! Você poderia me dizer como fazer o contador do laço (por exemplo, FOR) procurar por pedidos dentro do dia atual!

ExistInHistoryToDay().
 
kamolot: Para que servem os EAs se eles estão perdendo dinheiro, você pode entrar na plataforma uma vez por semana e ganhar 1000 em um depósito de 3000.
Eles simplesmente não têm coragem de parar na plataforma mesmo uma vez por semana e ganhar mil dólares. Todos eles estão cansados demais só para ganhar dinheiro.
 
GaryKa:
É que estes programadores labirínticos não têm o coração para vir nem mesmo uma vez por semana e ganhar o seu pauzinho. Eles estão todos muito cansados para ganhar dinheiro.

+100500 8-)
 
GaryKa:
É que estes programadores labirínticos não têm o coração para vir nem mesmo uma vez por semana e ganhar o seu pauzinho. Eles estão tão fartos disso que só querem ganhar dinheiro.

E quanto ao balão?

 

Esta é a minha idéia:

Abro uma ordem, e depois depende do equilíbrio em que fechou.

Se o saldo for menor que zero, registramos a perda, e se for maior que zero, começamos a trabalhar desde o início.

Se nossa perda for menor que zero, nós a fixamos e atribuímos a uma variável, por exemplo: Menos

Menos = OrderProfit (- 45 centavos);

AccountAqviti + Menos + meu valor (minha consciência)

mais adiante no próximo pedido

se o lucro desta ordem for maior que AccountAqviti + Menos + meu valor (minha consciência), então fechamos a ordem; se não, vamos mais alto que zero, então a consertamos:

(AccountAqviti + OrderProfit) - (AccountAqviti + Menos + meu valor (minha consciência)) = Menos

se Menos >= 0, então Menos = 0;

Razão: