Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 129

 
Roman.:

Mira los tanques, reinicia, tal vez ayude... :-)

P.D. Estoy siendo amable.

No. Los tanques no son una opción. Si realmente quieres hacer algo así. Sólo el resultado te tranquiliza))
 
hoz:
No. Los tanques no son una opción. Si realmente quieres hacer algo así. Se calmará sólo el resultado).

:-)
 

De ninguna manera. En definitiva, resulta un momento extraño. No tenía el lote normalizado. Aquí tenemos la función de normalización de lotes:

//+-------------------------------------------------------------------------------------+
//| Проверка объема на корректность и округление                                        |
//+-------------------------------------------------------------------------------------+
double LotFloor(double value)
{
   return(MathFloor(MathMin(MathMax(value, g_minLot), g_maxLot)/g_lotStep)*g_lotStep);

He comprobado donde había un error, en la propia función de trading desde donde se llaman las funciones de apertura de órdenes. He añadido esta función en el parámetro de lote de la función de llamada que envía las órdenes. El error no ha desaparecido.

Y en cuanto añadí la función de normalización directamente a la primera función de maldición, y esta es la función que establece las órdenes pendientes, la maldición se detuvo. ¿Qué quieres decir con eso?

//+-------------------------------------------------------------------------------------+
//| Открытие отложенной короткой позиции                                                |
//+-------------------------------------------------------------------------------------+
bool OpenPendingSell(double lot, double price)
{
   int g_ticket = -1;
   double OOP = price - i_distanceFromLastPos * pt;
      
   if (OOP < Bid)
   {
       fCheck_ValidPendingOOP(Symbol(), OP_SELLSTOP, OOP);
       
       g_ticket = OrderSend(Symbol(), OP_SELLSTOP, LotFloor(lot), ND(OOP), 30, 0, 0, NULL, i_magic, 0, CLR_NONE);
   }
   if (g_ticket > 0)
   {
       return (true);
   }
   else
       pr ("OpenPendingSell(): Ордер послать не удалось " + GetLastError());
   
   return (false);
}

En el primer caso, envío inmediatamente un lote comprobado, y en el segundo caso, compruebo el tamaño del lote en la propia función OrderSend(). Pero, ¿cuál es la diferencia?

 
chief2000:
El problema es que hay una matriz unidimensional cuyo tamaño puede variar.
¿Cómo recorrer todas las combinaciones posibles de elementos de la matriz entre sí?
El orden de los elementos no importa, es decir, 123==213==321.

Este es un ejemplo para un array con 4 elementos:

Bueno, entre ellos, no parece difícil.

int k = ArraySize(array);
for(int i=0;i<k-1;i++)
for(int ii=i+1;ii<k;ii++)
   {
   ...
   }
Pero, aquí, cuando hay más de dos, no está claro cómo comparar. Muestra un método para comparar tres números 1, 2 y 3 al mismo tiempo,
 
¿Alguien puede decirme cómo hacer para que no tenga que volver a abrir la ventana de optimización..... Cas sted que esta ventana era con diferentes ajustes para el fondo, la vela, etc.
 
¡¡¡Tal vez haya guiones así!!!
 
Hola a todos! Por favor, aconséjenme sobre este tema... Si quiero desplazar el nivel a 798, es demasiado complicado de calcular para muchos pares, ¿cómo debo escribir un indicador que dibuje el precio de la media móvil desplazada o lo muestre en la ventana de datos sin contar manualmente?niveles a MA
 
Roger:

Bueno, entre ellos, no parece difícil

Pero, cuando hay más de dos, no está claro cómo comparar. Muéstrame un método para comparar tres números 1, 2 y 3 al mismo tiempo,

.

Si no me equivoco, el número de ciclos debe coincidir con el número de elementos de la matriz. El problema es que el número de elementos no es fijo y puede ser mucho más de 4, hay que pensar cómo diseñarlo. También me pregunto si hay otras opciones de implementación que afecten a la velocidad, el consumo de memoria, etc.
 
paladin80:



Gracias. ¿No importa desde qué lado se empieza a contar, es decir, desde el tercer compás?
 
Quiero reformular y añadir algo a mi pregunta anterior.
A continuación se muestra el código para un array de 4 elementos. En realidad, el número de elementos de la matriz es variable.
¿Cómo puedo cambiar el código para que el número de bucles 'for' anidados sea variable, un 'for' por elemento del array?
Gracias!

int start() { 

   int Array[4]                                       = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size                                  = ArrayRange(Array,0);


   for(x1=0; x1<Array_Size; x1++) {
      Print("Combination                       = ", Array[x1]);

      for(x2=x1+1; x2<Array_Size; x2++) {
         Print("Combination                    = ", Array[x1] + "   " + Array[x2]);

         for(x3=x2+1; x3<Array_Size; x3++) {
            Print("Combination                 = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

            for(x4=x3+1; x4<Array_Size; x4++) {
               Print("Combination              = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
            }
         }
      }
   }


   return(0);
}