[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 425

 

Tengo que cambiar el stop loss en pips por el stop loss de la vela anterior.

Aquí está el código, cómo ponerlo aquí.

Muchas gracias a los que dan consejos.

double x = ... // Задаем на сколько пипсов выше
double sl = NormalizeDouble(High[1] + x * Point, Digits); // Задаем значение стоплосс на x пипсов выше предпоследней свечи
Archivos adjuntos:
 

Chicos Pro, por favor, aconsejen: compré un EA ($300) a través de un sitio web y lo instalé de acuerdo con las instrucciones del vendedor, pero cuando lo probé en el historial de la cuenta muestra cero ganancias y pérdidas o indica que algo está mal (aunque una vez más, lo he instalado estrictamente de acuerdo con las instrucciones). Por cierto, después de la instalación el Asesor Experto estaba gris entre sus homólogos libres, como si estuviera inactivo. Todos los demás eran de color: caras amarillas con sombrero azul. Moví el Asesor Experto a una cuenta de demostración. Todo como debe ser: cara sonriente, ordenador encendido. Me quejé al vendedor y me escribió: "1) El color gris es código cerrado, no el código fuente .2) mi Asesor Experto no negocia a menudo, así que espera la señal". ¿Pueden decirme si debo esperar? ¿Es esto posible o es una estúpida estafa?

 
vpogarcev:

Me quejé al vendedor y me escribe: "1) el color gris es el código cerrado, no el código fuente .2) El Asesor Experto no opera con frecuencia, así que espere la señal". ¿Pueden decirme si debo esperar? ¿Es posible o es una estúpida estafa?


1) Sí, el EA es gris ya que no hay código fuente;

¿Quién sabe si vale la pena esperar? Los videntes están de vacaciones.

 
vpogarcev:

Chicos Pro, por favor, aconsejen: compré un EA ($300) a través de un sitio web y lo instalé de acuerdo con las instrucciones del vendedor, pero cuando lo probé en el historial de la cuenta muestra cero ganancias y pérdidas o indica que algo está mal (aunque una vez más, lo he instalado estrictamente de acuerdo con las instrucciones). Por cierto, después de la instalación el Asesor Experto estaba gris entre sus homólogos libres, como si estuviera inactivo. Todos los demás eran de color: caras amarillas con sombrero azul. Moví el Asesor Experto a una cuenta de demostración. Todo como debe ser: cara sonriente, ordenador encendido. Me quejé al vendedor y me escribió: "1) El color gris es código cerrado, no el código fuente .2) mi Asesor Experto no negocia a menudo, así que espera la señal". ¿Pueden decirme si debo esperar? ¿Es esto posible o es una estúpida estafa?


En el mejor de los casos, puede que le hayan vendido un EA que pronto dejará de ganar dinero.
 
FAQ:


Correcto, en este caso cuando eliminas, por ejemplo, el objeto 18, el 19 pasa a ocupar su lugar, 19=>18, es decir, obtienes automáticamente una iteración inversa. Utilícelo también para los pedidos.

Además, como la lista de objetos y órdenes son formalmente arrays que comienzan en = 0, el índice máximo será uno menos que el tamaño del array:

Su última reflexión me ha llevado a las siguientes consideraciones... Supongamos que tenemos una función deinit() de la siguiente forma:

int deinit()                           // Спец. функция deinit()
  {
   int Quant_Objects=ObjectsTotal();   // Cтолько всего ВСЕХ объектов
   for(int k=0; k<Quant_Objects; k++)  // По количеству объектов 
     {
      string Obj_Name=ObjectName(k);   // Запрашиваем имя объекта
      string Head=StringSubstr(Obj_Name,0,6);// Извлекаем первые 6 сим
      if (Head==Prefix)                // Если найден объект, …
        {                              // ... начинающийся с Paint_,
         ObjectDelete(Obj_Name);       // … то его и удаляем
        }                              //конец if
     }                                 //конец for
   return;                             // Выход из deinit()
  }                                    //конец deinit
//-------------------------------------------------------------- 10 --

Supongamos que sólo hay 3 objetos en el terminal del cliente, de los cuales el primero y el segundo coinciden con las condiciones de borrado definidas en la función deinit(). En consecuencia, se indexarán 0 y 1 respectivamente. Entonces en la primera iteración la variable k tomará el valor 0 y la función ObjectDelete(0) eliminará el objeto correspondiente. Además, como la lista de objetos es formalmente un array, después de borrar uno de los objetos, los objetos restantes serán reindexados (algo así como formar una nueva barra y reindexar todas las barras que actualmente están presentes en el terminal cliente): entonces el objeto que tenía el índice 1 (el objeto que también debe ser borrado por convención) obtendrá el índice 0, y el objeto que tenía el índice 2 obtendrá el índice 1. Después de borrar el objeto número 0 en la primera iteración, se dará el control a la cadena

