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

 
Pavel Nikiforov:
Por favor, explique qual é o problema. A função é suposta de procurar em todas as posições abertas e calcular o número de posições com um dado número mágico. De facto, apenas escolhe um da lista aberta por outra EA com o mesmo bilhete e Magik e, portanto, a contagem é sempre =0.

Eu próprio o descobri, a selecção tem de ser feita através doPositionGetSymbol:

//+------------------------------------------------------------------+
int OpenPositions()//проверка открытых позиций по Magic number 
  {
   int count=0;
     for(int z=PositionsTotal()-1; z>=0; z --) // Перебор всех позиций
     {
       if(PositionGetSymbol(z)!=_Symbol) // Найдена позиция с заданным символом
        {
         Print(__FUNCSIG__" позиция не выбрана ",GetLastError()); continue;
        }
      long  ticket = PositionGetInteger(POSITION_TICKET);
            Print(__FUNCSIG__" ТИКЕТ ", IntegerToString(ticket));
      ulong myMN=PositionGetInteger(POSITION_MAGIC);
            Print(__FUNCSIG__" МАГИК ", IntegerToString(myMN));
      if(myMN==Magic)
            count++;
     }
   return(count);
  }
//+------------------------------------------------------------------+
 
Pavel Nikiforov:

Eu próprio o descobri, a selecção tem de ser feita utilizando oPositionGetSymbol:

Não está bem definido. Tem de seleccionar na conta hadge utilizando a função PositionGetTicket(i) e depois verificar o símbolo e o magik.

Документация по MQL5: Торговые функции / PositionGetTicket
Документация по MQL5: Торговые функции / PositionGetTicket
  • www.mql5.com
Торговые функции / PositionGetTicket - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Comentários não relacionados com este tópico foram transferidos para "Perguntas dos principiantes do MQL4 MT4 MetaTrader 4".
 
Alexey Viktorov:

Não é bom descobrir isso. Tem de seleccionar na conta hadge com a função PositionGetTicket(i) e depois verificar o símbolo e o magik.

Sim, isso é melhor, as outras funções também estavam com falhas na demonstração, mas agora funciona.

 

Olá, poderia aconselhar-me sobre este indicador https://www.mql5.com/ru/forum/94447#comment_6780067

Coloca círculos vermelhos e azuis no gráfico quando o preço muda drasticamente, ou seja, quando o preço muda 4 pips ou mais,

Preciso que estes sinais só sejam emitidos quando o preço mudar em 10 pips ou mais

Arquivos anexados:
1.png  48 kb
 
yesterday35:

Olá, poderia aconselhar-me sobre este indicador https://www.mql5.com/ru/forum/94447#comment_6780067

Coloca círculos vermelhos e azuis no gráfico quando o preço muda drasticamente, ou seja, quando o preço muda 4 pips ou mais,

Quero que estes sinais só sejam emitidos quando o preço mudar em 10 pips ou mais.

Este indicador não calcula pips, mas sim sigma ou RMS (root-mean-square deviation). Sobre uma amostra dos últimos N ticks (50 por defeito). Constrói um canal de 3 sigmas. Se o preço saltou fora do canal, marcará este lugar. Mas o principal problema é que a série de preços inicial não tem uma distribuição normal com caudas muito pesadas. Na verdade, este indicador é um brinquedo-ajuda.

 

Olá.

Estou a escrever um pequeno programa. Estou confrontado com uma situação completamente ininteligível.

No meu código, há estas duas linhas. Eles estão no fim do OnTester() e não estão no laço.

Print("Мат ожидание ставки  ",MatOgidanieStavk(KKef,VVer,Stavka)," Ставка ",Stavka);
Print("Ставка =",Stavka);

E aqui está um resultado absolutamente inesperado da execução destas linhas.

Мат ожидание ставки  447.0461599959392 Ставка -1.0
Ставка =3912.820000338397

Aqui está a definição da funçãoMatOgidanieStavk

double MatOgidanieStavk(double Kef,double Ver,double &BestStavka)
{
 .......... 
   BestStavka=-1;// Первое обращении к этой переменой.
............
return MatOgidanie;
}
 
pivomoe:

Olá.

Estou a escrever um pequeno programa. Estou confrontado com uma situação completamente ininteligível.

No meu código, há estas duas linhas. Eles estão no fim do OnTester() e não estão no laço.

E aqui está um resultado inesperado da execução destas linhas.

Aqui está a definição da funçãoMatOgidanieStavk

O Stavka é inicializado antes da impressão?

como é determinado que a chamada é a primeira dentro da função?

que resultado esperava?

 

Obrigado. Resolvi o problema.

Verificou-se que a variávelStavka antes da impressão. era igual a -1. O seu valor foi passado para a função Imprimir e guardado como uma cópia. A minha funçãoMatOgidanieStavk alterou a variávelStavkaem si, não a sua cópia que irá imprimir.

 
É assim que deve ser.

2795/2797 será 0. Porque os arredondamentos não são efectuados. Ou s3 = (duplo)s2/s1; ou seleccionar duplo para s2 e s1