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

 
RogozaIV:
Passei recentemente de mql4 para mql5. Estou a testar um Consultor Especialista no Índice RTS e tenho um problema em abrir várias posições, embora uma das condições para abrir uma posição seja se (...OrderTotal()==0). Porque é que esta condição não funciona? O que posso fazer para abrir apenas uma posição?

EncomendasTotal

OrdensTotal Devolve o número de ordens activas.

PosiçõesTotal

PosiçõesTotal Retorna o número de posições em aberto.


Nota

Não deve haver confusão entreordens pendentes activas e posições, que também são exibidas no separador "Comércio" do painel "Caixa de ferramentas". Uma ordem é uma ordem para executaruma negociação, enquanto uma posição é o resultado de uma ou maisnegociações.

Com "netting" de posições (ACCOUNT_MARGIN_MODE_RETAIL_NETTING eACCOUNT_MARGIN_MODE_EXCHANGE) apenas umaposição pode ser aberta para cadasímbolo em qualquer altura e é o resultado de um ou maisnegócios. As posições eordens pendentes activas, que também são exibidas no separador "Comércio" do painel "Caixa de Ferramentas", não devem ser confundidas entre si.

Em caso de representação independente de posições (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) várias posições podem ser abertas simultaneamente para cada símbolo.


Ou seja, utilizandoOrderTotal, verifica-se quantos PEDIDOS REVENDIDOS existem neste momento:

TIPO_DE_COMPRA_LIMITE_DE_COMPRA

Ordem de limite de compra pendente

TIPO_DE_ORDEM_LIMITE_DE_VENDA

Ordem de Limite de Venda Pendente

ORDER_TYPE_BUY_STOP

Pedido de paragem de compra pendente

ORDER_TYPE_SELL_STOP

Pedido de paragem de venda pendente

ORDER_TYPE_BUY_STOP_LIMIT

Quando o preço da encomenda é atingido, uma encomenda pendente de Limite de Compra é colocada ao preço StopLimit

TIPO_DE_ORDEM_SELL_STOP_LIMIT

Quando o preço da encomenda é atingido, uma encomenda pendente de Sell Limit é colocada a preço StopLimit


e é necessário verificar quantas posições em aberto existem nesse momento:

POSITION_TYPE_BUY

Comprar

POSITION_TYPE_SELL

Venda


- PositionsTotal deve ser utilizado para isto.

 

Vladimir Karputov Obrigado!

 
Agat:
Boa tarde. Após a última actualização MT5 para construir 1604 os meus indicadores já não estão a funcionar correctamente. Estou a usar
Os chamados indicadores "líquidos". Por exemplo, tenho vários estocásticos multiperíodos numa só janela. Bem, agora as curtas são desenhadas
Como antes, as ligeiramente mais longas desenham apenas algumas barras e as mais longas não são de todo desenhadas.

Tenho a impressão de que começaram subitamente a carecer de história. Poderia dizer-me o que pode estar errado?
Acontece que a falha ocorreu naquelas MT em que os prazos mais baixos não foram abertos. Tive de abrir gráficos de M1 e superiores e tudo estava bem. O assunto está agora encerrado.
 
Sim, entusiasmou-se demasiado cedo, quando reinicia o terminal é o mesmo, tem de clicar em todos os gráficos de cada vez.
Isso não é bom, é impossível de trabalhar. Alguém vai pelo menos dizer uma palavra sobre os méritos da questão ou não? Obviamente que a actualização está com falhas.

Para onde vão as pessoas em busca de tais perguntas?
 
Olá! 2017.06.02_17:45 GMT+3. Tenho uma pergunta a fazer. O programa .mq5 escreveu o seu cálculo de lote, -- o resultado, -- o programa no testador de estratégias tenta abrir uma troca com um lote proibitivamente grande. Percentagem de risco 1,09. O tamanho do depósito é maior do que o depósito (por defeito $10.000). Tentei utilizar o ficheiro padrão OOP da pasta Include>Expert>Money>MoneyFixedRisk.mqh . Resultado: O programa tenta abrir um comércio com lote zero. (0.00). Penso - é um truque de programadores de corporações. Ou está-me a escapar alguma coisa? Bem, torne a sua EA inútil. Dobrar o lote ao lado. Talvez, quem sabe o que devo escrever, para que o Consultor Especialista abra negócios com o lote calculado, com a percentagem de risco especificada? Não o posso fazer eu próprio, estou a perder o meu tempo. Espero que os programadores da nossa corporação não fiquem ofendidos. Estou a anexar o ficheiro incluído Lot.mqh . Espero que alguém responda. 18:00 GMT+3. Inserido às 18:11 GMT+3.
Arquivos anexados:
Lot.mqh  2 kb
 