for(int k=0; k<Quant_Objects; k++)

para ejecutar la expresión k++. La variable k obtendrá el valor 1 y como el valor de la variable Quant_Objects es 3, las condiciones del operador for (k<Quant_Objects) son verdaderas y se ejecutará la 2ª iteración. Pero en esta iteración no habrá borrado de objetos porque el objeto con índice 1 (antes 2) no cumple las condiciones de borrado. Pero resulta que como la reindexación de los objetos tuvo lugar después de la eliminación del primer objeto, el 2º objeto (que también por condición debería haber sido eliminado) se "saltó" la operación de eliminación, porque en el momento en que la variable k era igual a 1, el índice de ese objeto se reindexó y pasó a ser 0. Esto es lo que se quería decir en la frase "ten en cuenta por separado que no puedes borrar objetos en el primer bucle for, porque en este caso después de cada borrado el número total de objetos y su numeración cambiarán, por lo que algunos nombres de objetos se saltarán".

¿He acertado o hay algún error en mi pensamiento?

Nota: la función deinit() se refiere a la frase "por separado, tenga en cuenta que no debemos borrar objetos en el primer bucle for, porque en este caso después de cada borrado el número total de objetos y su numeración cambiarán, por lo que algunos nombres de objetos se saltarán":

//--------------------------------------------------------------- 9 --
int deinit()                           // Спец. функция deinit()
  {
   string Name_Del[1];                 // Объявление массива
   int Quant_Del=0;                    // Количество удаляемых объекто
   int Quant_Objects=ObjectsTotal();   // Cтолько всего ВСЕХ объектов
   ArrayResize(Name_Del,Quant_Objects);// Необходимый размер массива
   for(int k=0; k<Quant_Objects; k++)  // По количеству объектов 
     {
      string Obj_Name=ObjectName(k);   // Запрашиваем имя объекта
      string Head=StringSubstr(Obj_Name,0,6);// Извлекаем первые 6 сим
      if (Head==Prefix)                // Найден объект, ..
        {                              // .. начинающийся с Paint_
         Quant_Del=Quant_Del+1;        // Колич имён к удалению
         Name_Del[Quant_Del-1]=Obj_Name;//Запоминаем имя удаляемого
        }
     }
   for(int i=0; i<=Quant_Del; i++)     // Удаляем объекты с именами,.. 
      ObjectDelete(Name_Del[i]);       // .. имеющимися в массиве
   return;                             // Выход из deinit()
  }
//-------------------------------------------------------------- 10 --

P.D. Gracias de antemano por su respuesta.

 
7777877:

Su última reflexión me ha llevado a las siguientes consideraciones... Supongamos que tenemos una función deinit() del siguiente tipo:

¿He acertado o me he equivocado en algún punto de mi razonamiento?


Lo has entendido bien.

En general, es mejor utilizar la reducción de índice en los bucles donde se produce la eliminación:

int deinit()                           // Спец. функция deinit()
  {
   for(int k=ObjectsTotal()-1; k>=0; k--)  // По количеству объектов 
     {
      string Obj_Name=ObjectName(k);   // Запрашиваем имя объекта
      string Head=StringSubstr(Obj_Name,0,6);// Извлекаем первые 6 сим
      if (Head==Prefix)                // Найден объект, ..
         ObjectDelete(Obj_Name);
     }
   return;                             // Выход из deinit()
  }
 
 

Señores, utilizando OrderSelect(), pueden encontrar fácilmente el precio de apertura de una orden. ¿Podemos utilizar las cotizaciones del gráfico para saber si hay una orden a un determinado precio o nada en este momento? Es muy molesto buscar entre todas las órdenes de cada cotización en el gráfico (sobre todo si hay muchas) para saber si hay algo o no con ese precio. ¿Puedes lanzarme el código si existe?

 
rosomah:

Señores, utilizando OrderSelect(), podemos encontrar fácilmente el precio de apertura de la orden. ¿Podemos utilizar las cotizaciones del gráfico para saber si hay una orden a un determinado precio o nada en este momento? Es muy molesto buscar entre todas las órdenes de cada cotización en el gráfico (sobre todo si hay muchas) para saber si hay algo o no con ese precio. ¿Puedes lanzarme el código si existe?

Es incómodo ponerse los pantalones por encima de la cabeza © La gente dice.

No eres tú el que se pasa por el forro, es el algoritmo. Si eres tan indigente, puedes hacer todo esto en una sola función que te dará los resultados que necesitas a la carta. Pero en el cuerpo de la función todavía tienes que escribir el código que buscará las posiciones una por una.

 
Reshetov:

No hay manera. Sólo mediante un bucle de uno en uno con OrderSelect().

¿Pueden decirme cómo calcular el volumen total de todas las órdenes (lotes) recorriendo cada orden en un bucle mediante OrderSelect()?