Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1432

 

Olá a todos,

Sou novato, então espero estar escrevendo no lugar certo: estou tentando codificar um EA que possa me ajudar com meu gerenciamento de dinheiro, como :

"fechar todas as negociações quando as perdas passadas + o drawdown atual estiverem abaixo de x%" + "fechar todas as negociações imediatamente até o final da sessão/dia".

Se alguém souber como fazer isso ou puder me ajudar, seria ótimo entrar em contato.

Obrigado, boa negociação ;)

 
jeremy10p100 # :

Olá a todos,

Sou novo, então espero estar escrevendo no lugar certo: estou procurando codificar um EA que possa me ajudar com meu gerenciamento de dinheiro, como :

"fechar todas as negociações quando as perdas passadas + o drawdown atual estiverem abaixo de x%" + "fechar todas as negociações imediatamente até o final da sessão/dia".

Se alguém souber como fazer isso ou puder me ajudar, seria ótimo entrar em contato.

Obrigado, boa negociação ;)

Olá,

Tente pesquisar no mercado soluções prontas - https://www.mql5.com/fr/search#!keyword=money%20management&module=mql5_module_market

Você também pode solicitar uma solução personalizada do Freelance - https://www.mql5.com/fr/job

 
Olá a todos!!! Por favor, me digam como posso copiar valores de uma matriz para o banco de dados? Aqui está o código do exemplo de trabalho com o banco de dados e, quando tento inserir dados da matriz no banco de dados no campo SALARY, recebo um erro ao executar o script. E outra pergunta: se, por exemplo, eu tiver uma matriz com os dados de pedidos e houver muitos deles, como posso mover toda essa matriz para uma tabela no banco de dados?
 VALUES (1,'Paul',a,'California',29000.00)  -->  VALUES (1,'Paul',a,'California',Mass[0])

