Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 834

 
Pavel Nikiforov:
Por favor, explique cuál es el problema. La función se supone que busca entre todas las posiciones abiertas y calcula el número de posiciones con un número mágico determinado. De hecho sólo escoge uno de la lista abierta por otro EA con el mismo Ticket y Magik y por tanto el recuento es siempre =0.

Yo mismo lo he averiguado, la selección tiene que hacerse a través dePositionGetSymbol:

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

Yo mismo lo he averiguado, la selección tiene que hacerse conPositionGetSymbol:

No está bien calculado. Tienes que seleccionar en la cuenta hadge utilizando la función PositionGetTicket(i) y luego comprobar el símbolo y el magik.

Документация по MQL5: Торговые функции / PositionGetTicket
Документация по MQL5: Торговые функции / PositionGetTicket
  • www.mql5.com
Торговые функции / PositionGetTicket - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Los comentarios no relacionados con este tema han sido trasladados a "Preguntas de los principiantes de MQL4 MT4 MetaTrader 4".
 
Alexey Viktorov:

No es bueno que lo averigües. Tienes que seleccionar en la cuenta hadge con la función PositionGetTicket(i) y luego comprobar el símbolo y el magik.

Sí, así está mejor, las otras funciones también tenían fallos en la demo, pero ahora funciona.

 

Hola, ¿podría aconsejarme sobre este indicador https://www.mql5.com/ru/forum/94447#comment_6780067

Pone círculos rojos y azules en el gráfico cuando el precio cambia drásticamente, es decir, cuando el precio cambia 4 pips o más,

Necesito que estas señales vayan sólo cuando el precio cambie por 10 pips o más

Archivos adjuntos:
1.png  48 kb
 
yesterday35:

Hola, ¿podría aconsejarme sobre este indicador https://www.mql5.com/ru/forum/94447#comment_6780067

Pone círculos rojos y azules en el gráfico cuando el precio cambia drásticamente, es decir, cuando el precio cambia 4 pips o más,

Quiero que estas señales vayan sólo cuando el precio cambie en 10 pips o más.

Este indicador no calcula pips, sino sigma o RMS (desviación media cuadrática). En una muestra de los últimos N ticks (50 por defecto). Construye un canal de 3 sigmas. Si el precio ha saltado fuera del canal, marcará este lugar. Pero el principal problema es que la serie de precios inicial no tiene una distribución normal con colas muy pesadas. De hecho, este indicador es un juguete-ayuda.

 

Hola.

Estoy escribiendo un pequeño programa. Me encuentro con una situación completamente ininteligible.

En mi código, hay estas dos líneas. Están al final de OnTester() y no están en el bucle.

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

Y he aquí un resultado absolutamente inesperado de la ejecución de estas líneas.

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

Esta es la definición de la funciónMatOgidanieStavk

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

Hola.

Estoy escribiendo un pequeño programa. Me encuentro con una situación completamente ininteligible.

En mi código, hay estas dos líneas. Están al final de OnTester() y no están en el bucle.

Y he aquí un resultado absolutamente inesperado de la ejecución de estas líneas.

Esta es la definición de la funciónMatOgidanieStavk

¿Stavka se inicializa antes de la impresión?

¿cómo se determina que la llamada es la primera dentro de la función?

¿qué resultado esperaba?

 

Gracias. He resuelto el problema.

Resultó que la variableStavka antes de Imprimir. era igual a -1. Su valor se pasó a la función de impresión y se guardó como una copia. Mi funciónMatOgidanieStavk cambió la variableStavkaen sí misma, no su copia que se imprimirá.

 
Así es como debe ser.

2795/2797 será 0. Como no se realiza el redondeo. O bien s3 = (doble)s2/s1; o bien seleccionar doble para s2 y s1