[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 113

 
IgorM:

A veces hay cálculos complejos o carga del historial en init(), o hay un montón de indicadores y Asesores Expertos colgados en el terminal o...

pero si el terminal interrumpe el código durante su inicialización, aparecerá el siguiente error en el registro: ".... tiempo de espera en experto ...."

Si el registro no muestra ningún error en el terminal, significa que la inicialización se ha realizado con éxito. La propia función start() es fácil de comprobar - escriba en la primera línea start(): Print("new tick");


Lo hice((.

int start()
  {
  Print("start");
  
/*current_values_from_MT(CUR, CUR_BUF);
current_values_from_MT(MAIN, MAIN_BUF);*/

  


   return(0);
  }

Sí, me estoy metiendo en un montón de información, cálculos también, experimentando con las garrapatas...

El cálculo tarda de 2 a 3 minutos, MT "no se cuelga", todo funciona normalmente, se muestran los mensajes de Print() y Alert y luego todo))

He mirado todos los mensajes de MT, no he encontrado ningún error...

Por favor, ayuda.

 
BBSL:

El cálculo tarda de 2 a 3 minutos, la MT no se "cuelga", todo funciona como siempre, se muestran los mensajes Print() y Alert y luego todo))

si se imprime Print(), start() definitivamente funciona, pero me confunde tu afirmación de que el cálculo tarda 2-3 minutos - con tal carga en el terminal necesitas interrumpir los cálculos usando la función sleep() de lo contrario el terminal definitivamente se colgará.

Como MT4 no tiene depurador, inserte Print() en las secciones de código cuestionables y capture las secciones de código y las condiciones que fallaron o no fallaron.

 
Necesito fijar el hecho de la activación de las órdenes abiertas por TakeProfit o StopLoss, y los valores de TakeProfit y StopLoss no me interesan.
 
Jaguar1974:

¿Cómo puedo comprobar si una orden se activa por TakeProfit o StopLoss? Gracias por su respuesta.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по стопу.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, osl;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}
Familiarízate con el código de ambas funciones y fúndelas en una sola para optimizar la velocidad de ejecución y para tus tareas específicas...
 
eddy:
Sayod ,¿en qué marco temporal has operado y con qué parámetros?


¿Cuál es la diferencia o lo tienes invertido y quieres probarlo?

Se negocia en h1 por defecto,

Paso de la pipa - 30

LotExpo - 1,59

Creo que los parámetros no importan demasiado si la idea ha sido implementada, creo que el Asesor Experto será bueno con cualquier parámetro, IMHO.

 
Jaguar1974:
Necesito arreglar el hecho de que las órdenes abiertas se activen por TakeProfit o StopLoss. No me interesan los valores reales de TakeProfit y StopLoss.

Si sólo quiere registrar el hecho de que la orden se dispara, entonces puede memorizar el número de órdenes en el tick anterior y compararlo con el número de órdenes en el siguiente tick - si el número de órdenes ha cambiado, significa ....
 
kiimar:
El terminal cerró la orden perdedora con el comentario "so:19,5%/28,4/145,8". ¿Qué significa esto?
Significa que cuando se alcanzó el nivel de margen libre del 19,5%, se produjo un stopout y la operación perdedora se cerró de acuerdo con las reglas.
 
IgorM:

si Print() imprime, entonces seguramente tienes start() funcionando, pero me confunde tu afirmación de que el cálculo tarda 2-3 minutos - a tal carga del terminal necesitas interrumpir los cálculos usando la función sleep(), de lo contrario el terminal se colgará definitivamente

Como MT4 no tiene depurador, inserte Print() en las secciones de código dudosas y capture las secciones de código y las condiciones que fallaron o no fallaron.


Lo siento, me he equivocado, la impresión sólo funciona en init. No puedo entrar en el arranque))

Sí, al final de cada función, pongo print con un mensaje al respecto, para comprobar si todo está bien. Y todos los mensajes (todas las funciones) funcionaron al 100% hasta el final del init, ¡no puedo ir al inicio!

¡Gracias de antemano por la respuesta!

 
Gracias, todavía tengo mucho que aprender.
artmedia70:
Familiarízate con el código de ambas funciones y fúndelas en una sola para optimizar la velocidad de ejecución y para tus tareas específicas...
 
BBSL:


Lo siento, me he expresado mal, la impresión sólo funciona en inite. No puedo entrar en el arranque))

Sí, al final de cada función, inserto una impresión con un mensaje al respecto para comprobar si todo está bien. Y todos los mensajes (todas las funciones) han funcionado al 100% hasta el final de la init, ¡no puedo ir al inicio!

¡Gracias de antemano por la respuesta!

Así que francamente no tienes una garrapata en el terminal. Es decir, o no está conectado, o está trabajando en un gráfico sin conexión, o comprueba IsExpertEnabled() en el init y si no está permitido, entonces habilita los EAs.