void OnStart()
  {
  double Mass[4]={1,2,5,6};
  int a =222;
  Alert(Mass[3]);
   string filename="company.sqlite";
//--- создадим или откроем базу данных в общей папке терминалов
   int db=DatabaseOpen(filename, DATABASE_OPEN_READWRITE | DATABASE_OPEN_CREATE |DATABASE_OPEN_COMMON);
   if(db==INVALID_HANDLE)
     {
      Print("DB: ", filename, " open failed with code ", GetLastError());
      return;
     }
//--- если таблица COMPANY существует, то удалим её
   if(DatabaseTableExists(db, "COMPANY_2"))
     {
      //--- удаляем таблицу
      if(!DatabaseExecute(db, "DROP TABLE COMPANY_2"))
        {
         Print("Failed to drop table COMPANY with code ", GetLastError());
         DatabaseClose(db);
         return;
        }
     }
//--- создаем таблицу COMPANY
   if(!DatabaseExecute(db, "CREATE TABLE COMPANY_2("
                       "ID INT PRIMARY KEY     NOT NULL,"
                       "NAME           TEXT    NOT NULL,"
                       "AGE            INT     NOT NULL,"
                       "ADDRESS        CHAR(50),"
                       "SALARY         REAL );"))
     {
      Print("DB: ", filename, " create table failed with code ", GetLastError());
      DatabaseClose(db);
      return;
     }

//--- вставляем данные в таблицу
   if(!DatabaseExecute(db, "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',a,'California',Mass[0]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2,'Allen',25,'Texas',Mass[1]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3,'Teddy',a,'Norway',Mass[2]);"
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4,'Mark',25,'Rich-Mond',65000.00);"))
     {
      Print("DB: ", filename, " insert failed with code ", GetLastError());
      DatabaseClose(db);
      return;
     }

//--- создадим запрос и получим хендл на него
   int request=DatabasePrepare(db, "SELECT * FROM COMPANY_2");
   if(request==INVALID_HANDLE)
     {
      Print("DB: ", filename, " request failed with code ", GetLastError());
      DatabaseClose(db);
      return;
     }

   DatabasePrint(
      db,          // хендл базы данных, полученный в DatabaseOpen
      "COMPANY_2",      // таблица или SQL-запрос
      0              // комбинация флагов
   );
  }
//+------------------------------------------------------------------+


 

Tente fazer isso desta forma, por exemplo.

Em vez de

if(!DatabaseExecute(db, "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',a,'California',Mass[0]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2,'Allen',25,'Texas',Mass[1]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3,'Teddy',a,'Norway',Mass[2]);"
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4,'Mark',25,'Rich-Mond',65000.00);"))

escrever

if(!DatabaseExecute(db, "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',a,'California'," + DoubleToString(Mass[0]) + "); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2,'Allen',25,'Texas'," + DoubleToString(Mass[1]) + "); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3,'Teddy',a,'Norway'," + DoubleToString(Mass[2]) + ");"
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4,'Mark',25,'Rich-Mond',65000.00);"))

Essa não é a única maneira.

 
Yuriy Bykov #:

Tente fazer assim, por exemplo.

Em vez de

escrever

Essa não é a única maneira.

Obrigado! Funciona. Onde posso ler sobre isso? E outras maneiras?

 
lego9955 cria um personagem personalizado.

Preciso alterá-lo para que ele crie não apenas um personagem, mas vários personagens que estão escritos no script.

Por exemplo, três AB AC AD, no futuro qualquer número desse princípio.

Ciclo com substituição do próximo nome de símbolo da lista a cada vez.

Algo como:

string sNames = "AB,AC,AD";
string aNames[];

void OnStart()

  {
   int i;
   bool ch=true;

   if(StringSplit(sNames,StringGetCharacter(",",0),aNames) <= 0)return;

   ResetLastError();
   for(i=0; i<ArraySize(aNames); i++)
      {
       ch=ch && CustomSymbolCreate(aNames[i]);
       if(!ch)
         {
          PrintFormat("Symbol '%s' : error %d",aNames[i],GetLastError());
          break; // При первой ошибке выходим
         }
      }
   if(!ch)return;
   ...
  } 
 

Já fiz isso antes, pensei que tinha feito e apaguei minha postagem.

void OnStart()
{
string arr[]= { "AB", "AC", "AD" };

  for(int i=0; i<ArraySize(arr); i++)

  {
   bool ch =CustomSymbolCreate(arr[i]);
   SymbolSelect(arr[i],true); 
  }  
}

Quando atualizei a página, vi que você havia respondido. Sim, o tratamento de erros está mais correto. Obrigado!

 
lego9955 tratamento de erros está mais correto. Obrigado!
ArraySize(arr)

Seria mais correto definir em ushort fora do loop

 
lynxntech #:

seria mais correto definir em uint fora do loop

Costumo fazer isso, mas ainda quero acreditar que o compilador pode otimizar essas coisas padrão.

 

O robô tem dois filtros: Estocástico e RSI, cada um com um conjunto de parâmetros. Apenas um filtro deve ser usado. Ou seja, se o Estocástico estiver ativado, o RSI deve estar desativado e vice-versa.

Agora eu fiz isso:

  • Criei variáveis de entrada para o Stochastic e o RSI, ativando e desativando seu funcionamento.
  • No bloco OnInit , verifico se o Estocástico e o RSI estão ativados ao mesmo tempo, o erro INIT_PARAMETERS_INCORRECT.
  • No bloco OnInit, verifico se o Stochastic está desativado, então todos os seus parâmetros devem ser zero, caso contrário, o erro INIT_PARAMETERS_INCORRECT/ Da mesma forma com o RSI.

Objetivo:

  • Não perder tempo ao otimizar para escolhas incompatíveis. Por exemplo, para que, se o RSI for selecionado, os parâmetros do Stochastic (tamanho das zonas de sobrecompra/sobrevenda, períodos K, D, desaceleração, método de suavização, preço) não sejam pesquisados.
  • Acontece que minha opção não funciona. Durante a otimização, essas variantes parecem estar superotimizadas de qualquer forma, o que afeta o resultado final da otimização.

Por favor, informe como fazer para que o otimizador não pesquise os parâmetros estocásticos quando o RSI estiver ativado e vice-versa.