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

 
pr0fess0r64


1. Tenemos que eliminar &&OrderSymbol()==Symbol() del código.

2. Hay que normalizar la oferta y la demanda.

3. Es mejor no fijar el deslizamiento en 10 puntos, sino calcularlo dinámicamente. Por ejemplo, si una orden de oro y este instrumento transita 50 puntos por tick, entonces 10 puntos de deslizamiento causarán recotizaciones. Por lo tanto, es mejor calcular el tamaño mínimo del tick y multiplicarlo por este 10.

4. Debe insertar el manejo de errores en su código. De lo contrario, en caso de fallo no entenderá las razones por las que los pedidos no se cerraron.

 
drknn:


1. Debe eliminar &&OrderSymbol()==Symbol() del código

2. Hay que normalizar la oferta y la demanda.

3. El deslizamiento es mejor calcularlo dinámicamente en lugar de 10 pips. Por ejemplo, si una orden sobre el oro y este instrumento se mueve 50 puntos por tick, entonces 10 puntos de deslizamiento le causarán muchas recotizaciones. Por lo tanto, es mejor calcular el tamaño mínimo del tick y multiplicarlo por este 10.

4. Debe insertar el manejo de errores en su código. De lo contrario, en caso de fallo no entenderá las razones por las que los pedidos no se han cerrado

Esta es la visión general, y se puede pensar en un montón de cosas que hacer.
 
pr0fess0r64:
Muchas gracias, lo probaré en el tester, pero sobre la modificación de los pedidos ¿tienes algún consejo?
¿Se producen errores en el libro de registro al modificarlo?
 

¿A dónde se envía la devolución?

Evidentemente, a la línea 0 y a esperar un tic

int start()
  {
//----
   
//----
   return(0);
  }

aquí también está claro - para

   if(Lot_s<=0){
    Alert("Не выбран лот!");
    return;

¿Y aquí?

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает количество ордеров.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ko=0, ot;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) ko++;
        }
      }
    }
  }
  return(ko);
}
El valor del número de pedidos es ko, por lo que la siguiente función debe escribirse utilizando ko? ¿Qué hace aquí el retorno?
 

return() no envía a nadie a ninguna parte.

El operador return termina la función actual y devuelve el control al programa que la llama. El uso de return(expresión); termina la función actual y envía el resultado. La expresión del operador está encerrada entre paréntesis y no debe contener un operador de asignación.

 
Vinin:

return() no envía a nadie a ninguna parte.

El operador return termina la función actual y devuelve el control al programa que la llama. El uso de return(expresión); termina la función actual y envía el resultado. La expresión del operador está encerrada entre paréntesis y no debe contener un operador de asignación.

¿Así que en lugar de asignar explícitamente el resultado de ko, lo pasamos por return? Creo que lo he entendido, gracias.
 
¿Cómo, entonces, es correcto detener el funcionamiento del EA si no se cumplen las condiciones? No para dormirlo, sino para detenerlo por completo.
 
Abzasc:
¿Cómo, entonces, es correcto detener el funcionamiento del EA si no se cumplen las condiciones? No para dormirlo, sino para detenerlo por completo.

¿Qué quiere decir con "ponerlo a dormir" y qué quiere decir con "parar"?
 
Vinin:

¿Qué quiere decir con "poner a dormir" y qué quiere decir con "parar"?

Poner en reposo - poner en reposo, luego intentará arrancar de nuevo.

Parar - por completo, para que el Asesor Experto deje de funcionar (cambia su "cara").

Por ejemplo, el Asesor Experto está bajo Eurobucks, pero fue lanzado en el EuroJPY. Comprueba el símbolo y en caso de no coincidir, lanza la alerta y no intenta trabajar más antes del reinicio manual.

 
Abzasc:

Poner en reposo - poner en reposo, luego intentará arrancar de nuevo.

Parar - por completo, para que el Asesor Experto deje de funcionar (cambia su "cara").

Por ejemplo, el Asesor Experto está bajo Eurobucks, pero fue lanzado en el EuroJPY. Comprueba el símbolo y en caso de no coincidir, lanza una alerta y no intenta volver a trabajar antes del reinicio manual.


¿Por qué tan complicado?

Es suficiente con proporcionar el manejo de la condición en la función start()

int start(){
  if (Symbol()!="EURUSD") {
     Alert("Советник должен работать только на EURUSD");
     return(0);
  }
  // Далее обработка, принятие решений

}
En este caso, si pones el EA en el instrumento equivocado, serás inundado con Alertas, hasta que lo desactives (el EA) tú mismo

También se puede añadir un sonido de sirena, entonces se puede apagar con seguridad

Razón de la queja: