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

 
ALXIMIKS:

La pregunta es aburrida, pero la respuesta no aparece por ningún lado, o tal vez sólo busqué mal:

En las funciones, o quizás en algún otro lugar, he visto el símbolo & después del tipo de datos y, si no me equivoco, una vez &&

func(int& mm_mode, string symbol, int magic,bool& stop) {

¿Para qué sirve? ¿Qué hace? (Referencia, si puede encontrar más información al respecto))

Se trata de una transferencia de parámetros por referencia.
hoz:


Y más aún... Se ha comentado que INIT puede fallar en caso de, por ejemplo, desconexiones u otras situaciones similares. Porque no reinicia los datos por sí mismo después, en caso de imprevistos, ¡y sólo se ejecuta una vez! Por lo tanto, esta no es exactamente la forma correcta de hacerlo.
Nadie te impide llamar a init() donde lo necesites, según tu condición.
 
gInitTrue = false;   // В глобальных
-------------------------------------
// Сама функция нашего ИНИТА
bool myInit()
{
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные.
   return(gInitTrue =true);
}
-------------------------------------
//Вызов из старта так:
if (gInitTrue = false)
   myInit();
 

hoz:

gInitTrue = false;   // В глобальных
-------------------------------------
// Сама функция нашего ИНИТА
bool myInit()
{
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные.
   return(gInitTrue =true);
}
-------------------------------------
//Вызов из старта так:
if (gInitTrue = false)
   myInit();

Es lo mismo que:

gInitTrue = false;   // В глобальных
-------------------------------------

bool init()
{
   if
   {
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные..
   }
   return(gInitTrue =true);
}
-------------------------------------
void start()
 {//Вызов из старта так:
  if (gInitTrue = false) init();
 }
 
001:

No consigo averiguar cómo aplicar la lógica con el menor esfuerzo posible.

Si(...) establece una orden de parada;

If(the order's lifetime>time) retira la orden, y if(...) establece una nueva orden;

La dificultad estriba en que puede haber varios puestos que ya están abiertos, y ¿cómo los combatimos todos? ¿Cuál es la forma más fácil?

Gracias.

int MagicNumber=555;
//---
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  //--- фильтр по символу
         if (OrderSymbol()!=Symbol()) continue;
         //--- фильтр по магик номеру (если такая проверка предусмотрена)
         if (OrderMagicNumber()!=MagicNumber) continue;
         //--- срабатывает условие удаления отложенного ордера
         if (OrderOpenPrice()>vremya)
         {  
            if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
            {  
               if (OrderDelete(OrderTicket())==true)
               {  Sleep(5*1000); //после удачного удаления усыпляем советник на 5 секунд
                  if (/*установить стоповый ордер*/)
                  {   OrderSend(...)
                  }
               }
            }
            else return(0);
         }
}  }  }
 
Zhunko:
Esto es pasar el parámetro por referencia.
Nadie te impide llamar a init() donde quieras, según tu condición.


Entonces, debemos resolver el problema del control de este momento. Al fin y al cabo, para saber "dónde debe estar", hay que conocerlo. Y puedes descubrirlo a través de una bandera, por ejemplo. Resulta que, por ejemplo, esa bandera estará en global:

gInitTrue = false;

En init(), asigna un valor al final de la función:

gInitTrue = true;

Y controlaremos el inicio al principio de la función:

if (gInitTrue != true)
    init();
¿Lo he entendido bien? ¿O hay que tener en cuenta algo más?
 
hoz:


Pero, ¿más allá de la cuestión? Se ha comentado que INIT puede fallar en caso de, por ejemplo, desconexiones u otras situaciones similares. Porque no reinicia los datos por sí mismo después, en caso de contingencias, y sólo se ejecuta una vez. Por lo tanto, esta no es una forma muy correcta de hacerlo.
No hay un límite de tiempo para init(), teóricamente los cálculos pueden ejecutarse durante varios segundos/minutos. No tiene sentido romper una conexión aquí. Es decir, el búho se ha lanzado en un gráfico -> ha llegado un tick -> se han iniciado los cálculos en el init() (en este momento puede haber muchos ticks o un fallo de conexión) -> el Asesor Experto para la primera operación start() y así está esperando un nuevo tick.
 
cómo debe escribirse correctamente el código para que si el stop loss o take profit especificado es menor que el stop mínimo, entonces los haga iguales y utilice los stops como el stop mínimo. ?
 
webip:
cómo se debe escribir correctamente el código para que si el stop loss o take profit especificado es menor que el stop mínimo, entonces hacerlos iguales y usar los stops como el stop mínimo. ?
MathMax().
 
¿Puedes decirme un pequeño código? Archivo abierto.... ¿Qué funciones se pueden utilizar para escribir un registro, guardarlo y luego cerrarlo...
 
Zolotai:
¿Puedes decirme un pequeño código? Archivo abierto.... Con qué función se puede escribir una grabación, guardarla y luego cerrarla...

https://docs.mql4.com/ru/files