Agat:
Boa tarde. Após a última actualização MT5 para construir 1604 os meus indicadores já não estão a funcionar correctamente. Estou a usar
Os chamados indicadores "líquidos". Por exemplo, tenho vários estocásticos multiperíodos numa só janela. Bem, agora as curtas são desenhadas
Como antes, as ligeiramente mais longas desenham apenas algumas barras e as mais longas não são de todo desenhadas.

Tenho a impressão de que começaram subitamente a carecer de história. Poderia dizer-me o que pode estar errado?


Como aceder ao histórico de outro período? Que verificações efectua para acesso? Que códigos de erro recebe?

 
Николай Никитюк:
Olá! 2017.06.02_17:45 GMT+3. Tenho uma pergunta a fazer. O programa .mq5 escreveu o seu cálculo de lote, -- o resultado, -- o programa no testador de estratégias tenta abrir uma troca com um lote proibitivamente grande. Percentagem de risco 1,09. O tamanho do depósito é maior do que o depósito (por defeito $10.000). Tentei utilizar o ficheiro padrão OOP da pasta Include>Expert>Money>MoneyFixedRisk.mqh . Resultado: O programa tenta abrir um comércio com lote zero. (0.00). Penso - é um truque de programadores de corporações. Ou está-me a escapar alguma coisa? Bem, torne a sua EA inútil. Dobrar o lote ao lado. Talvez, quem sabe o que devo escrever, para que o Consultor Especialista abra negócios com o lote calculado, com a percentagem de risco especificada? Não o posso fazer eu próprio, estou a perder o meu tempo. Espero que os programadores da nossa corporação não fiquem ofendidos. Estou a anexar o ficheiro incluído Lot.mqh . Espero que alguém responda. 18:00 GMT+3. Inserido às 18:11 GMT+3.

Executar esta EA:Risco Fixo Monetário- alterar ambos os parâmetros de entrada e ver as impressões no separador "Especialistas" do terminal.
 

Não consigo obter quaisquer dados indicadores no meu indicador.

int OnInit()
  {  
   handle1=iMA(NULL,0,per1,0,MODE_LWMA,PRICE_CLOSE);
   handle2=iMA(NULL,0,PLength1,0,MODE_LWMA,PRICE_CLOSE);
  }
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int copied1=CopyBuffer(handle1,0,0,toCount,TMP_Buf1);
   if(copied1<=0)
     {
      Sleep(50);
      for(int i=0;i<100;i++)
        {
         if(BarsCalculated(handle1)>0)
            break;
         Sleep(50);
        }
      copied1=CopyBuffer(handle1,0,0,toCount,TMP_Buf1);
      if(copied1<=0)
        {
         Print(__FUNCTION__+": copying indicator data failed. Error=",GetLastError());
         return(0);
        }
     }  
   int copied2=CopyBuffer(handle2,0,0,toCount,TMP_Buf2);
   if(copied2<=0)
     {
      Sleep(50);
      for(int i=0;i<100;i++)
        {
         if(BarsCalculated(handle2)>0)
            break;
         Sleep(50);
        }
      copied2=CopyBuffer(handle2,0,0,toCount,TMP_Buf2);
      if(copied2<=0)
        {
         Print(__FUNCTION__+": copying indicator data failed. Error=",GetLastError());
         return(0);
        }
     }
  }

Nada é copiado. As variáveis copiadas1/2 são sempre inferiores a zero. No depurador não posso ir mais longe do que este código. Como o fazer correctamente, a minha cabeça já está partida.

 
Hmm... antes havia um erro 4806, agora é 4807 quando mudei a criação da pega para OnInit(). Como se faz isso?
 
Acho que já descobri. A pega não foi criada. Eu não inicializei todos os dados.
Razão: