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

 
uncleVic:

11110000000000000111111b=> 31457535 (decimal)

proibição de comércio das 00 às 07 horas

horário de negociação entre as 08:00 e as 20:00

proibição das 21h às 23h

Obrigado
 

Provavelmente, é uma pergunta fictícia, ainda não estou muito familiarizado com a sintaxe mql5 (assim como tudo o resto). Uma função pode devolver mais do que um valor, ou uma matriz ou alguma outra estrutura?

Algo do género:

int testfunc(int x, int Y)

{

  z = x + y;

  n =  x * y;

  return(z, n);

}

test = testfunc(5,10);

Print(test.x,test.y);

 
Lone_Irbis:

Provavelmente, é uma pergunta fictícia, ainda não estou muito familiarizado com a sintaxe mql5 (assim como tudo o resto). Uma função pode devolver mais do que um valor, ou uma matriz ou alguma outra estrutura?

Não, é possível descrever uma matriz globalmente e alterar os seus valores numa função.
 
zfs:
Não, a matriz pode ser descrita globalmente e os seus valores podem ser alterados numa função.
Obrigado, vou tentar)
 

O sinal está activo nas subscrições, eu coloco uma marca para activar a subscrição nas definições, depois OK, mas depois volto a abrir as definições e sem marcas.

 
Lone_Irbis:

Provavelmente, é uma pergunta fictícia, ainda não estou muito familiarizado com a sintaxe mql5 (assim como tudo o resto). Uma função pode devolver mais do que um valor, ou uma matriz ou alguma outra estrutura?

Algo do género:

Estruturassimples (não contendo objectos de classe, cordas e matrizes dinâmicas) podem ser devolvidas a partir de funções.

 

Obrigado, consegui resolver o problema sem arrays - apenas utilizando variáveis globais sem quaisquer valores pré-definidos (a porta estava aberta, como sempre).

Contudo, tenho uma pergunta nova, talvez menos típica: sei que o mql5 tem todo o tipo de características incorporadas para o controlo do testador de estratégias. Mas não consigo encontrar nenhum deles que permita lidar com resultados de optimização de uma forma preliminarmente preparada. Suponha que eu quero encontrar um valor de lucro médio entre todos os resultados que têm todos os valores de parâmetro, excepto para Х que está em algum intervalo?

Ou será possível fazer isto apenas à mão em Excel? Eu sei como fazê-lo em Excel, se é que o faço. Só há uma ideia de uma pequena pesquisa (puramente para mim, por interesse), para a qual teria de escavar toda uma montanha de mesas de uma forma muito rotineira e idêntica, e quero automatizá-la de alguma forma...

 
Lone_Irbis:

Obrigado, consegui resolver o problema sem arrays - apenas utilizando variáveis globais sem qualquer valor pré-definido (é sempre fácil abrir uma porta, como sempre).

Contudo, tenho uma pergunta nova, talvez menos típica: sei que o mql5 tem todo o tipo de características incorporadas para o controlo do testador de estratégias. Mas não consigo encontrar nenhum deles que permita lidar com resultados de optimização de uma forma preliminarmente preparada. Suponha que quero encontrar um valor de lucro médio entre todos os resultados que têm todos os valores de parâmetro, excepto para Х que está em alguma faixa?

Ou será possível fazer isto apenas à mão em Excel? Eu sei como fazê-lo em Excel, se é que o faço. Só há uma ideia de pequena investigação (puramente para mim, por interesse), para a qual teria de escavar toda uma montanha de mesas de uma forma muito rotineira e idêntica, e quero automatizá-la de alguma forma...

Leia aqui: https://www.mql5.com/ru/docs/optimization_frames


E depois procurar no fórum por exemplos de utilização.

Документация по MQL5: Работа с результатами оптимизации
Документация по MQL5: Работа с результатами оптимизации
  • www.mql5.com
Работа с результатами оптимизации - Документация по MQL5
 
MetaDriver:

Leia-o aqui: https://www.mql5.com/ru/docs/optimization_frames


E depois procurar no fórum por exemplos de utilização.

Sim, já me deparei com isto algumas vezes, e exemplos como este. Mas por alguma razão, não parecia ser exactamente o que eu procurava. Mas talvez seja apenas porque ainda não sei como fazê-los :)

De qualquer forma, ainda não é relevante enquanto a infeliz coruja não puder ser feita para funcionar correctamente...

Então a última questão (espero, pelo menos) para o futuro próximo é: como acertar o preço de abertura da última encomenda de uma posição?

As minhas corujas de teste não eram realmente minhas originalmente, mas uma recentemente encontrada por um autor desconhecido. Esta coruja teve inicialmente um bug tão estranho: funciona correctamente no testador mas não obtém o valor do preço da última encomenda na demonstração.

double FindLastPrice(long PositionID, bool IsSell) {

   int  i = 0, Total;
   long Ticket, OldTicket = 0, PosID, Magic, Type;
   double OrderPrice = 0;

   HistorySelect(0, TimeCurrent());
   Total = HistoryOrdersTotal();  

   for (i = 0; i < Total; i++) {
      Ticket = (int)HistoryOrderGetTicket(i);
      PosID  = HistoryOrderGetInteger(Ticket, ORDER_POSITION_ID);
      Magic  = HistoryOrderGetInteger(Ticket, ORDER_MAGIC);
      Type   = HistoryOrderGetInteger(Ticket, ORDER_TYPE);
      

      if (IsSell) {
         if ((PosID == PositionID) && (Magic == MagicNumber) && (Type == ORDER_TYPE_SELL)) {
            if (Ticket > OldTicket) {
                OrderPrice = HistoryOrderGetDouble(Ticket, ORDER_PRICE_OPEN);
                OldTicket = Ticket;
            }
         }
      }

      else {
         if ((PosID == PositionID) && (Magic == MagicNumber) && (Type == ORDER_TYPE_BUY)) {
            if (Ticket > OldTicket) {
                OrderPrice = HistoryOrderGetDouble(Ticket, ORDER_PRICE_OPEN);
                OldTicket = Ticket;
            }
         }
      }
   }

   if(!OrderPrice) {
         Print("Ошибка ",GetLastError());
         Sleep(5000);
   }
   return(OrderPrice);
}

Gera erro 4753 (ordem não encontrada) e devolve zero na demonstração (devolve tudo como esperado no provador). E isto apesar do facto de o teste Imprimir sugerir que parece chegar aHistoryOrderGetDouble processamento e até tem um Bilhete que não está vazio...

 

Diz-me, 50 dólares por semana? Quem tem 5000 dólares recebe 100 dólares por semana?

Razão: