[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 311

 

Pregunta sobre el funcionamiento del probador: Después deejecutar una prueba, se cambian los parámetros (fechas, par de divisas, marco temporal), se vuelve a ejecutar la prueba - se ejecuta, pero cuando termina la información en las pestañas como "gráfico" e "informe" no cambia en absoluto - todo sigue siendo de la prueba anterior. El informe guardado también resulta ser antiguo. ¿Cuál es el motivo y cómo solucionarlo? ¿Tal vez haya alguna función para restablecer los resultados?

He leído el manual, los artículos, he buscado en el foro, no he encontrado ninguna mención a ese problema...

 

Creo que tengo que usar un archivo externo para arreglar el indicador de krust, no puedo hacerlo, no puedo averiguar qué está mal.Creo que me cansa un poco cuando intento usar un archivo externo pero no sé qué pasa.

1) con el informe

Que ayudará a terminar lo que empezó con los que compartirán la estrategia (Indicador de crujido sólo una parte de la estrategia, pero no menos importante). Graduado real (no puede por tanto tiempo suerte, segado sólo nuestros energéticos y que no poner un bucle de parada, hasta entonces, todo va en aumento y se ve con lo que el progreso).

Archivos adjuntos:
 
pero aquí están los trozos de código
Archivos adjuntos:
 

¿Puede decirme qué pasa? Cuatro órdenes seguidas se modifican con normalidad, pero en el cuarto tick empieza a escribir OrderModify error 1.

Después de un cambio de tendencia, el primer orden está bien, el segundo orden se modifica normalmente, pero una vez más se escriben las mismas tonterías...

La normalización no juega ningún papel.

¡Llevo varios días luchando!

   for (x=0;x<OrT;x++)
   {
   if (OrderSelect(x,SELECT_BY_POS)==true)
    {
     if (OrderMagicNumber() == magic)
      {
       if (OrderType = OP_BUY)
       {
       shift = iBarShift(Symbol(),30,OrderOpenTime());                           //запомнил свечу открытия
        for (m=shift;m>=1;m--)
        if (High[m]-OrderOpenPrice() >= TS*Point)
        {
         if (OrderOpenPrice()+spread*Point != OrderStopLoss())
         {
          OrderModify(OrderTicket(),OrderOpenPrice(),                           //переводит SL в безубыток
          OrderOpenPrice()+spread*Point,OrderTakeProfit(),0,CLR_NONE);
          return;
         }
        }
       }
      }
     if (OrderMagicNumber() == magic)
     {
      if (OrderType = OP_SELL)
      {
       shift = iBarShift(Symbol(),30,OrderOpenTime());                           //запомнил свечу открытия
        for (m=shift;m>=1;m--)
        if (OrderOpenPrice()-Low[m] >= TS*Point)
        {
         if (OrderOpenPrice()-spread*Point != OrderStopLoss())
         {
           OrderModify(OrderTicket(),NormalizeDouble(OrderOpenPrice(),dig),     //переводит SL в безубыток
           NormalizeDouble(OrderOpenPrice()-spread*Point,dig),
           NormalizeDouble(OrderTakeProfit(),dig),0,CLR_NONE);
           return;
         }
        }
       } 
      }
    }
   }

Gracias de antemano.

 
CYBOPOB:

¿Puede decirme qué pasa? Cuatro órdenes seguidas se modifican con normalidad, pero en el cuarto tick empieza a escribir OrderModify error 1.

Después de un cambio de tendencia, la primera orden está bien, la segunda la modifica, pero vuelve a mostrar el mismo error...

La normalización no juega ningún papel.

¡Llevo varios días luchando con esto!

Gracias de antemano.

O bien tienes en cuenta las reglas tú mismo (al escribir el código), o bien utilizas soluciones ya preparadas en las que estas reglas ya se tienen en cuenta.
 
CYBOPOB:

¿Puede decirme qué pasa? Cuatro órdenes seguidas se modifican con normalidad, pero en el cuarto tick empieza a escribir OrderModify error 1.

Después de un cambio de tendencia, el primer orden está bien, el segundo orden se modifica normalmente, pero una vez más se escriben las mismas tonterías...

La normalización no juega ningún papel.

¡Llevo varios días luchando!

Gracias de antemano.

Antes de la modificación, hay que comprobar que el parámetro de la orden stop no es igual al nuevo stop. Si son iguales, no hay nada que modificar. Por lo tanto, el error 1.
 

Sobre la clasificación de matrices.
Estoy tratando de ordenar dos matrices: la primera en orden ascendente(función ArraySort(num_array); y la segunda en función de la primera, de forma que si el quinto elemento de la primera matriz pasa a la primera posición, entonces la segunda matriz hará lo mismo (quinto elemento en la primera posición).
Si hay una función MQL para ordenar arrays juntos, por favor, dame el enlace.
Saludos. Shurkin.

 
artmedia70:
Antes de modificar, debe comprobar que el parámetro de la orden stop no es igual al nuevo stop. Si son iguales, no hay nada que modificar. Por lo tanto, el error 1.


¿No es eso?

if (OrderStopLoss() != OrderOpenPrice()-spread*Point)

Artem, no lo consideres un problema, escribe el código, ¿eh? O dame esa cosa que tienes en la mano, terminaré este tormento...

 
CYBOPOB:

¿No es eso?

Artem, no lo consideres un problema, escribe el código, ¿eh? O dame esa cosa que tienes en la mano, terminaré este tormento...


Eso no. Te lo dije:

Antes de modificar, debe comprobar que el parámetro de la orden stop no es igual al nuevo stop. Si son iguales, no hay nada que modificar. De ahí el error 1.

 

Tengo una pregunta para los profesionales. Quiero que la función sea universal. La función cuenta cuántas barras de una característica (alcista o bajista, que coincidan con el tamaño, quizá algo más que añada) se suceden y si hay una barra que no corresponde a esta característica, es decir, que apunta en otra dirección, el contador se pone a cero.

Aquí hay un código, donde estoy calculando en una de las variantes. Es decir, si las barras de una característica van hacia arriba, es decir, son alcistas.

int LastCandlesType(int trend)
{
   int cnt,                            // Счётчик идущих друг за другом свечей с требуемыми признаками

   for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)     // Если бар соответствует требуемым признакам..
          cnt++;                                                                     // .. прибавим 1 к счётчику

      if (Close[i] < Open[i])                                                        // Если бар, не соответствует основному признаку..
          cnt = 0;                                                                   // .. счётчик обнуляем
      
/*      if (i == 1)
      Print("i = ", i,"; cnt = ", cnt);*/
   }

   if (cnt == 3)                                                                     // Если 5 баров вподряд бычьи..
    return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         //..Выходим из функции
}

Cómo hacer para que al pasar el parámetro de la tendencia a esta función, que será la encargada de pasar la supuesta tendencia principal del momento, el cálculo se base en este parámetro.

Es decir, si latendencia == a la baja, la función en el bucle era como ahora, y sila tendencia == al alza, se intercambiaban en el bucle el Open[i] y el Close[i], para que se cumplieran las condiciones. Porque en ese caso el precio de cierre de la barra será menor que el precio de apertura y la diferencia será menor.